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/01/28 19:09:09 UTC

[ignite-teamcity-bot] branch ignite-11105-alias updated: IGNITE-11105 Support Teamcity servers aliases: Save title implemented

This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch ignite-11105-alias
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git


The following commit(s) were added to refs/heads/ignite-11105-alias by this push:
     new 11423a3  IGNITE-11105 Support Teamcity servers aliases: Save title implemented
11423a3 is described below

commit 11423a3c24197b32c2516c67d29c7f5fd8c17afa
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Mon Jan 28 22:09:05 2019 +0300

    IGNITE-11105 Support Teamcity servers aliases: Save title implemented
---
 .../ignite/ci/jira/ignited/JiraTicketSync.java     |  12 +-
 .../ignite/ci/jira/ignited/TicketCompacted.java    |  15 +-
 .../ci/tcbot/common/StringFieldCompacted.java      | 159 +++++++++++++++++++++
 .../tcbot/visa/TcBotTriggerAndSignOffService.java  |   2 +-
 .../teamcity/ignited/fatbuild/TestCompacted.java   |  29 +---
 5 files changed, 182 insertions(+), 35 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java
index 331d2e5..d2cb246 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java
@@ -20,16 +20,16 @@ package org.apache.ignite.ci.jira.ignited;
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import javax.inject.Inject;
 import org.apache.ignite.ci.di.MonitoredTask;
 import org.apache.ignite.ci.di.scheduler.IScheduler;
+import org.apache.ignite.ci.jira.Tickets;
+import org.apache.ignite.ci.jira.pure.Fields;
 import org.apache.ignite.ci.jira.pure.IJiraIntegration;
 import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider;
 import org.apache.ignite.ci.jira.pure.Ticket;
-import org.apache.ignite.ci.jira.Tickets;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
 import org.apache.ignite.internal.util.typedef.F;
 import org.jetbrains.annotations.NotNull;
