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/11 16:02:14 UTC

[ignite-teamcity-bot] branch master updated: Building Web links to queued runAll

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 ffd34bc  Building Web links to queued runAll
ffd34bc is described below

commit ffd34bc3542f6fb0cf5092e284455797190ade34
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Thu Oct 11 19:02:12 2018 +0300

    Building Web links to queued runAll
---
 .../main/java/org/apache/ignite/ci/ITeamcity.java  |  5 ----
 .../ci/tcbot/visa/ContributionCheckStatus.java     |  5 ++++
 .../tcbot/visa/TcBotTriggerAndSignOffService.java  | 31 ++++++++++++++++------
 .../ci/teamcity/ignited/ITeamcityIgnited.java      |  5 ++++
 .../ci/teamcity/ignited/TeamcityIgnitedImpl.java   |  9 +++++--
 .../ignite/ci/teamcity/pure/ITeamcityConn.java     | 12 ++++++---
 ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js | 30 +++++++++++++++------
 7 files changed, 70 insertions(+), 27 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
index 9a84b0c..6aa3b60 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITeamcity.java
@@ -147,11 +147,6 @@ public interface ITeamcity extends ITeamcityConn {
     }
 
     /**
-     * @return Normalized Host address, ends with '/'.
-     */
-    public String host();
-
-    /**
      * @param build
      * @return
      */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
index 518cdff..c93b246 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/ContributionCheckStatus.java
@@ -16,6 +16,9 @@
  */
 package org.apache.ignite.ci.tcbot.visa;
 
+import java.util.LinkedList;
+import java.util.List;
+
 /**
  * Status of contribution check details returned from server
  */
@@ -30,4 +33,6 @@ package org.apache.ignite.ci.tcbot.visa;
 
     /** Observations status: Filled if build observer has something sheduled related to {@link #resolvedBranch} */
     public String observationsStatus;
+
+    public List<String> webLinksQueuedRunAlls = new LinkedList<>();
 }
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 7938bd8..e4c957e 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
@@ -23,6 +23,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.annotation.Nonnull;
 import javax.inject.Inject;
 import javax.ws.rs.QueryParam;
@@ -231,18 +232,17 @@ public class TcBotTriggerAndSignOffService {
         }).collect(Collectors.toList());
     }
 
