This is an automated email from the ASF dual-hosted git repository. dpavlov pushed a commit to branch ignite-10930 in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
The following commit(s) were added to refs/heads/ignite-10930 by this push: new 8dbba4d IGNITE-10930: PR-less contributions: loaded JIRA tickets from the DB 8dbba4d is described below commit 8dbba4d7d7b8bfe983a0ac2856aa6028d1a5eb6c Author: Dmitriy Pavlov <dpav...@apache.org> AuthorDate: Mon Jan 14 20:14:36 2019 +0300 IGNITE-10930: PR-less contributions: loaded JIRA tickets from the DB --- .../main/java/org/apache/ignite/ci/TcHelper.java | 23 +------ .../org/apache/ignite/ci/di/IgniteTcBotModule.java | 13 ++-- .../ignite/ci/jira/ignited/IJiraIgnited.java | 26 +++++++ .../apache/ignite/ci/jira/ignited/JiraIgnited.java | 60 ++++++++++++++++ .../ignite/ci/jira/ignited/JiraIgnitedModule.java | 2 + .../ignite/ci/jira/ignited/JiraTicketSync.java | 32 ++++----- .../ignite/ci/jira/pure/IJiraIntegration.java | 38 ++++++---- .../java/org/apache/ignite/ci/jira/pure/Jira.java | 20 ++---- .../tcbot/visa/TcBotTriggerAndSignOffService.java | 80 ++++++++++++++++------ .../ci/teamcity/ignited/TeamcityIgnitedImpl.java | 37 ---------- .../java/org/apache/ignite/ci/web/model/Visa.java | 6 +- 11 files changed, 205 insertions(+), 132 deletions(-) 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 459a669..a1e275d 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 @@ -17,36 +17,15 @@ package org.apache.ignite.ci; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; -import java.util.List; import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; import javax.inject.Inject; -import org.apache.ignite.ci.jira.Tickets; -import org.apache.ignite.ci.tcbot.issue.IssueDetector; import org.apache.ignite.ci.issue.IssuesStorage; -import org.apache.ignite.ci.jira.pure.IJiraIntegration; -import org.apache.ignite.ci.tcbot.chain.PrChainsProcessor; -import org.apache.ignite.ci.tcmodel.result.Build; -import org.apache.ignite.ci.teamcity.ignited.IStringCompactor; -import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited; -import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider; -import org.apache.ignite.ci.teamcity.ignited.buildtype.BuildTypeRefCompacted; -import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted; +import org.apache.ignite.ci.tcbot.issue.IssueDetector; import org.apache.ignite.ci.teamcity.restcached.ITcServerProvider; import org.apache.ignite.ci.user.ICredentialsProv; import org.apache.ignite.ci.user.UserAndSessionsStorage; -import org.apache.ignite.ci.web.model.JiraCommentResponse; -import org.apache.ignite.ci.web.model.Visa; -import org.apache.ignite.ci.web.model.current.SuiteCurrentStatus; -import org.apache.ignite.ci.web.model.current.TestFailure; -import org.apache.ignite.ci.web.model.hist.FailureSummary; import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static org.apache.ignite.ci.util.XmlUtil.xmlEscapeText; /** * TC Bot implementation. To be migrated to smaller injected classes diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java index e58d398..e45db99 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java @@ -21,6 +21,10 @@ import com.google.inject.AbstractModule; import com.google.inject.Injector; import com.google.inject.internal.SingletonScope; import com.google.inject.matcher.Matchers; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import javax.inject.Provider; import org.apache.ignite.Ignite; import org.apache.ignite.ci.ITcHelper; import org.apache.ignite.ci.TcHelper; @@ -28,7 +32,7 @@ import org.apache.ignite.ci.db.Ignite1Init; import org.apache.ignite.ci.di.cache.GuavaCachedModule; import org.apache.ignite.ci.di.scheduler.SchedulerModule; import org.apache.ignite.ci.github.ignited.GitHubIgnitedModule; -import org.apache.ignite.ci.jira.pure.JiraIntegrationModule; +import org.apache.ignite.ci.jira.ignited.JiraIgnitedModule; import org.apache.ignite.ci.observer.BuildObserver; import org.apache.ignite.ci.observer.ObserverTask; import org.apache.ignite.ci.tcbot.TcBotBusinessServicesModule; @@ -40,11 +44,6 @@ import org.apache.ignite.ci.web.TcUpdatePool; import org.apache.ignite.ci.web.model.hist.VisasHistoryStorage; import org.apache.ignite.ci.web.rest.exception.ServiceStartingException; -import javax.inject.Provider; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - /** * */ @@ -81,7 +80,7 @@ public class IgniteTcBotModule extends AbstractModule { bind(BackgroundUpdater.class).in(new SingletonScope()); install(new TeamcityIgnitedModule()); - install(new JiraIntegrationModule()); + install(new JiraIgnitedModule()); install(new GitHubIgnitedModule()); install(new SchedulerModule()); install(new TcBotBusinessServicesModule()); diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java index 50933aa..17b80a8 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java @@ -16,8 +16,34 @@ */ package org.apache.ignite.ci.jira.ignited; +import java.util.Set; +import org.apache.ignite.ci.jira.Ticket; +import org.jetbrains.annotations.NotNull; + /** * */ public interface IJiraIgnited { + @NotNull public String ticketPrefix(); + + @NotNull public String projectName(); + + + /** + * @return Jira tickets. + */ + public Set<Ticket> getTickets(); + + /** + * @param ticketFullName Ticket full name (e.g IGNITE-8331) + * @return URL which is used as link to Jira comment with specified id. + */ + public String generateCommentUrl(String ticketFullName, int commentId); + + /** + * @param id Ticket full ID (e.g IGNITE-8331) + * @return URL which is used as link to Jira ticket with specified name. + */ + String generateTicketUrl(String id); + } diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java index 47f4e43..a1bb0b1 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java @@ -16,7 +16,14 @@ */ package org.apache.ignite.ci.jira.ignited; +import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Set; +import javax.inject.Inject; +import org.apache.ignite.ci.jira.Ticket; import org.apache.ignite.ci.jira.pure.IJiraIntegration; +import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited; +import org.jetbrains.annotations.NotNull; /** * @@ -25,7 +32,60 @@ class JiraIgnited implements IJiraIgnited { /** Pure HTTP Jira connection. */ private IJiraIntegration jira; + /** Jira ticket DAO. */ + @Inject private JiraTicketDao jiraTicketDao; + + /** Jira ticket Sync. */ + @Inject private JiraTicketSync jiraTicketSync; + + /** Server id. */ + private String srvId; + + /** Server id mask high. */ + private int srvIdMaskHigh; + public void init(IJiraIntegration jira) { this.jira = jira; + + srvId = jira.getServiceId(); + + srvIdMaskHigh = ITeamcityIgnited.serverIdToInt(srvId); + + jiraTicketDao.init(); + } + + /** {@inheritDoc} */ + @Override public String ticketPrefix() { + return jira.ticketPrefix(); + } + + /** {@inheritDoc} */ + @NotNull @Override public String projectName() { + return jira.projectName(); + } + + @Override public Set<Ticket> getTickets() { + jiraTicketSync.ensureActualizeJiraTickets(taskName("actualizeJiraTickets"), srvId); + + return jiraTicketDao.getTickets(srvIdMaskHigh); + } + + /** + * @param taskName Task name. + * @return Task name concatenated with server name. + */ + @NotNull + private String taskName(String taskName) { + return ITeamcityIgnited.class.getSimpleName() + "." + taskName + "." + srvId; + } + + /** {@inheritDoc} */ + @Override public String generateCommentUrl(String ticketFullName, int commentId) { + return jira.generateCommentUrl(ticketFullName, commentId); + } + + /** {@inheritDoc} */ + @Override public String generateTicketUrl(String id) { + return jira.generateTicketUrl(id); } } diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedModule.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedModule.java index ea354aa..ef237d4 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedModule.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedModule.java @@ -25,6 +25,8 @@ import org.apache.ignite.ci.jira.pure.JiraIntegrationModule; public class JiraIgnitedModule extends AbstractModule { /** {@inheritDoc} */ @Override protected void configure() { + bind(IJiraIgnitedProvider.class).to(JiraIgnitedProvider.class); + install(new JiraIntegrationModule()); } } 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 ca78d63..b69db1d 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 @@ -26,8 +26,7 @@ import org.apache.ignite.ci.jira.pure.IJiraIntegration; import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider; import org.apache.ignite.ci.jira.Ticket; import org.apache.ignite.ci.jira.Tickets; -import org.apache.ignite.ci.teamcity.pure.ITeamcityConn; -import org.apache.ignite.ci.user.ICredentialsProv; +import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited; import org.apache.ignite.internal.util.typedef.F; /** @@ -45,25 +44,24 @@ public class JiraTicketSync { /** * @param taskName Task name. - * @param srvIdMaskHigh Server id mask high. - * @param creds Credentials. - * @param conn Connection. + * @param srvId Server ID */ - public void ensureActualizeJiraTickets(String taskName, int srvIdMaskHigh, ICredentialsProv creds, ITeamcityConn conn) { - scheduler.sheduleNamed(taskName, () -> actualizeJiraTickets(srvIdMaskHigh, conn, creds), 15, TimeUnit.MINUTES); + public void ensureActualizeJiraTickets(String taskName, String srvId) { + scheduler.sheduleNamed(taskName, () -> actualizeJiraTickets(srvId), 15, TimeUnit.MINUTES); } /** - * @param srvIdMaskHigh Server id mask high. - * @param conn Connection. - * @param creds Credentials. + * @param srvId Server internal identification. */ @MonitoredTask(name = "Actualize Jira", nameExtArgsIndexes = {0}) - protected String actualizeJiraTickets(int srvIdMaskHigh, ITeamcityConn conn, ICredentialsProv creds) { - String srvId = conn.serverId(); + protected String actualizeJiraTickets(String srvId) { + int srvIdMaskHigh = ITeamcityIgnited.serverIdToInt(srvId); IJiraIntegration jira = jiraIntegrationProvider.server(srvId); - String url = "search?jql=project%20=%20IGNITE%20order%20by%20updated%20DESC&fields=status&maxResults=100"; - Tickets tickets = jira.getTickets(srvId, creds, url); + + String projectName = jira.projectName(); + String baseUrl = "search?jql=project=" + projectName + "%20order%20by%20updated%20DESC&fields=status&maxResults=100"; + String url = baseUrl; + Tickets tickets = jira.getTicketsPage(srvId, url); Collection<Ticket> page = tickets.issuesNotNull(); if (F.isEmpty(page)) @@ -74,16 +72,16 @@ public class JiraTicketSync { int ticketsSaved = page.size(); while (tickets.nextStart() > 0) { - url = "search?jql=project%20=%20IGNITE%20order%20by%20updated%20DESC&fields=status&maxResults=100&startAt=" + - tickets.nextStart(); + url = baseUrl + "&startAt=" + tickets.nextStart(); - tickets = jira.getTickets(srvId, creds, url); + tickets = jira.getTicketsPage(srvId, url); page = tickets.issuesNotNull(); if (F.isEmpty(page)) break; + //todo find not updated chunk and exit jiraDao.saveChunk(srvIdMaskHigh, page, jira.ticketPrefix()); ticketsSaved += page.size(); diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java index b068366..95ab3ca 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java @@ -19,16 +19,33 @@ package org.apache.ignite.ci.jira.pure; import java.io.IOException; import org.apache.ignite.ci.jira.Tickets; -import org.apache.ignite.ci.web.model.Visa; -import org.apache.ignite.ci.user.ICredentialsProv; import org.jetbrains.annotations.NotNull; /** * Reperesents methods to provide interaction with Jira servers. */ public interface IJiraIntegration { - /** Message to show user when JIRA ticket was successfully commented by the Bot. */ - public static String JIRA_COMMENTED = "JIRA commented."; + + /** @return JIRA ticket prefix. */ + @NotNull public String ticketPrefix(); + + /** + * + */ + @NotNull public default String projectName() { + return ticketPrefix().replaceAll("-", ""); + } + + /** + * @return Internal identified service ID. + */ + public void init(String srvId); + + /** + * @return Internal identified service ID. + */ + public String getServiceId(); + /** * @param ticket JIRA ticket full name. E.g 'IGNITE-5555'. @@ -37,27 +54,20 @@ public interface IJiraIntegration { * @throws IOException If failed to comment JIRA ticket. * @throws IllegalStateException If can't find URL to the JIRA. */ - public String sendJiraComment(String ticket, String comment) throws IOException; + public String postJiraComment(String ticket, String comment) throws IOException; /** * Produce wrapper for collection of Jira tickets for given server. * * @param srvId Server id. - * @param prov Prov. - * @param url Ticket id. + * @param url Tickets loading URL and parameters. * @return Jira tickets. */ - public Tickets getTickets(@Deprecated String srvId, ICredentialsProv prov, String url); + public Tickets getTicketsPage(@Deprecated String srvId, String url); /** */ public String jiraUrl(); - /** @return JIRA ticket prefix. */ - @NotNull public String ticketPrefix(); - - /** */ - public void init(String srvId); - /** * @param ticketFullName Ticket full name (e.g IGNITE-8331) * @return URL which is used as link to Jira ticket with specified name. diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java index d0866dd..e5a006e 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java @@ -23,16 +23,10 @@ import com.google.gson.Gson; import java.io.File; import java.io.IOException; import java.util.Properties; -import javax.inject.Inject; import org.apache.ignite.ci.HelperConfig; -import org.apache.ignite.ci.IAnalyticsEnabledTeamcity; -import org.apache.ignite.ci.ITcHelper; import org.apache.ignite.ci.di.AutoProfiling; import org.apache.ignite.ci.jira.Tickets; -import org.apache.ignite.ci.tcbot.visa.TcBotTriggerAndSignOffService; -import org.apache.ignite.ci.user.ICredentialsProv; import org.apache.ignite.ci.util.HttpUtil; -import org.apache.ignite.ci.web.model.Visa; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,9 +51,11 @@ class Jira implements IJiraIntegration { /** URL for JIRA integration. */ private String jiraApiUrl; + private String srvId; /** {@inheritDoc} */ @Override public void init(String srvId) { + this.srvId = srvId; final File workDir = HelperConfig.resolveWorkDir(); final String cfgName = HelperConfig.prepareConfigName(srvId); @@ -90,12 +86,7 @@ class Jira implements IJiraIntegration { } /** {@inheritDoc} */ - @Override public Tickets getTickets(String srvId, ICredentialsProv prov, String url) { - return getJiraTickets(srvId, prov, url); - } - - /** {@inheritDoc} */ - public Tickets getJiraTickets(String srvId, ICredentialsProv prov, String url) { + @Override public Tickets getTicketsPage(String srvId, String url) { try { return new Gson().fromJson(sendGetToJira(url), Tickets.class); } @@ -136,7 +127,7 @@ class Jira implements IJiraIntegration { /** {@inheritDoc} */ @AutoProfiling - @Override public String sendJiraComment(String ticket, String comment) throws IOException { + @Override public String postJiraComment(String ticket, String comment) throws IOException { if (isNullOrEmpty(jiraApiUrl)) throw new IllegalStateException("JIRA API URL is not configured for this server."); @@ -156,4 +147,7 @@ class Jira implements IJiraIntegration { return HttpUtil.sendGetToJira(jiraBasicAuthTok, jiraApiUrl + url); } + public String getServiceId() { + return srvId; + } } 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 a36944b..ea4461f 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,12 +23,14 @@ import com.google.inject.Provider; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; import java.util.Set; +import java.util.SortedSet; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.annotation.Nonnull; @@ -37,13 +39,15 @@ import javax.ws.rs.QueryParam; import org.apache.ignite.ci.HelperConfig; import org.apache.ignite.ci.ITcHelper; import org.apache.ignite.ci.ITeamcity; -import org.apache.ignite.ci.TcHelper; import org.apache.ignite.ci.github.GitHubBranch; import org.apache.ignite.ci.github.GitHubUser; import org.apache.ignite.ci.github.PullRequest; import org.apache.ignite.ci.github.ignited.IGitHubConnIgnited; import org.apache.ignite.ci.github.ignited.IGitHubConnIgnitedProvider; +import org.apache.ignite.ci.jira.Ticket; import org.apache.ignite.ci.jira.Tickets; +import org.apache.ignite.ci.jira.ignited.IJiraIgnited; +import org.apache.ignite.ci.jira.ignited.IJiraIgnitedProvider; import org.apache.ignite.ci.jira.pure.IJiraIntegration; import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider; import org.apache.ignite.ci.observer.BuildObserver; @@ -82,7 +86,9 @@ import static org.apache.ignite.ci.util.XmlUtil.xmlEscapeText; import static org.apache.ignite.ci.web.rest.parms.FullQueryParams.DEFAULT_TRACKED_BRANCH_NAME; /** - * Provides method for TC Bot Visa obtaining + * Provides method for TC Bot Visa obtaining. + * Contains features for adding comment to the ticket based on latest state. + * */ public class TcBotTriggerAndSignOffService { /** Logger. */ @@ -104,8 +110,11 @@ public class TcBotTriggerAndSignOffService { /** TC ignited provider. */ @Inject ITeamcityIgnitedProvider tcIgnitedProv; - /** */ - @Inject IJiraIntegrationProvider jiraIntegrationProvider; + /** Direct connection to JIRA provider */ + @Inject IJiraIgnitedProvider jiraIgnProv; + + /** Direct connection to JIRA provider */ + @Inject IJiraIntegrationProvider jiraPureProvider; /** */ @Inject private VisasHistoryStorage visasHistStorage; @@ -135,7 +144,7 @@ public class TcBotTriggerAndSignOffService { ITeamcityIgnited ignited = tcIgnitedProv.server(srvId, prov); - IJiraIntegration jiraIntegration = jiraIntegrationProvider.server(srvId); + IJiraIntegration jiraIntegration = jiraPureProvider.server(srvId); for (VisaRequest visaRequest : visasHistStorage.getVisas()) { VisaStatus visaStatus = new VisaStatus(); @@ -191,12 +200,46 @@ public class TcBotTriggerAndSignOffService { public Set<MuteInfo> getMutes(String srvId, String projectId, ICredentialsProv creds) { ITeamcityIgnited ignited = tcIgnitedProv.server(srvId, creds); - Set<MuteInfo> infos = ignited.getMutes(projectId, creds); + Set<MuteInfo> mutes = ignited.getMutes(projectId, creds); + + IJiraIgnited jiraIgn = jiraIgnProv.server(srvId); + + insertTicketStatus(mutes, jiraIgn.getTickets()); - for (MuteInfo info : infos) + for (MuteInfo info : mutes) info.assignment.muteDate = THREAD_FORMATTER.get().format(new Date(info.assignment.timestamp())); - return infos; + return mutes; + } + + /** + * Insert ticket status for all mutes, if they have ticket in description. + * + * @param mutes Mutes. + * @param tickets Tickets. + */ + private void insertTicketStatus(Set<MuteInfo> mutes, Collection<Ticket> tickets) { + for (MuteInfo mute : mutes) { + if (F.isEmpty(mute.assignment.text)) + continue; + + String browseUrl = "https://issues.apache.org/jira/browse/"; + int pos = mute.assignment.text.indexOf(browseUrl); + + if (pos == -1) + continue; + + for (Ticket ticket : tickets) { + String muteTicket = mute.assignment.text.substring(pos + + browseUrl.length()); + + if (ticket.key.equals(muteTicket)) { + mute.ticketStatus = ticket.status(); + + break; + } + } + } } /** @@ -261,7 +304,7 @@ public class TcBotTriggerAndSignOffService { String parentSuiteId, Build... builds ) { - IJiraIntegration jiraIntegration = jiraIntegrationProvider.server(srvId); + IJiraIntegration jiraIntegration = jiraPureProvider.server(srvId); String prefix = jiraIntegration.ticketPrefix(); @@ -315,7 +358,7 @@ public class TcBotTriggerAndSignOffService { ICredentialsProv prov) { String jiraRes = ""; - IJiraIntegration jiraIntegration = jiraIntegrationProvider.server(srvId); + IJiraIntegration jiraIntegration = jiraPureProvider.server(srvId); String prefix = jiraIntegration.ticketPrefix(); @@ -369,7 +412,7 @@ public class TcBotTriggerAndSignOffService { */ public List<ContributionToCheck> getContributionsToCheck(String srvId, ICredentialsProv credsProv) { - IJiraIntegration jiraIntegration = jiraIntegrationProvider.server(srvId); + IJiraIgnited jiraIntegration = jiraIgnProv.server(srvId); List<PullRequest> requests = gitHubConnIgnitedProvider.server(srvId).getPullRequests(); if (requests == null) @@ -377,12 +420,9 @@ public class TcBotTriggerAndSignOffService { ITeamcityIgnited tcIgn = tcIgnitedProv.server(srvId, credsProv); - String prj = jiraIntegration.ticketPrefix().replaceAll("-", ""); - String url = "search?jql=project=" + - prj + - "%20order%20by%20updated%20DESC&fields=status&maxResults=100"; - Tickets tickets = jiraIntegration.getTickets(srvId, credsProv, url); - System.out.println("srvId="+srvId + " tickets " + tickets.issues); + String prj = jiraIntegration.projectName(); + Set<Ticket> tickets = jiraIntegration.getTickets(); + System.out.println("srvId=" + srvId + " tickets " + tickets); //todo JIRA ignited @@ -621,7 +661,7 @@ public class TcBotTriggerAndSignOffService { ) { ITeamcityIgnited tcIgnited = tcIgnitedProv.server(srvId, prov); - IJiraIntegration jira = jiraIntegrationProvider.server(srvId); + IJiraIntegration jira = jiraPureProvider.server(srvId); List<Integer> builds = tcIgnited.getLastNBuildsFromHistory(buildTypeId, branchForTc, 1); @@ -656,7 +696,7 @@ public class TcBotTriggerAndSignOffService { }) .sum(); - res = objMapper.readValue(jira.sendJiraComment(ticket, comment), JiraCommentResponse.class); + res = objMapper.readValue(jira.postJiraComment(ticket, comment), JiraCommentResponse.class); } catch (Exception e) { String errMsg = "Exception happened during commenting JIRA ticket " + @@ -667,7 +707,7 @@ public class TcBotTriggerAndSignOffService { return new Visa("JIRA wasn't commented - " + errMsg); } - return new Visa(IJiraIntegration.JIRA_COMMENTED, res, blockers); + return new Visa(Visa.JIRA_COMMENTED, res, blockers); } 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 65930eb..f857aae 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 @@ -114,12 +114,6 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited { /** Mute Sync. */ @Inject private MuteSync muteSync; - /** Jira ticket DAO. */ - @Inject private JiraTicketDao jiraTicketDao; - - /** Jira ticket Sync. */ - @Inject private JiraTicketSync jiraTicketSync; - /** Changes DAO. */ @Inject private ChangeDao changesDao; @@ -158,7 +152,6 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited { changesDao.init(); runHistCompactedDao.init(); muteDao.init(); - jiraTicketDao.init(); } /** @@ -344,44 +337,14 @@ public class TeamcityIgnitedImpl implements ITeamcityIgnited { /** {@inheritDoc} */ @Override public Set<MuteInfo> getMutes(String projectId, ICredentialsProv creds) { muteSync.ensureActualizeMutes(taskName("actualizeMutes"), projectId, srvIdMaskHigh, conn); - jiraTicketSync.ensureActualizeJiraTickets(taskName("actualizeJiraTickets"), srvIdMaskHigh, creds, conn); SortedSet<MuteInfo> mutes = muteDao.getMutes(srvIdMaskHigh); - Collection<Ticket> tickets = jiraTicketDao.getTickets(srvIdMaskHigh); - insertTicketStatus(mutes, tickets); return mutes; } - /** - * Insert ticket status for all mutes, if they have ticket in description. - * - * @param mutes Mutes. - * @param tickets Tickets. - */ - private void insertTicketStatus(SortedSet<MuteInfo> mutes, Collection<Ticket> tickets) { - for (MuteInfo mute : mutes) { - if (F.isEmpty(mute.assignment.text)) - continue; - - int pos = mute.assignment.text.indexOf("https://issues.apache.org/jira/browse/"); - - if (pos == -1) - continue; - for (Ticket ticket : tickets) { - String muteTicket = mute.assignment.text.substring(pos + - "https://issues.apache.org/jira/browse/".length()); - - if (ticket.key.equals(muteTicket)) { - mute.ticketStatus = ticket.status(); - - break; - } - } - } - } /** {@inheritDoc} */ @AutoProfiling diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Visa.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Visa.java index 2175d2a..201db9b 100644 --- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Visa.java +++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Visa.java @@ -17,7 +17,6 @@ package org.apache.ignite.ci.web.model; -import org.apache.ignite.ci.jira.pure.IJiraIntegration; import org.jetbrains.annotations.Nullable; /** @@ -29,6 +28,9 @@ public class Visa { /** Determines Visa with no results and info. */ public static final String EMPTY_VISA_STATUS = "emptyVisa"; + /** Message to show user when JIRA ticket was successfully commented by the Bot. */ + public static final String JIRA_COMMENTED = "JIRA commented."; + /** */ public final String status; @@ -71,7 +73,7 @@ public class Visa { /** */ public boolean isSuccess() { - return IJiraIntegration.JIRA_COMMENTED.equals(status) + return JIRA_COMMENTED.equals(status) && jiraCommentRes != null; }