@@ -90,14 +90,14 @@ public class JiraTicketSync {
         int srvIdMaskHigh = ITeamcityIgnited.serverIdToInt(srvId);
         IJiraIntegration jira = jiraIntegrationProvider.server(srvId);
 
-        List<String> fields = Arrays.stream(Ticket.class.getDeclaredFields())
-            .map(field -> field.getName())
-            .collect(Collectors.toList());
+        String reqFields = Arrays.stream(Fields.class.getDeclaredFields())
+            .map(Field::getName)
+            .collect(Collectors.joining(","));
 
         String projectName = jira.projectName();
         String baseUrl = "search?jql=" + escape("project=" + projectName + " order by updated DESC")
             + "&" +
-            "fields=status" +
+            "fields=" + reqFields +
             "&maxResults=100";
 
         String url = baseUrl;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java
index 28ae6a7..8ccfe4d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java
@@ -21,7 +21,9 @@ import com.google.common.base.Objects;
 import org.apache.ignite.ci.jira.pure.Fields;
 import org.apache.ignite.ci.jira.pure.Status;
 import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.ci.tcbot.common.StringFieldCompacted;
 import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
+import org.jetbrains.annotations.Nullable;
 
 /**
  *
@@ -36,7 +38,8 @@ public class TicketCompacted {
     /** Id of string: Fields/status/name, value compacted. */
     public int status;
 
-
+    /** Summary, nullable because of older entries. */
+    @Nullable private StringFieldCompacted summary = new StringFieldCompacted();
 
     /**
      * @param ticket Jira ticket.
@@ -47,6 +50,7 @@ public class TicketCompacted {
         id = ticket.id;
         igniteId = Integer.valueOf(ticket.key.substring(ticketTemplate.length()));
         status = comp.getStringId(ticket.fields.status.name);
+        summary.setValue(ticket.fields.summary);
     }
 
     /**
@@ -60,6 +64,7 @@ public class TicketCompacted {
         ticket.key = ticketPrefix + igniteId;
         ticket.fields = new Fields();
         ticket.fields.status = new Status(comp.getStringFromId(status));
+        ticket.fields.summary = summary != null ? summary.getValue() : null;
 
         return ticket;
     }
@@ -68,19 +73,17 @@ public class TicketCompacted {
     @Override public boolean equals(Object o) {
         if (this == o)
             return true;
-
         if (o == null || getClass() != o.getClass())
             return false;
-
         TicketCompacted compacted = (TicketCompacted)o;
-
         return id == compacted.id &&
             igniteId == compacted.igniteId &&
-            status == compacted.status;
+            status == compacted.status &&
+            Objects.equal(summary, compacted.summary);
     }
 
     /** {@inheritDoc} */
     @Override public int hashCode() {
-        return Objects.hashCode(id, igniteId, status);
+        return Objects.hashCode(id, igniteId, status, summary);
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/common/StringFieldCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/common/StringFieldCompacted.java
new file mode 100644
index 0000000..76144b4
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/common/StringFieldCompacted.java
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ci.tcbot.common;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Strings;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xerial.snappy.Snappy;
+
+public class StringFieldCompacted {
+    private static final Logger logger = LoggerFactory.getLogger(StringFieldCompacted.class);
+    public static final int FLAG_UNCOMPRESSED = 0;
+    public static final int FLAG_SNAPPY = 1;
+    public static final int FLAG_GZIP = 2;
+    byte flag;
+    byte data[];
+    /** Logger. */
+
+    public String getValue() {
+        if (data == null)
+            return "";
+
+        if (flag == FLAG_SNAPPY) {
+            try {
+                return new String(Snappy.uncompress(data), StandardCharsets.UTF_8);
+            }
+            catch (IOException e) {
+                logger.error("Snappy.uncompress failed: " + e.getMessage(), e);
+                return null;
+            }
+        }
+        else if (flag == FLAG_UNCOMPRESSED)
+            return new String(data, StandardCharsets.UTF_8);
+        else if (flag == FLAG_GZIP) {
+            try {
+                return unzipToString(data);
+            }
+            catch (Exception e) {
+                logger.error("GZip.uncompress failed: " + e.getMessage(), e);
+                return null;
+            }
+        }
+        else
+            return null;
+    }
+
+    @NotNull public static String unzipToString(byte[] data) throws IOException {
+        final ByteArrayInputStream in = new ByteArrayInputStream(data);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        try (final GZIPInputStream gzi = new GZIPInputStream(in)) {
+            byte[] outbuf = new byte[data.length];
+            int len;
+            while ((len = gzi.read(outbuf, 0, outbuf.length)) != -1)
+                bos.write(outbuf, 0, len);
+        }
+
+        return new String(bos.toByteArray(), StandardCharsets.UTF_8);
+    }
+
+    public void setValue(String str) {
+        if (Strings.isNullOrEmpty(str)) {
+            this.data = null;
+            return;
+        }
+
+        byte[] uncompressed;
+        byte[] snappy = null;
+        byte[] gzip = null;
+        try {
+            uncompressed = str.getBytes(StandardCharsets.UTF_8);
+        }
+        catch (Exception e) {
+            logger.error("Set details failed: " + e.getMessage(), e);
+            return;
+        }
+
+        try {
+            snappy = Snappy.compress(uncompressed);
+        }
+        catch (Exception e) {
+            logger.error("Snappy.compress failed: " + e.getMessage(), e);
+        }
+
+        try {
+            gzip = zipBytes(uncompressed);
+        }
+        catch (Exception e) {
+            logger.error("Snappy.compress failed: " + e.getMessage(), e);
+        }
+
+        final int snappyLen = snappy != null ? snappy.length : -1;
+        final int gzipLen = gzip != null ? gzip.length : -1;
+
+        flag = FLAG_UNCOMPRESSED;
+        //uncompressed
+        data = uncompressed;
+
+        if (snappyLen > 0 && snappyLen < data.length) {
+            flag = FLAG_SNAPPY;
+            data = snappy;
+        }
+
+        if (gzipLen > 0 && gzipLen < data.length) {
+            flag = FLAG_GZIP;
+            data = gzip;
+        }
+
+        logger.info("U " + uncompressed.length + " S " + snappyLen + " Z " + gzipLen + ": F (" +
+            flag + ")");
+    }
+
+    public static byte[] zipBytes(byte[] uncompressed ) throws IOException {
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+        try (final GZIPOutputStream gzipOutputStream = new GZIPOutputStream(out)) {
+            gzipOutputStream.write(uncompressed);
+        }
+
+        return out.toByteArray();
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object o) {
+        if (this == o)
+            return true;
+        if (o == null || getClass() != o.getClass())
+            return false;
+        StringFieldCompacted compacted = (StringFieldCompacted)o;
+        return flag == compacted.flag &&
+            Objects.equal(data, compacted.data);
+    }
+
+    /** {@inheritDoc} */
+    @Override public int hashCode() {
+        return Objects.hashCode(flag, data);
+    }
+}
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 776fc9d..c5d192e 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
@@ -525,7 +525,7 @@ public class TcBotTriggerAndSignOffService {
             contribution.tcBranchName = branch;
 
             contribution.prNumber = -ticketId;
-            contribution.prTitle = ""; //todo ticket title
+            contribution.prTitle = ticket.fields.summary;
             contribution.prHtmlUrl = "";
             contribution.prTimeUpdate = ""; //todo ticket updateTime
 
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/TestCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/TestCompacted.java
index b5a8e36..cdd99c7 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/TestCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/TestCompacted.java
@@ -20,14 +20,11 @@ package org.apache.ignite.ci.teamcity.ignited.fatbuild;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.base.Strings;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.BitSet;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
 import org.apache.ignite.ci.analysis.RunStat;
+import org.apache.ignite.ci.tcbot.common.StringFieldCompacted;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrence;
 import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrenceFull;
@@ -201,17 +198,9 @@ public class TestCompacted {
             return new String(details, StandardCharsets.UTF_8);
         else if (!flag1 && flag2) {
             try {
-                final ByteArrayInputStream in = new ByteArrayInputStream(details);
-                ByteArrayOutputStream bos = new ByteArrayOutputStream();
-                try (final GZIPInputStream gzi = new GZIPInputStream(in)) {
-                    byte[] outbuf = new byte[details.length];
-                    int len;
-                    while ((len = gzi.read(outbuf, 0, outbuf.length)) != -1)
-                        bos.write(outbuf, 0, len);
-                }
-
-                return new String(bos.toByteArray(), StandardCharsets.UTF_8);
-            } catch (Exception e) {
+                return StringFieldCompacted.unzipToString(details);
+            }
+            catch (Exception e) {
                 logger.error("GZip.uncompress failed: " + e.getMessage(), e);
                 return null;
             }
@@ -243,18 +232,14 @@ public class TestCompacted {
         }
 
         try {
-            final ByteArrayOutputStream out = new ByteArrayOutputStream();
-            try(final GZIPOutputStream gzipOutputStream = new GZIPOutputStream(out)) {
-                gzipOutputStream.write(uncompressed);
-            }
-            gzip = out.toByteArray();
+            gzip = StringFieldCompacted.zipBytes(uncompressed);
         }
         catch (Exception e) {
             logger.error("Snappy.compress failed: " + e.getMessage(), e);
         }
 
-        final int snappyLen = snappy!=null ? snappy.length : -1;
-        final int gzipLen = gzip!=null ? gzip.length : -1;
+        final int snappyLen = snappy != null ? snappy.length : -1;
+        final int gzipLen = gzip != null ? gzip.length : -1;
 
         flags.set(COMPRESS_TYPE_FLAG1, true);
         flags.set(COMPRESS_TYPE_FLAG2, false);