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 2018/10/24 10:04:27 UTC

[ignite-teamcity-bot] 01/02: IGNITE-9901 Persistent queue for visas added - Fixes #39.

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

commit c5b923bf476e91082dfa31b0d5107a9eade97801
Author: ololo3000 <pm...@gmail.com>
AuthorDate: Wed Oct 24 12:49:23 2018 +0300

    IGNITE-9901 Persistent queue for visas added - Fixes #39.
    
    Signed-off-by: Dmitriy Pavlov <dp...@apache.org>
---
 .../main/java/org/apache/ignite/ci/ITcHelper.java  | 12 +++++--
 .../main/java/org/apache/ignite/ci/TcHelper.java   | 18 ++++++++++
 .../apache/ignite/ci/observer/BuildObserver.java   |  6 ++--
 .../org/apache/ignite/ci/observer/BuildsInfo.java  |  9 ++---
 .../apache/ignite/ci/observer/ObserverTask.java    | 41 +++++++++++++++++-----
 .../tcbot/visa/TcBotTriggerAndSignOffService.java  | 23 +++++++++---
 .../ignite/ci/web/rest/login/UserService.java      |  9 +++--
 7 files changed, 90 insertions(+), 28 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITcHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITcHelper.java
index 00623f7..356b633 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITcHelper.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITcHelper.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.ci;
 
+import java.util.Collection;
 import java.util.List;
 import org.apache.ignite.ci.issue.IssueDetector;
 import org.apache.ignite.ci.issue.IssuesStorage;
@@ -24,8 +25,6 @@ import org.apache.ignite.ci.teamcity.pure.ITcServerProvider;
 import org.apache.ignite.ci.user.ICredentialsProv;
 import org.apache.ignite.ci.user.UserAndSessionsStorage;
 
-import java.util.Collection;
-
 /**
  * Teamcity Bot main interface
  */
