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);