You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2019/08/16 15:38:00 UTC
[ignite-teamcity-bot] branch master updated: Admin user flag,
now allows to forcibly resolve ticket from the board.
This is an automated email from the ASF dual-hosted git repository.
dpavlov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
The following commit(s) were added to refs/heads/master by this push:
new 75b4188 Admin user flag, now allows to forcibly resolve ticket from the board.
75b4188 is described below
commit 75b418871354ca7ead2e36a23cd78267a1889051
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Fri Aug 16 18:37:55 2019 +0300
Admin user flag, now allows to forcibly resolve ticket from the board.
---
.../org/apache/ignite/ci/runners/ClientTmpHelper.java | 19 ++++++++++++++++++-
.../ignite/ci/runners/RemoteClientTmpHelper.java | 19 ++++++++++++++++++-
.../ignite/ci/web/rest/board/DefectRestService.java | 8 ++++----
ignite-tc-helper-web/src/main/webapp/board/index.html | 7 ++++---
.../java/org/apache/ignite/ci/user/TcHelperUser.java | 16 ++++++++++++++++
.../ignite/tcbot/engine/board/BoardService.java | 19 +++++++++++++------
.../ignite/tcbot/engine/ui/BoardDefectSummaryUi.java | 10 ++++++++++
7 files changed, 83 insertions(+), 15 deletions(-)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/ClientTmpHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/ClientTmpHelper.java
index 0541e80..cf3cbd7 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/ClientTmpHelper.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/ClientTmpHelper.java
@@ -20,10 +20,12 @@ package org.apache.ignite.ci.runners;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.ci.db.TcHelperDb;
+import org.apache.ignite.ci.user.TcHelperUser;
import org.apache.ignite.githubignited.IGitHubConnIgnited;
import org.apache.ignite.ci.issue.Issue;
import org.apache.ignite.tcbot.engine.issue.IssuesStorage;
import org.apache.ignite.jiraignited.JiraTicketDao;
+import org.apache.ignite.tcbot.engine.user.UserAndSessionsStorage;
/**
* Utility class for local connection to TC helper DB (server) and any manipulations with data needed.
@@ -31,12 +33,27 @@ import org.apache.ignite.jiraignited.JiraTicketDao;
public class ClientTmpHelper {
public static void main(String[] args) {
//select some main option here.
- mainDropIssHist(args);
+ //mainDropIssHist(args);
+
+ mainSetUserAsAdmin(args);
}
/**
* @param args Args.
*/
+ public static void mainSetUserAsAdmin(String[] args) {
+ try (Ignite ignite = TcHelperDb.startClient()) {
+ IgniteCache<String, TcHelperUser> users = ignite.cache(UserAndSessionsStorage.USERS);
+ TcHelperUser user = users.get("dpavlov");
+ user.setAdmin(true);
+ users.put(user.username, user);
+ }
+ }
+
+
+ /**
+ * @param args Args.
+ */
public static void mainConsistCheck(String[] args) {
int inconsistent;
try (Ignite ignite = TcHelperDb.startClient()) {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
index 935ca58..d01e3ba 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
@@ -33,6 +33,7 @@ import javax.xml.bind.JAXBException;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.ci.db.TcHelperDb;
import org.apache.ignite.ci.issue.Issue;
import org.apache.ignite.ci.issue.IssueKey;
import org.apache.ignite.tcbot.engine.issue.IssueType;
@@ -68,12 +69,28 @@ public class RemoteClientTmpHelper {
* @param args Args.
*/
public static void main(String[] args) {
- mainDumpAllUsers(args);
+ mainSetUserAsAdmin(args);
+
+ //mainDumpAllUsers(args);
// mainExport(args);
// mainDropInvalidIssues(args);
System.err.println("Please insert option of main");
}
+
+ /**
+ * @param args Args.
+ */
+ public static void mainSetUserAsAdmin(String[] args) {
+ try (Ignite ignite = tcbotServerConnectedClient()) {
+ IgniteCache<String, TcHelperUser> users = ignite.cache(UserAndSessionsStorage.USERS);
+ TcHelperUser user = users.get("dpavlov");
+ user.setAdmin(true);
+ users.put(user.username, user);
+ }
+ }
+
+
public static void mainDropInvalidIssues(String[] args) {
try (Ignite ignite = tcbotServerConnectedClient()) {
IgniteCache<IssueKey, Issue> bst = ignite.cache(IssuesStorage.BOT_DETECTED_ISSUES);
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/board/DefectRestService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/board/DefectRestService.java
index f30dae8..1fbba74 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/board/DefectRestService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/board/DefectRestService.java
@@ -28,10 +28,10 @@ import org.apache.ignite.ci.user.ITcBotUserCreds;
import org.apache.ignite.ci.web.CtxListener;
import org.apache.ignite.tcbot.engine.board.BoardService;
-@Path(DefectRestService.BOARD)
+@Path(DefectRestService.DEFECT)
@Produces(MediaType.APPLICATION_JSON)
public class DefectRestService {
- static final String BOARD = "defect";
+ static final String DEFECT = "defect";
/** Servlet Context. */
@Context
@@ -44,12 +44,12 @@ public class DefectRestService {
@POST
@Path("resolve")
- public void resolveDefect(@FormParam("id") Integer defectId) {
+ public void resolveDefect(@FormParam("id") Integer defectId, @FormParam("forceResolve") Boolean forceResolve) {
ITcBotUserCreds creds = ITcBotUserCreds.get(req);
CtxListener.getInjector(ctx)
.getInstance(BoardService.class)
- .resolveDefect(defectId, creds);
+ .resolveDefect(defectId, creds, forceResolve);
}
}
diff --git a/ignite-tc-helper-web/src/main/webapp/board/index.html b/ignite-tc-helper-web/src/main/webapp/board/index.html
index e7da95d..60311fe 100644
--- a/ignite-tc-helper-web/src/main/webapp/board/index.html
+++ b/ignite-tc-helper-web/src/main/webapp/board/index.html
@@ -63,11 +63,11 @@
formChanged: function () {
},
- onResolve: function (id) {
+ onResolve: function (id, force) {
$.ajax({
url: "/rest/defect/resolve",
type: 'POST',
- data: { id: id } ,
+ data: { id: id, forceResolve: force } ,
success: function (res) {
window.alert("Resolved defect [" + id + "]");
@@ -208,7 +208,8 @@
</tr>
</table>
- <button v-if="item.cntFailingIssues === 0" v-on:click="onResolve(item.id)">Resolve</button>
+ <button v-if="item.cntFailingIssues === 0" v-on:click="onResolve(item.id, false)">Resolve</button>
+ <button v-if="item.forceResolveAllowed === true" v-on:click="onResolve(item.id, true)" class='disabledbtn'>Force resolve</button>
</td>
</template>
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/ci/user/TcHelperUser.java b/tcbot-engine/src/main/java/org/apache/ignite/ci/user/TcHelperUser.java
index 128e65b..2cc6be3 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/ci/user/TcHelperUser.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/ci/user/TcHelperUser.java
@@ -59,6 +59,8 @@ public class TcHelperUser implements IVersionedEntity, INotificationChannel {
public Set<String> additionalEmails = new LinkedHashSet<>();
+ private Boolean admin;
+
/** Subscribed to all failures in following tracked branches. */
@Nullable private Set<String> subscribedToAllFailures;
@@ -198,6 +200,20 @@ public class TcHelperUser implements IVersionedEntity, INotificationChannel {
|| (additionalEmails != null && additionalEmails.contains(email));
}
+ /**
+ * @param admin Administration.
+ */
+ public void setAdmin(Boolean admin) {
+ this.admin = admin;
+ }
+
+ /**
+ *
+ */
+ public boolean isAdmin() {
+ return Boolean.TRUE.equals(admin);
+ }
+
public static class Credentials {
String serverId;
String username;
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/board/BoardService.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/board/BoardService.java
index e7f9ade..6c8649c 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/board/BoardService.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/board/BoardService.java
@@ -85,8 +85,10 @@ public class BoardService {
List<DefectCompacted> defects = defectStorage.loadAllDefects();
BoardSummaryUi res = new BoardSummaryUi();
+ boolean admin = userStorage.getUser(creds.getPrincipalId()).isAdmin();
for (DefectCompacted next : defects) {
BoardDefectSummaryUi defectUi = new BoardDefectSummaryUi(next, compactor);
+ defectUi.setForceResolveAllowed(admin);
String srvCode = next.tcSrvCode(compactor);
@@ -158,9 +160,8 @@ public class BoardService {
fatBuildCompacted.buildTypeId(compactor),
fatBuildCompacted.branchName(compactor)
);
- } else {
+ } else
status = IssueResolveStatus.UNKNOWN;
- }
} else {
if (rebuild.isPresent()) {
testResult = rebuild.get().getAllTests()
@@ -204,7 +205,7 @@ public class BoardService {
Stream<Issue> stream = issuesStorage.allIssues();
//todo make property how old issues can be considered as configuration parameter
- long minIssueTs = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(11);
+ long minIssueTs = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(14);
//todo not so good to to call init() twice
fatBuildDao.init();
@@ -306,12 +307,18 @@ public class BoardService {
}
}
- public void resolveDefect(Integer defectId, ICredentialsProv creds) {
+ public void resolveDefect(Integer defectId, ICredentialsProv creds, Boolean forceResolve) {
DefectCompacted defect = defectStorage.load(defectId);
- Preconditions.checkState(defect!=null, "Can't find defect by ID");
+ Preconditions.checkState(defect != null, "Can't find defect by ID");
String principalId = creds.getPrincipalId();
- TcHelperUser user = userStorage.getUser(principalId);
+ if(Boolean.TRUE.equals(forceResolve)) {
+ boolean admin = userStorage.getUser(principalId).isAdmin();
+
+ Preconditions.checkState(admin);
+ }
+
+ //todo if it is not forced resovle need to check blockers count for now
int strId = compactor.getStringId(principalId);
defect.resolvedByUsernameId(strId);
diff --git a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/BoardDefectSummaryUi.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/BoardDefectSummaryUi.java
index 44021b8..6f1c90e 100644
--- a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/BoardDefectSummaryUi.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/BoardDefectSummaryUi.java
@@ -40,6 +40,7 @@ public class BoardDefectSummaryUi {
private Set<String> tags = new HashSet<>();
private List<BoardDefectIssueUi> issuesList = new ArrayList<>();
+ private boolean forceResolveAllowed;
public BoardDefectSummaryUi(DefectCompacted defect, IStringCompactor compactor) {
this.defect = defect;
@@ -160,6 +161,11 @@ public class BoardDefectSummaryUi {
return (int) issues(IssueResolveStatus.FAILING).count();
}
+ public boolean getForceResolveAllowed() {
+ return forceResolveAllowed;
+ }
+
+
public List<BoardDefectIssueUi> getFixedIssues() {
return issues(IssueResolveStatus.FIXED).collect(Collectors.toList());
}
@@ -187,4 +193,8 @@ public class BoardDefectSummaryUi {
public void addTags(Set<String> parameters) {
this.tags.addAll(parameters);
}
+
+ public void setForceResolveAllowed(boolean admin) {
+ this.forceResolveAllowed = admin;
+ }
}