@@ -52,6 +51,15 @@ public interface ITcHelper extends ITcServerProvider {
 
     List<String> getTrackedBranchesIds();
 
+    /** */
+    void setServerAuthorizerCreds(ICredentialsProv creds);
+
+    /** */
+    ICredentialsProv getServerAuthorizerCreds();
+
+    /** */
+    boolean isServerAuthorized();
+
     /**
      * @param srvId Server id.
      * @param prov Credentials.
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java
index 5e0422d..1bd64e9 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java
@@ -54,6 +54,9 @@ public class TcHelper implements ITcHelper, IJiraIntegration {
     /** Stop guard. */
     private AtomicBoolean stop = new AtomicBoolean();
 
+    /** Server authorizer credentials. */
+    private ICredentialsProv serverAuthorizerCreds;
+
     @Inject private IssuesStorage issuesStorage;
 
     @Inject private ITcServerProvider serverProvider;
@@ -68,6 +71,21 @@ public class TcHelper implements ITcHelper, IJiraIntegration {
     }
 
     /** {@inheritDoc} */
+    @Override public void setServerAuthorizerCreds(ICredentialsProv creds) {
+        this.serverAuthorizerCreds = creds;
+    }
+
+    /** {@inheritDoc} */
+    @Override public ICredentialsProv getServerAuthorizerCreds() {
+        return serverAuthorizerCreds;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isServerAuthorized() {
+        return !Objects.isNull(serverAuthorizerCreds);
+    }
+
+    /** {@inheritDoc} */
     @Override public IssuesStorage issues() {
         return issuesStorage;
     }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
index f8a7ac3..1e08eb8 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
@@ -17,8 +17,8 @@
 
 package org.apache.ignite.ci.observer;
 
+import java.util.Collection;
 import java.util.Objects;
-import java.util.Queue;
 import java.util.Timer;
 import javax.inject.Inject;
 import org.apache.ignite.ci.tcmodel.result.Build;
@@ -61,7 +61,7 @@ public class BuildObserver {
      * @param ticket JIRA ticket name.
      */
     public void observe(String srvId, ICredentialsProv prov, String ticket, Build... builds) {
-        observerTask.builds.add(new BuildsInfo(srvId, prov, ticket, builds));
+        observerTask.addBuild(new BuildsInfo(srvId, prov, ticket, builds));
     }
 
     /**
@@ -70,7 +70,7 @@ public class BuildObserver {
      */
     public String getObservationStatus(String srvId, String branch) {
         StringBuilder sb = new StringBuilder();
-        Queue<BuildsInfo> builds = observerTask.builds;
+        Collection<BuildsInfo> builds = observerTask.getBuilds();
 
         for (BuildsInfo bi : builds) {
             if (Objects.equals(bi.branchName, branch)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
index e318f19..ba8b48a 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildsInfo.java
@@ -37,9 +37,6 @@ public class BuildsInfo {
     /** Branch name. */
     public final String branchName;
 
-    /** Credentials. */
-    public final ICredentialsProv prov;
-
     /** JIRA ticket full name. */
     public final String ticket;
 
@@ -54,7 +51,6 @@ public class BuildsInfo {
      */
     public BuildsInfo(String srvId, ICredentialsProv prov, String ticket, Build[] builds) {
         this.srvId = srvId;
-        this.prov = prov;
         this.ticket = ticket;
         this.buildTypeId = builds.length > 1 ? "IgniteTests24Java8_RunAll" : builds[0].buildTypeId;
         this.branchName = builds[0].branchName;
@@ -104,13 +100,12 @@ public class BuildsInfo {
         return Objects.equals(srvId, info.srvId) &&
             Objects.equals(buildTypeId, info.buildTypeId) &&
             Objects.equals(branchName, info.branchName) &&
-            Objects.equals(prov, info.prov) &&
             Objects.equals(ticket, info.ticket) &&
-            Objects.equals(finishedBuilds, info.finishedBuilds);
+            Objects.equals(finishedBuilds.keySet(), info.finishedBuilds.keySet());
     }
 
     /** {@inheritDoc} */
     @Override public int hashCode() {
-        return Objects.hash(srvId, buildTypeId, branchName, prov, ticket, finishedBuilds);
+        return Objects.hash(srvId, buildTypeId, branchName, ticket, finishedBuilds.keySet());
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
index 5cbda2e..1e9fc76 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
@@ -17,17 +17,21 @@
 
 package org.apache.ignite.ci.observer;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Queue;
 import java.util.Set;
 import java.util.TimerTask;
-import java.util.concurrent.ConcurrentLinkedQueue;
 import javax.inject.Inject;
+import org.apache.ignite.Ignite;
 import org.apache.ignite.ci.IAnalyticsEnabledTeamcity;
-import org.apache.ignite.ci.teamcity.pure.ITcServerProvider;
+import org.apache.ignite.ci.ITcHelper;
 import org.apache.ignite.ci.di.AutoProfiling;
 import org.apache.ignite.ci.di.MonitoredTask;
 import org.apache.ignite.ci.jira.IJiraIntegration;
+import org.apache.ignite.ci.user.ICredentialsProv;
+import org.apache.ignite.configuration.CollectionConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,18 +45,32 @@ public class ObserverTask extends TimerTask {
     private static final Logger logger = LoggerFactory.getLogger(ObserverTask.class);
 
     /** Helper. */
-    @Inject private ITcServerProvider srvProvider;
+    @Inject private ITcHelper tcHelper;
 
     /** Helper. */
     @Inject private IJiraIntegration jiraIntegration;
 
-    /** Builds. */
-    final Queue<BuildsInfo> builds;
+    /** Ignite. */
+    @Inject private Ignite ignite;
 
     /**
      */
     ObserverTask() {
-        builds = new ConcurrentLinkedQueue<>();
+    }
+
+    /** */
+    private Queue<BuildsInfo> buildsQueue() {
+        return ignite.queue("buildsQueue", 0, new CollectionConfiguration());
+    }
+
+    /** */
+    public Collection<BuildsInfo> getBuilds() {
+        return Collections.unmodifiableCollection(buildsQueue());
+    }
+
+    /** */
+    public void addBuild(BuildsInfo build) {
+        buildsQueue().add(build);
     }
 
     /** {@inheritDoc} */
@@ -71,14 +89,19 @@ public class ObserverTask extends TimerTask {
     @AutoProfiling
     @MonitoredTask(name = "Build Observer")
     protected String runObserverTask() {
+        if (!tcHelper.isServerAuthorized())
+            return "Server authorization required.";
+
         int checkedBuilds = 0;
         int notFinishedBuilds = 0;
         Set<String> ticketsNotified = new HashSet<>();
 
+        Queue<BuildsInfo> builds = buildsQueue();
+
         for (BuildsInfo info : builds) {
             checkedBuilds += info.buildsCount();
 
-            IAnalyticsEnabledTeamcity teamcity = srvProvider.server(info.srvId, info.prov);
+            IAnalyticsEnabledTeamcity teamcity = tcHelper.server(info.srvId, tcHelper.getServerAuthorizerCreds());
 
             if (!info.isFinished(teamcity)) {
                 notFinishedBuilds += info.buildsCount() - info.finishedBuildsCount();
@@ -86,7 +109,9 @@ public class ObserverTask extends TimerTask {
                 continue;
             }
 
-            String jiraRes = jiraIntegration.notifyJira(info.srvId, info.prov, info.buildTypeId,
+            ICredentialsProv creds = tcHelper.getServerAuthorizerCreds();
+
+            String jiraRes = jiraIntegration.notifyJira(info.srvId, creds, info.buildTypeId,
                 info.branchName, info.ticket);
 
             if (JIRA_COMMENTED.equals(jiraRes)) {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
index e4c957e..26680ce 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/TcBotTriggerAndSignOffService.java
@@ -27,17 +27,18 @@ import java.util.stream.Stream;
 import javax.annotation.Nonnull;
 import javax.inject.Inject;
 import javax.ws.rs.QueryParam;
-import org.apache.ignite.ci.tcmodel.hist.BuildRef;
-import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
-import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider;
+import org.apache.ignite.ci.ITcHelper;
 import org.apache.ignite.ci.github.GitHubUser;
+import org.apache.ignite.ci.github.PullRequest;
 import org.apache.ignite.ci.github.ignited.IGitHubConnIgnitedProvider;
 import org.apache.ignite.ci.github.pure.IGitHubConnection;
 import org.apache.ignite.ci.github.pure.IGitHubConnectionProvider;
-import org.apache.ignite.ci.github.PullRequest;
 import org.apache.ignite.ci.jira.IJiraIntegration;
 import org.apache.ignite.ci.observer.BuildObserver;
+import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
+import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
+import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider;
 import org.apache.ignite.ci.user.ICredentialsProv;
 import org.apache.ignite.ci.web.model.SimpleResult;
 import org.apache.ignite.internal.util.typedef.F;
@@ -65,6 +66,14 @@ public class TcBotTriggerAndSignOffService {
 
     @Inject Provider<BuildObserver> observer;
 
+    /** Helper. */
+    @Inject ITcHelper tcHelper;
+
+    /** */
+    public void startObserver() {
+        buildObserverProvider.get();
+    }
+
     /**
      * @param pr Pull Request.
      * @return JIRA ticket full name or empty string.
@@ -154,7 +163,11 @@ public class TcBotTriggerAndSignOffService {
 
         buildObserverProvider.get().observe(srvId, prov, ticketFullName, builds);
 
-        return "JIRA ticket IGNITE-" + ticketFullName + " will be notified after the tests are completed.";
+        if (!tcHelper.isServerAuthorized())
+            return "Ask server administrator to authorize the Bot to enable JIRA notifications.";
+
+        return "JIRA ticket IGNITE-" + ticketFullName +
+            " will be notified after the tests are completed.";
     }
 
     /**
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
index 43feeae..c257a7e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
@@ -17,9 +17,9 @@
 
 package org.apache.ignite.ci.web.rest.login;
 
-
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
+import com.google.inject.Injector;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.FormParam;
@@ -31,10 +31,9 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Form;
 import javax.ws.rs.core.MediaType;
-
-import com.google.inject.Injector;
 import org.apache.ignite.ci.ITcHelper;
 import org.apache.ignite.ci.issue.IssueDetector;
+import org.apache.ignite.ci.tcbot.visa.TcBotTriggerAndSignOffService;
 import org.apache.ignite.ci.tcmodel.user.User;
 import org.apache.ignite.ci.teamcity.pure.ITcLogin;
 import org.apache.ignite.ci.user.ICredentialsProv;
@@ -91,10 +90,14 @@ public class UserService {
 
         final ITcHelper helper = CtxListener.getTcHelper(ctx);
 
+        helper.setServerAuthorizerCreds(prov);
+
         IssueDetector detector = helper.issueDetector();
 
         detector.startBackgroundCheck(helper, prov);
 
+        CtxListener.getInjector(ctx).getInstance(TcBotTriggerAndSignOffService.class).startObserver();
+
         return userMenu(prov, helper);
     }