-    @Nonnull private List<BuildRef> findRunAllsForPr(String srvId, ICredentialsProv prov, String suiteId, String prId) {
-        ITeamcityIgnited srv = teamcityIgnitedProvider.server(srvId, prov);
+    @Nonnull private List<BuildRef> findRunAllsForPr(String suiteId, String prId, ITeamcityIgnited server) {
 
         String branchName = branchForTcA(prId);
-        List<BuildRef> buildHist = srv.getBuildHistory(suiteId, branchName);
+        List<BuildRef> buildHist = server.getBuildHistory(suiteId, branchName);
 
         if (!buildHist.isEmpty())
             return buildHist;
 
 
         //todo multibranch requestst
-        buildHist = srv.getBuildHistory(suiteId, branchForTcB(prId));
+        buildHist = server.getBuildHistory(suiteId, branchForTcB(prId));
 
         if (!buildHist.isEmpty())
             return buildHist;
@@ -268,7 +268,9 @@ public class TcBotTriggerAndSignOffService {
         String prId) {
         ContributionCheckStatus status = new ContributionCheckStatus();
 
-        List<BuildRef> allRunAlls = findRunAllsForPr(srvId, prov, suiteId, prId);
+        ITeamcityIgnited teamcity = teamcityIgnitedProvider.server(srvId, prov);
+
+        List<BuildRef> allRunAlls = findRunAllsForPr(suiteId, prId, teamcity);
 
         boolean finishedRunAllPresent = allRunAlls.stream().filter(BuildRef::isNotCancelled).anyMatch(BuildRef::isFinished);
 
@@ -288,10 +290,23 @@ public class TcBotTriggerAndSignOffService {
 
         status.observationsStatus  = Strings.emptyToNull(observationsStatus);
 
-        //todo take into accounts not only run alls:
-        status.queuedBuilds = (int)allRunAlls.stream().filter(BuildRef::isNotCancelled).filter(BuildRef::isQueued).count();
-        status.runningBuilds = (int)allRunAlls.stream().filter(BuildRef::isNotCancelled).filter(BuildRef::isRunning).count();
+        List<BuildRef> queuedRunAlls = allRunAlls.stream().filter(BuildRef::isNotCancelled).filter(BuildRef::isQueued).collect(Collectors.toList());
+        List<BuildRef> runninRunAlls = allRunAlls.stream().filter(BuildRef::isNotCancelled).filter(BuildRef::isRunning).collect(Collectors.toList());
+        status.queuedBuilds = queuedRunAlls.size();//todo take into accounts not only run alls:
+        status.runningBuilds = runninRunAlls.size();
+
+        status.webLinksQueuedRunAlls = Stream.concat(queuedRunAlls.stream(), runninRunAlls.stream())
+            .map(ref -> getWebLinkToQueued(teamcity, ref)).collect(Collectors.toList());
 
         return status;
     }
+
+    //later may move it to BuildRef webUrl
+    /**
+     * @param teamcity Teamcity.
+     * @param ref Reference.
+     */
+    @NotNull public String getWebLinkToQueued(ITeamcityIgnited teamcity, BuildRef ref) {
+        return teamcity.host() + "viewQueued.html?itemId=" + ref.getId();
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
index aacb2d7..470d5d1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/ITeamcityIgnited.java
@@ -26,6 +26,11 @@ import org.apache.ignite.ci.tcmodel.result.Build;
  */
 public interface ITeamcityIgnited {
     /**
+     * @return Normalized Host address, ends with '/'.
+     */
+    public String host();
+
+    /**
      * @param buildTypeId Build type identifier.
      * @param branchName Branch name.
      * @return list of builds in history, includes all statuses: queued, running, etc
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
index fba2f1a..746ef38 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedImpl.java
@@ -27,13 +27,14 @@ import org.apache.ignite.ci.di.MonitoredTask;
 import org.apache.ignite.ci.di.scheduler.IScheduler;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
+import org.apache.ignite.ci.teamcity.pure.ITeamcityConn;
 
 public class TeamcityIgnitedImpl implements ITeamcityIgnited {
     /** Server id. */
     private String srvId;
 
     /** Pure HTTP Connection API. */
-    private ITeamcity conn;
+    private ITeamcityConn conn;
 
 
     /** Scheduler. */
@@ -45,7 +46,7 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
     private long srvIdMaskHigh;
 
 
-    public void init(String srvId, ITeamcity conn) {
+    public void init(String srvId, ITeamcityConn conn) {
         this.srvId = srvId;
         this.conn = conn;
 
@@ -53,6 +54,10 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited {
         buildRefDao.init(); //todo init somehow in auto
     }
 
+    /** {@inheritDoc} */
+    @Override public String host() {
+        return conn.host();
+    }
 
     /** {@inheritDoc} */
     @AutoProfiling
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/pure/ITeamcityConn.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/pure/ITeamcityConn.java
index 9494bd5..516bd5a 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/pure/ITeamcityConn.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/pure/ITeamcityConn.java
@@ -24,16 +24,20 @@ import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
 
 /**
- * Pure Teamcity Connection
- * API for calling methods from REST service:
- * https://confluence.jetbrains.com/display/TCD10/REST+API
+ * Pure Teamcity Connection API for calling methods from REST service: https://confluence.jetbrains.com/display/TCD10/REST+API
  */
 public interface ITeamcityConn {
+    /**
+     * @return Normalized Host address, ends with '/'.
+     */
+    public String host();
+
     public List<BuildRef> getBuildRefs(String fullUrl, AtomicReference<String> nextPage);
 
     /**
      * Trigger build.
-     *  @param buildTypeId Build identifier.
+     *
+     * @param buildTypeId Build identifier.
      * @param branchName Branch name.
      * @param cleanRebuild Rebuild all dependencies.
      * @param queueAtTop Put at the top of the build queue.
diff --git a/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js b/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
index c8e24e4..321e5d3 100644
--- a/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
+++ b/ignite-tc-helper-web/src/main/webapp/js/prs-1.0.js
@@ -93,7 +93,7 @@ function showContributionsTable(result, srvId, suiteId) {
                 "render": function (data, type, row, meta) {
                     let prId = data;
                     if (type === 'display' && isDefinedAndFilled(data)) {
-                        data = "<a id='link_" + prId + "' href='" +
+                        data = "<a id='showReportlink_" + prId + "' href='" +
                             prShowHref(srvId, suiteId, data) +
                             "'>" +
                             "<button id='show_" + prId + "'>Open " + data + "head</button></a>";
@@ -151,8 +151,6 @@ function formatContributionDetails(row, srvId, suiteId) {
     if(!isDefinedAndFilled(row))
         return;
 
-    console.log("format " + row + ": " + srvId);
-
     let prId = row.prNumber;
     var res = "";
     res += "<div class='formgroup'>";
@@ -178,10 +176,10 @@ function formatContributionDetails(row, srvId, suiteId) {
 
     //action for stage
     res += "        <tr>\n" +
-        "            <td>Edit PR: " + "<a href='" + row.prHtmlUrl + "'>#" + row.prNumber + "</a>" + "</td>\n" +
-        "               <td id='triggerBuildFor" + prId + "'>Loading builds...</td>\n" +
-        "               <td id='showResultFor" + prId + "'>Loading builds...</td>\n" +
-        "               <td id='commentJiraFor" + prId + "'></td>\n" +
+        "            <td></td>\n" +
+        "            <td id='triggerBuildFor" + prId + "'>Loading builds...</td>\n" +
+        "            <td id='showResultFor" + prId + "'>Loading builds...</td>\n" +
+        "            <td id='commentJiraFor" + prId + "'></td>\n" +
         "        </tr>";
 
     //action row 2
@@ -190,6 +188,14 @@ function formatContributionDetails(row, srvId, suiteId) {
         "            <td id='triggerAndObserveBuildFor" + prId + "' colspan='3' align='center'>d</td>\n" +
         "           </tr>";
 
+    //References
+    res += "        <tr>\n" +
+        "            <td>Edit PR: " + "<a href='" + row.prHtmlUrl + "'>#" + row.prNumber + "</a>" + "</td>\n" +
+        "            <td id='viewQueuedBuildsFor" + prId + "'></td>\n" +
+        "            <td></td>\n" +
+        "            <td></td>\n" +
+        "        </tr>";
+
     res += "    </table>";
 
     res += "</div>";
@@ -248,8 +254,16 @@ function showContributionStatus(status, prId, row, srvId, suiteId) {
         "\"" + srvId + "\", " +
         "\"" + suiteId + "\", " +
         ");";
+
+    var linksToRunningBuilds = "";
+    for (let i = 0; i < status.webLinksQueuedRunAlls.length; i++) {
+        const l = status.webLinksQueuedRunAlls[i];
+        linksToRunningBuilds += "<a href=" + l + ">View queued at TC</a> "
+    }
+    $('#viewQueuedBuildsFor' + prId).html(linksToRunningBuilds);
+
     if (buildIsCompleted) {
-        tdForPr.html("<a id='link_" + prId + "' href='" + prShowHref(srvId, suiteId, finishedBranch) + "'>" +
+        tdForPr.html("<a id='showReportlink_" + prId + "' href='" + prShowHref(srvId, suiteId, finishedBranch) + "'>" +
             "<button id='show_" + prId + "'>Show " + finishedBranch + " report</button></a>");
 
         if (hasJiraIssue) {