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/06/13 12:01:35 UTC

[ignite-teamcity-bot] branch master updated: TC Bot modules refactoring: JIRA module extracted, PR processor moved to the engine

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 ef7ba95  TC Bot modules refactoring: JIRA module extracted, PR processor moved to the engine
ef7ba95 is described below

commit ef7ba95983cef95891f09bd334ff3556d69a7036
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Thu Jun 13 15:01:24 2019 +0300

    TC Bot modules refactoring: JIRA module extracted, PR processor moved to the engine
---
 .../org/apache/ignite/ci/di/IgniteTcBotModule.java |   4 +-
 .../apache/ignite/ci/runners/ClientTmpHelper.java  |   2 +-
 .../ignite/ci/tcbot/conf/JiraServerConfig.java     |   2 +-
 .../tcbot/visa/TcBotTriggerAndSignOffService.java  |  13 +-
 .../ignite/ci/web/rest/parms/FullQueryParams.java  | 196 ---------------------
 .../ignite/ci/web/rest/pr/GetPrTestFailures.java   |   2 +-
 .../rest/tracked/GetTrackedBranchTestResults.java  |   4 +-
 .../ci/tcbot/chain/MockBasedTcBotModule.java       |   8 +-
 .../ci/tcbot/chain/PrChainsProcessorTest.java      |   2 +
 .../IgnitedTcInMemoryIntegrationTest.java          |   2 +-
 settings.gradle                                    |   2 +
 .../common/conf/IDataSourcesConfigSupplier.java    |   2 +
 tcbot-engine/build.gradle                          |   2 +-
 .../tcbot/engine/pr}/BranchTicketMatcher.java      |  31 ++--
 .../ignite/tcbot/engine/pr}/PrChainsProcessor.java |  30 ++--
 {tcbot-engine => tcbot-jira-ignited}/build.gradle  |   3 +-
 .../ignite/ci/jira/ignited/TicketCompacted.java    |  14 +-
 .../apache/ignite/jiraignited}/IJiraIgnited.java   |  17 +-
 .../ignite/jiraignited}/IJiraIgnitedProvider.java  |   2 +-
 .../apache/ignite/jiraignited}/JiraIgnited.java    |   9 +-
 .../ignite/jiraignited}/JiraIgnitedModule.java     |   4 +-
 .../ignite/jiraignited}/JiraIgnitedProvider.java   |   6 +-
 .../apache/ignite/jiraignited}/JiraTicketDao.java  |   6 +-
 .../apache/ignite/jiraignited}/JiraTicketSync.java |  20 +--
 tcbot-jira/README.md                               |   3 +
 {tcbot-engine => tcbot-jira}/build.gradle          |   7 +-
 .../org/apache/ignite/jiraservice}/Fields.java     |   2 +-
 .../ignite/jiraservice}/IJiraIntegration.java      |   3 +-
 .../jiraservice}/IJiraIntegrationProvider.java     |   2 +-
 .../java/org/apache/ignite/jiraservice}/Jira.java  |   7 +-
 .../ignite/jiraservice}/JiraIntegrationModule.java |   2 +-
 .../jiraservice}/JiraIntegrationProvider.java      |   2 +-
 .../org/apache/ignite/jiraservice}/Status.java     |   2 +-
 .../org/apache/ignite/jiraservice}/Ticket.java     |   6 +-
 .../org/apache/ignite/jiraservice}/Tickets.java    |   4 +-
 .../apache/ignite/jiraservice}/package-info.java   |   2 +-
 .../tcbot/persistence}/scheduler/NamedTask.java    |   2 +-
 .../persistence}/scheduler/SchedulerModule.java    |   3 +-
 .../persistence}/scheduler/TcBotScheduler.java     |   3 +-
 39 files changed, 132 insertions(+), 301 deletions(-)

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 efed362..dcceff1 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
@@ -28,9 +28,9 @@ import javax.inject.Provider;
 import org.apache.ignite.Ignite;
 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.tcbot.persistence.scheduler.SchedulerModule;
 import org.apache.ignite.githubignited.GitHubIgnitedModule;
-import org.apache.ignite.ci.jira.ignited.JiraIgnitedModule;
+import org.apache.ignite.jiraignited.JiraIgnitedModule;
 import org.apache.ignite.ci.observer.BuildObserver;
 import org.apache.ignite.ci.observer.ObserverTask;
 import org.apache.ignite.ci.tcbot.TcBotBusinessServicesModule;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/ClientTmpHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/ClientTmpHelper.java
index b114350..58a20b1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/ClientTmpHelper.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/ClientTmpHelper.java
@@ -23,7 +23,7 @@ import org.apache.ignite.ci.db.TcHelperDb;
 import org.apache.ignite.githubignited.IGitHubConnIgnited;
 import org.apache.ignite.ci.issue.Issue;
 import org.apache.ignite.ci.issue.IssuesStorage;
-import org.apache.ignite.ci.jira.ignited.JiraTicketDao;
+import org.apache.ignite.jiraignited.JiraTicketDao;
 
 /**
  * Utility class for local connection to TC helper DB (server) and any manipulations with data needed.
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/JiraServerConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/JiraServerConfig.java
index 0de7cd5..a18b9ea 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/JiraServerConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/JiraServerConfig.java
@@ -19,7 +19,7 @@ package org.apache.ignite.ci.tcbot.conf;
 import com.google.common.base.Strings;
 import java.util.Properties;
 import org.apache.ignite.ci.HelperConfig;
-import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.jiraservice.Ticket;
 import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
 import org.apache.ignite.tcbot.common.conf.PasswordEncoder;
 import org.jetbrains.annotations.Nullable;
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 e1bdb2c..da034a0 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
@@ -37,19 +37,21 @@ import java.util.stream.Stream;
 import javax.annotation.Nonnull;
 import javax.inject.Inject;
 import javax.ws.rs.QueryParam;
+
+import org.apache.ignite.tcbot.engine.pr.BranchTicketMatcher;
 import org.apache.ignite.tcservice.ITeamcity;
 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.githubignited.IGitHubConnIgnited;
 import org.apache.ignite.githubignited.IGitHubConnIgnitedProvider;
-import org.apache.ignite.ci.jira.ignited.IJiraIgnited;
-import org.apache.ignite.ci.jira.ignited.IJiraIgnitedProvider;
-import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.jiraignited.IJiraIgnited;
+import org.apache.ignite.jiraignited.IJiraIgnitedProvider;
+import org.apache.ignite.jiraservice.Ticket;
 import org.apache.ignite.ci.observer.BuildObserver;
 import org.apache.ignite.ci.observer.BuildsInfo;
 import org.apache.ignite.ci.tcbot.ITcBotBgAuth;
-import org.apache.ignite.ci.tcbot.chain.PrChainsProcessor;
+import org.apache.ignite.tcbot.engine.pr.PrChainsProcessor;
 import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
 import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
 import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
@@ -130,7 +132,8 @@ public class TcBotTriggerAndSignOffService {
     /** Config. */
     @Inject ITcBotConfig cfg;
 
-    @Inject BranchTicketMatcher ticketMatcher;
+    @Inject
+    BranchTicketMatcher ticketMatcher;
 
     /** Jackson serializer. */
     private final ObjectMapper objMapper = new ObjectMapper();
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/parms/FullQueryParams.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/parms/FullQueryParams.java
deleted file mode 100644
index 11d0b56..0000000
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/parms/FullQueryParams.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * 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.web.rest.parms;
-
-import com.google.common.base.MoreObjects;
-import java.util.Objects;
-import javax.annotation.Nonnull;
-import javax.ws.rs.QueryParam;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Contains maximum combination of query parameters
- */
-public class FullQueryParams {
-
-    //see definitions in Index.html javascript
-    public static final String HISTORY = "History";
-    public static final String LATEST = "Latest";
-    public static final String CHAIN = "Chain";
-    public static final int DEFAULT_COUNT = 10;
-
-    /** Tracked branch name (branch naming in terms of bot). */
-    @Nullable @QueryParam("branch") String branch;
-
-    /** Server For not tracked branches. */
-    @Nullable @QueryParam("serverId") String serverId;
-
-    /** Suite ID to check. For not tracked branches. */
-    @Nonnull @QueryParam("suiteId") String suiteId;
-
-    /** TC identified branch. For not tracked branches. */
-    @Nonnull @QueryParam("branchForTc") String branchForTc;
-
-    /** Type of rebuilds loading: */
-    @Nonnull @QueryParam("action") String action;
-
-    /** Count of suites to analyze, for multiple runs results. */
-    @Nullable @QueryParam("count") Integer count;
-
-    /** Enables all logs to be loaded locally without relation to run/failure category. */
-    @Nullable @QueryParam("checkAllLogs") Boolean checkAllLogs;
-    private Integer buildId;
-
-    /** TC identified base branch: null means the same as &lt;default>, master. For not tracked branches. */
-    @Nullable @QueryParam("baseBranchForTc") private String baseBranchForTc;
-
-    /** TC project identifier */
-    @Nullable @QueryParam("projectId") String projectId;
-
-    /** TC test name  */
-    @Nullable @QueryParam("testName") String testName;
-
-    public FullQueryParams() {
-    }
-
-    public FullQueryParams(String serverId, String suiteId, String branchForTc, String action, Integer count,
-        String baseBranchForTc) {
-        this.serverId = serverId;
-        this.suiteId = suiteId;
-        this.branchForTc = branchForTc;
-        this.action = action;
-        this.count = count;
-        this.baseBranchForTc = baseBranchForTc;
-    }
-
-    @Nullable public String getBranch() {
-        return branch;
-    }
-
-    @Nullable public String getServerId() {
-        return serverId;
-    }
-
-    @Nonnull public String getSuiteId() {
-        return suiteId;
-    }
-
-    @Nonnull public String getBranchForTc() {
-        return branchForTc;
-    }
-
-    @Nonnull public String getAction() {
-        return action;
-    }
-
-    @Nullable public Integer getCount() {
-        return count;
-    }
-
-    @Nullable public String getTestName() {
-        return testName;
-    }
-
-    @Nullable public String getProjectId() {
-        return projectId ;
-    }
-
-    @Nullable public Boolean getCheckAllLogs() {
-        return checkAllLogs;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        if (o == null || getClass() != o.getClass())
-            return false;
-
-        FullQueryParams params = (FullQueryParams)o;
-
-        return Objects.equals(branch, params.branch) &&
-            Objects.equals(serverId, params.serverId) &&
-            Objects.equals(suiteId, params.suiteId) &&
-            Objects.equals(branchForTc, params.branchForTc) &&
-            Objects.equals(action, params.action) &&
-            Objects.equals(count, params.count) &&
-            Objects.equals(checkAllLogs, params.checkAllLogs) &&
-            Objects.equals(buildId, params.buildId) &&
-            Objects.equals(baseBranchForTc, params.baseBranchForTc) &&
-            Objects.equals(projectId, params.projectId) &&
-            Objects.equals(testName, params.testName);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        return Objects.hash(branch, serverId, suiteId, branchForTc, action, count, checkAllLogs, buildId,
-            baseBranchForTc, projectId, testName);
-    }
-
-    public void setBranch(@Nullable String branch) {
-        this.branch = branch;
-    }
-
-    public void setCheckAllLogs(@Nullable Boolean checkAllLogs) {
-        this.checkAllLogs = checkAllLogs;
-    }
-
-    @Override public String toString() {
-        return MoreObjects.toStringHelper(this)
-            .add("branch", branch)
-            .add("serverId", serverId)
-            .add("suiteId", suiteId)
-            .add("branchForTc", branchForTc)
-            .add("action", action)
-            .add("count", count)
-            .add("checkAllLogs", checkAllLogs)
-            .add("buildId", buildId)
-            .add("baseBranchForTc", baseBranchForTc)
-            .add("projectId", projectId)
-            .add("testName", testName)
-            .toString();
-    }
-
-    public void setSuiteId(@Nonnull String suiteId) {
-        this.suiteId = suiteId;
-    }
-
-    public void setCount(@Nullable int count) {
-        this.count = count;
-    }
-
-    public void setProjectId(@Nullable String projectId) {
-        this.projectId = projectId;
-    }
-
-    public void setTestName(@Nullable String testName) {
-        this.testName = testName;
-    }
-
-    public void setBuildId(Integer buildId) {
-        this.buildId = buildId;
-    }
-
-    public void setServerId(@Nullable String serverId) {
-        this.serverId = serverId;
-    }
-
-    public Integer getBuildId() {
-        return buildId;
-    }
-}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/pr/GetPrTestFailures.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/pr/GetPrTestFailures.java
index 761a497..644a195 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/pr/GetPrTestFailures.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/pr/GetPrTestFailures.java
@@ -32,7 +32,7 @@ import javax.ws.rs.core.MediaType;
 import org.apache.ignite.ci.github.PullRequest;
 import org.apache.ignite.githubignited.IGitHubConnIgnited;
 import org.apache.ignite.githubignited.IGitHubConnIgnitedProvider;
-import org.apache.ignite.ci.tcbot.chain.PrChainsProcessor;
+import org.apache.ignite.tcbot.engine.pr.PrChainsProcessor;
 import org.apache.ignite.githubservice.IGitHubConnection;
 import org.apache.ignite.tcignited.SyncMode;
 import org.apache.ignite.ci.user.ITcBotUserCreds;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
index 5d8cce1..e0fbc41 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/tracked/GetTrackedBranchTestResults.java
@@ -34,7 +34,6 @@ import org.apache.ignite.ci.user.ITcBotUserCreds;
 import org.apache.ignite.ci.web.CtxListener;
 import org.apache.ignite.tcbot.engine.ui.DsSummaryUi;
 import org.apache.ignite.tcbot.engine.ui.UpdateInfo;
-import org.apache.ignite.ci.web.rest.parms.FullQueryParams;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
 import org.apache.ignite.tcignited.SyncMode;
@@ -48,6 +47,7 @@ import static org.apache.ignite.tcignited.TeamcityIgnitedImpl.DEFAULT_PROJECT_ID
 @Produces(MediaType.APPLICATION_JSON)
 public class GetTrackedBranchTestResults {
     public static final String TRACKED = "tracked";
+    public static final int DEFAULT_COUNT = 10;
 
     /** Servlet Context. */
     @Context
@@ -138,7 +138,7 @@ public class GetTrackedBranchTestResults {
         @QueryParam("checkAllLogs") @Nullable Boolean checkAllLogs,
         SyncMode mode) {
         ITcBotUserCreds creds = ITcBotUserCreds.get(req);
-        int cntLimit = cnt == null ? FullQueryParams.DEFAULT_COUNT : cnt;
+        int cntLimit = cnt == null ? DEFAULT_COUNT : cnt;
         Injector injector = CtxListener.getInjector(ctx);
 
         return injector.getInstance(TrackedBranchChainsProcessor.class)
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/MockBasedTcBotModule.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/MockBasedTcBotModule.java
index c8037cb..554b930 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/MockBasedTcBotModule.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/MockBasedTcBotModule.java
@@ -25,10 +25,10 @@ import org.apache.ignite.ci.HelperConfig;
 import org.apache.ignite.ci.github.PullRequest;
 import org.apache.ignite.githubignited.IGitHubConnIgnited;
 import org.apache.ignite.githubignited.IGitHubConnIgnitedProvider;
-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.jiraignited.IJiraIgnited;
+import org.apache.ignite.jiraignited.IJiraIgnitedProvider;
+import org.apache.ignite.jiraservice.IJiraIntegration;
+import org.apache.ignite.jiraservice.IJiraIntegrationProvider;
 import org.apache.ignite.ci.tcbot.conf.TcBotJsonConfig;
 import org.apache.ignite.githubservice.IGitHubConnection;
 import org.apache.ignite.githubservice.IGitHubConnectionProvider;
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
index 2dec781..f38ce55 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
@@ -27,6 +27,8 @@ import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
+
+import org.apache.ignite.tcbot.engine.pr.PrChainsProcessor;
 import org.apache.ignite.tcservice.ITeamcity;
 import org.apache.ignite.tcservice.model.conf.BuildType;
 import org.apache.ignite.tcservice.model.hist.BuildRef;
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/tcignited/IgnitedTcInMemoryIntegrationTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/tcignited/IgnitedTcInMemoryIntegrationTest.java
index 6afa380..398c8f8 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/tcignited/IgnitedTcInMemoryIntegrationTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/tcignited/IgnitedTcInMemoryIntegrationTest.java
@@ -26,7 +26,7 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.ci.db.TcHelperDb;
 import org.apache.ignite.ci.di.scheduler.DirectExecNoWaitScheduler;
-import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider;
+import org.apache.ignite.jiraservice.IJiraIntegrationProvider;
 import org.apache.ignite.ci.tcbot.chain.PrChainsProcessorTest;
 import org.apache.ignite.ci.tcbot.conf.TcBotJsonConfig;
 import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
diff --git a/settings.gradle b/settings.gradle
index 67a2d87..423525f 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -7,5 +7,7 @@ include 'tcbot-teamcity'
 include 'tcbot-teamcity-ignited'
 include 'tcbot-github'
 include 'tcbot-github-ignited'
+include 'tcbot-jira'
+include 'tcbot-jira-ignited'
 include 'tcbot-engine'
 
diff --git a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IDataSourcesConfigSupplier.java b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IDataSourcesConfigSupplier.java
index 1b399dd..68873ad 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IDataSourcesConfigSupplier.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/conf/IDataSourcesConfigSupplier.java
@@ -24,4 +24,6 @@ public interface IDataSourcesConfigSupplier {
     public ITcServerConfig getTeamcityConfig(String srvCode);
 
     public IGitHubConfig getGitConfig(String srvCode);
+
+    public IJiraServerConfig getJiraConfig(String srvCode);
 }
diff --git a/tcbot-engine/build.gradle b/tcbot-engine/build.gradle
index bfac9d0..7050ae2 100644
--- a/tcbot-engine/build.gradle
+++ b/tcbot-engine/build.gradle
@@ -18,8 +18,8 @@
 apply plugin: 'java'
 
 dependencies {
-    compile (project(":tcbot-persistence"));
     compile (project(":tcbot-teamcity-ignited"));
     compile (project(":tcbot-github-ignited"));
+    compile (project(":tcbot-jira-ignited"));
 }
  
\ No newline at end of file
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/BranchTicketMatcher.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/BranchTicketMatcher.java
similarity index 93%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/BranchTicketMatcher.java
rename to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/BranchTicketMatcher.java
index 8876f3a..996da71 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/visa/BranchTicketMatcher.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/BranchTicketMatcher.java
@@ -15,24 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.tcbot.visa;
+package org.apache.ignite.tcbot.engine.pr;
 
 import com.google.common.base.Strings;
 import org.apache.ignite.githubservice.IGitHubConnection;
 import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
 import org.apache.ignite.ci.github.PullRequest;
 import org.apache.ignite.githubignited.IGitHubConnIgnitedProvider;
-import org.apache.ignite.ci.jira.ignited.IJiraIgnitedProvider;
-import org.apache.ignite.ci.jira.ignited.TicketCompacted;
-import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.jiraignited.IJiraIgnitedProvider;
+import org.apache.ignite.jiraservice.Ticket;
 import org.apache.ignite.tcbot.common.conf.IGitHubConfig;
 import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
 import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.inject.Inject;
-import javax.ws.rs.QueryParam;
 import java.util.Collection;
 import java.util.Objects;
 
@@ -50,8 +48,8 @@ public class BranchTicketMatcher {
     @Inject private IJiraIgnitedProvider jiraIgnProv;
 
     @Nullable public String resolveTcBranchForPrLess(Ticket ticket,
-        IJiraServerConfig jiraCfg,
-        IGitHubConfig gitHubCfg) {
+                                           IJiraServerConfig jiraCfg,
+                                           IGitHubConfig gitHubCfg) {
         String branchNumPrefix = jiraCfg.branchNumPrefix();
 
         if (Strings.isNullOrEmpty(branchNumPrefix)) {
@@ -98,7 +96,7 @@ public class BranchTicketMatcher {
 
         if (Strings.isNullOrEmpty(branchNumPrefix)) {
             //an easy way, no special branch and ticket mappings specified, use project code.
-            String jiraPrefix = jiraCfg.projectCodeForVisa() + TicketCompacted.PROJECT_DELIM;
+            String jiraPrefix = jiraCfg.projectCodeForVisa() + Ticket.PROJECT_DELIM;
 
             final String ticketKey = findFixPrefixedNumber(pr.getTitle(), jiraPrefix);
 
@@ -173,7 +171,7 @@ public class BranchTicketMatcher {
         return false;
     }
 
-    @Nullable private String findFixPrefixedNoInValues(@NotNull String prefix, String... values) {
+    @Nullable private String findFixPrefixedNoInValues(@Nonnull String prefix, String... values) {
         for (String value : values) {
             String fixPrefixedNum = findFixPrefixedNumber(value, prefix);
 
@@ -188,7 +186,7 @@ public class BranchTicketMatcher {
      * @param prefix Ticket prefix.
      * @return Branch number or null.
      */
-    @Nullable private String findFixPrefixedNumber(@Nullable String val, @NotNull String prefix) {
+    @Nullable private String findFixPrefixedNumber(@Nullable String val, @Nonnull String prefix) {
         if (Strings.isNullOrEmpty(val))
             return null;
 
@@ -237,7 +235,7 @@ public class BranchTicketMatcher {
             String branchNumPrefix = jiraCfg.branchNumPrefix();
 
             ticketPrefix = Strings.isNullOrEmpty(branchNumPrefix)
-                ? jiraCfg.projectCodeForVisa() + TicketCompacted.PROJECT_DELIM
+                ? jiraCfg.projectCodeForVisa() + Ticket.PROJECT_DELIM
                 : branchNumPrefix;
 
             String prLessTicket = prLessTicket(branchForTc, ticketPrefix, gitCfg);
@@ -291,9 +289,10 @@ public class BranchTicketMatcher {
             " or use branch name according ticket name.");
     }
 
-    @Nullable private PullRequest findPrForBranch(
-        @Nullable @QueryParam("serverId") String srvId,
-        @Nullable @QueryParam("branchName") String branchForTc) {
+    @Nullable
+    private PullRequest findPrForBranch(
+            @Nullable String srvId,
+            @Nullable String branchForTc) {
         Integer prId = IGitHubConnection.convertBranchToPrId(branchForTc);
 
         if (prId == null)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/PrChainsProcessor.java
similarity index 93%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java
rename to tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/PrChainsProcessor.java
index f2a45aa..7d4b4d3 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessor.java
+++ b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/pr/PrChainsProcessor.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.tcbot.chain;
+package org.apache.ignite.tcbot.engine.pr;
 
 import com.google.common.base.Strings;
 import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import org.apache.ignite.ci.github.PullRequest;
@@ -28,29 +29,32 @@ import org.apache.ignite.githubservice.IGitHubConnection;
 import org.apache.ignite.tcbot.engine.chain.*;
 import org.apache.ignite.githubignited.IGitHubConnIgnited;
 import org.apache.ignite.githubignited.IGitHubConnIgnitedProvider;
-import org.apache.ignite.ci.jira.ignited.IJiraIgnited;
-import org.apache.ignite.ci.jira.ignited.IJiraIgnitedProvider;
-import org.apache.ignite.ci.tcbot.visa.BranchTicketMatcher;
-import org.apache.ignite.ci.user.ITcBotUserCreds;
+import org.apache.ignite.jiraignited.IJiraIgnited;
+import org.apache.ignite.jiraignited.IJiraIgnitedProvider;
 import org.apache.ignite.tcbot.engine.ui.DsChainUi;
 import org.apache.ignite.tcbot.engine.ui.DsSuiteUi;
 import org.apache.ignite.tcbot.engine.ui.DsTestFailureUi;
 import org.apache.ignite.tcbot.engine.ui.DsSummaryUi;
-import org.apache.ignite.ci.web.rest.parms.FullQueryParams;
 import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
 import org.apache.ignite.tcbot.persistence.IStringCompactor;
 import org.apache.ignite.tcignited.ITeamcityIgnited;
 import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
 import org.apache.ignite.tcignited.SyncMode;
+import org.apache.ignite.tcignited.creds.ICredentialsProv;
 import org.apache.ignite.tcignited.history.IRunHistory;
 import org.apache.ignite.tcignited.history.RunHistSync;
 import org.apache.ignite.tcservice.ITeamcity;
-import org.jetbrains.annotations.Nullable;
 
 /**
  * Process pull request/untracked branch chain at particular server.
  */
 public class PrChainsProcessor {
+    private static class Action {
+    public static final String HISTORY = "History";
+    public static final String LATEST = "Latest";
+    public static final String CHAIN = "Chain";
+    }
+
     /** Build chain processor. */
     @Inject private BuildChainProcessor buildChainProcessor;
 
@@ -81,7 +85,7 @@ public class PrChainsProcessor {
      */
     @AutoProfiling
     public DsSummaryUi getTestFailuresSummary(
-        ITcBotUserCreds creds,
+        ICredentialsProv creds,
         String srvCode,
         String suiteId,
         String branchForTc,
@@ -103,11 +107,11 @@ public class PrChainsProcessor {
         res.setJavaFlags(gitHubConnIgnited.config(), jiraIntegration.config());
 
         LatestRebuildMode rebuild;
-        if (FullQueryParams.HISTORY.equals(act))
+        if (Action.HISTORY.equals(act))
             rebuild = LatestRebuildMode.ALL;
-        else if (FullQueryParams.LATEST.equals(act))
+        else if (Action.LATEST.equals(act))
             rebuild = LatestRebuildMode.LATEST;
-        else if (FullQueryParams.CHAIN.equals(act))
+        else if (Action.CHAIN.equals(act))
             rebuild = LatestRebuildMode.NONE;
         else
             rebuild = LatestRebuildMode.LATEST;
@@ -212,13 +216,13 @@ public class PrChainsProcessor {
     @Nullable public List<DsSuiteUi> getBlockersSuitesStatuses(String buildTypeId,
                                                                String branchForTc,
                                                                String srvId,
-                                                               ITcBotUserCreds prov) {
+                                                               ICredentialsProv prov) {
         return getBlockersSuitesStatuses(buildTypeId, branchForTc, srvId, prov, SyncMode.RELOAD_QUEUED);
     }
 
     @Nullable
     public List<DsSuiteUi> getBlockersSuitesStatuses(String buildTypeId, String branchForTc, String srvId,
-                                                     ITcBotUserCreds prov, SyncMode syncMode) {
+                                                     ICredentialsProv prov, SyncMode syncMode) {
         //using here non persistent TC allows to skip update statistic
         ITeamcityIgnited tcIgnited = tcIgnitedProvider.server(srvId, prov);
 
diff --git a/tcbot-engine/build.gradle b/tcbot-jira-ignited/build.gradle
similarity index 89%
copy from tcbot-engine/build.gradle
copy to tcbot-jira-ignited/build.gradle
index bfac9d0..b8fed7f 100644
--- a/tcbot-engine/build.gradle
+++ b/tcbot-jira-ignited/build.gradle
@@ -18,8 +18,7 @@
 apply plugin: 'java'
 
 dependencies {
+    compile (project(":tcbot-jira"));
     compile (project(":tcbot-persistence"));
-    compile (project(":tcbot-teamcity-ignited"));
-    compile (project(":tcbot-github-ignited"));
 }
  
\ No newline at end of file
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java b/tcbot-jira-ignited/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java
similarity index 92%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java
rename to tcbot-jira-ignited/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java
index 1f2a699..c11c8b6 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java
+++ b/tcbot-jira-ignited/src/main/java/org/apache/ignite/ci/jira/ignited/TicketCompacted.java
@@ -18,18 +18,20 @@
 package org.apache.ignite.ci.jira.ignited;
 
 import java.util.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.jiraservice.Fields;
+import org.apache.ignite.jiraservice.Status;
+import org.apache.ignite.jiraservice.Ticket;
 import org.apache.ignite.ci.tcbot.common.StringFieldCompacted;
 import org.apache.ignite.tcbot.persistence.IStringCompactor;
-import org.jetbrains.annotations.Nullable;
+import org.apache.ignite.tcbot.persistence.Persisted;
+
+import javax.annotation.Nullable;
 
 /**
  *
  */
+@Persisted
 public class TicketCompacted {
-    public static final String PROJECT_DELIM = "-";
     /** Id. */
     public long id;
 
@@ -70,7 +72,7 @@ public class TicketCompacted {
         Ticket ticket = new Ticket();
 
         ticket.id = id;
-        ticket.key = projectCode + PROJECT_DELIM + igniteId;
+        ticket.key = projectCode + Ticket.PROJECT_DELIM + igniteId;
         ticket.fields = new Fields();
         ticket.fields.status = new Status(comp.getStringFromId(status));
         ticket.fields.summary = summary != null ? summary.getValue() : null;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/IJiraIgnited.java
similarity index 83%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java
rename to tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/IJiraIgnited.java
index 24a3086..4eda192 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnited.java
+++ b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/IJiraIgnited.java
@@ -14,13 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.jira.ignited;
+package org.apache.ignite.jiraignited;
 
 import java.io.IOException;
 import java.util.Set;
-import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.jiraservice.Ticket;
 import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
 
+import javax.annotation.Nullable;
+
 /**
  *
  */
@@ -52,4 +54,15 @@ public interface IJiraIgnited {
     public String postJiraComment(String ticket, String comment) throws IOException;
 
     public IJiraServerConfig config();
+
+    /**
+     * @param srvId Server id.
+     * @return integer representation of server ID.
+     */
+    public static int serverIdToInt(@Nullable final String srvId) {
+        if (srvId == null)
+            return 0;
+
+        return Math.abs(srvId.hashCode());
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnitedProvider.java b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/IJiraIgnitedProvider.java
similarity index 95%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnitedProvider.java
rename to tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/IJiraIgnitedProvider.java
index f1620a2..afaea3f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/IJiraIgnitedProvider.java
+++ b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/IJiraIgnitedProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.jira.ignited;
+package org.apache.ignite.jiraignited;
 
 /**
  *
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnited.java
similarity index 90%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java
rename to tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnited.java
index 38190e1..1c75424 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnited.java
+++ b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnited.java
@@ -14,15 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.jira.ignited;
+package org.apache.ignite.jiraignited;
 
 import java.io.IOException;
 import java.util.Set;
 import javax.inject.Inject;
-import org.apache.ignite.ci.jira.pure.IJiraIntegration;
-import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.jiraservice.IJiraIntegration;
+import org.apache.ignite.jiraservice.Ticket;
 import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
-import org.apache.ignite.tcignited.ITeamcityIgnited;
 
 /**
  *
@@ -51,7 +50,7 @@ class JiraIgnited implements IJiraIgnited {
 
         srvCode = jira.config().getCode();
 
-        srvIdMaskHigh = ITeamcityIgnited.serverIdToInt(srvCode);
+        srvIdMaskHigh = IJiraIgnited.serverIdToInt(srvCode);
 
         jiraTicketDao.init();
     }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedModule.java b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnitedModule.java
similarity index 92%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedModule.java
rename to tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnitedModule.java
index 4126b58..c58341f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedModule.java
+++ b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnitedModule.java
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.jira.ignited;
+package org.apache.ignite.jiraignited;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.internal.SingletonScope;
-import org.apache.ignite.ci.jira.pure.JiraIntegrationModule;
+import org.apache.ignite.jiraservice.JiraIntegrationModule;
 
 /**
  *
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedProvider.java b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnitedProvider.java
similarity index 92%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedProvider.java
rename to tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnitedProvider.java
index 50852fe..4f4571b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraIgnitedProvider.java
+++ b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraIgnitedProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.jira.ignited;
+package org.apache.ignite.jiraignited;
 
 import com.google.common.base.Strings;
 import com.google.common.cache.Cache;
@@ -23,8 +23,8 @@ import com.google.inject.Provider;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import javax.inject.Inject;
-import org.apache.ignite.ci.jira.pure.IJiraIntegration;
-import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider;
+import org.apache.ignite.jiraservice.IJiraIntegration;
+import org.apache.ignite.jiraservice.IJiraIntegrationProvider;
 import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
 
 /**
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketDao.java b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraTicketDao.java
similarity index 97%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketDao.java
rename to tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraTicketDao.java
index c836f05..5956b5a 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketDao.java
+++ b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraTicketDao.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.ignited;
+package org.apache.ignite.jiraignited;
 
 import com.google.common.base.Preconditions;
 import java.util.Collection;
@@ -28,10 +28,10 @@ import javax.inject.Inject;
 import javax.inject.Provider;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.ci.db.TcHelperDb;
+import org.apache.ignite.ci.jira.ignited.TicketCompacted;
 import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
 import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
-import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.jiraservice.Ticket;
 import org.apache.ignite.tcbot.persistence.CacheConfigs;
 import org.apache.ignite.tcbot.persistence.IStringCompactor;
 import org.apache.ignite.internal.util.typedef.F;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraTicketSync.java
similarity index 91%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java
rename to tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraTicketSync.java
index 6664e87..35eff37 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/ignited/JiraTicketSync.java
+++ b/tcbot-jira-ignited/src/main/java/org/apache/ignite/jiraignited/JiraTicketSync.java
@@ -15,25 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.ignited;
+package org.apache.ignite.jiraignited;
 
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
 import javax.inject.Inject;
 import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
 import org.apache.ignite.tcbot.persistence.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.jiraservice.Tickets;
+import org.apache.ignite.jiraservice.Fields;
+import org.apache.ignite.jiraservice.IJiraIntegration;
+import org.apache.ignite.jiraservice.IJiraIntegrationProvider;
+import org.apache.ignite.jiraservice.Ticket;
 import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
-import org.apache.ignite.tcignited.ITeamcityIgnited;
 import org.apache.ignite.internal.util.typedef.F;
-import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -83,7 +82,7 @@ public class JiraTicketSync {
      * @param srvCode Service ID
      * @return Task name concatenated with server name.
      */
-    @NotNull
+    @Nonnull
     private String taskName(String taskName, String srvCode) {
         return JiraTicketSync.class.getSimpleName() + "." + taskName + "." + srvCode;
     }
@@ -92,9 +91,10 @@ public class JiraTicketSync {
      * @param srvCode Server internal identification.
      * @param fullResync full or incremental.
      */
+    @SuppressWarnings("WeakerAccess")
     @MonitoredTask(name = "Actualize Jira(srv, full resync)", nameExtArgsIndexes = {0, 1})
     protected String actualizeJiraTickets(String srvCode, boolean fullResync) {
-        int srvIdMaskHigh = ITeamcityIgnited.serverIdToInt(srvCode);
+        int srvIdMaskHigh = IJiraIgnited.serverIdToInt(srvCode);
         IJiraIntegration jira = jiraIntegrationProvider.server(srvCode);
 
         String reqFields = Arrays.stream(Fields.class.getDeclaredFields())
diff --git a/tcbot-jira/README.md b/tcbot-jira/README.md
new file mode 100644
index 0000000..241f970
--- /dev/null
+++ b/tcbot-jira/README.md
@@ -0,0 +1,3 @@
+TC Bot JIRA (service) module
+--------------------------------
+Module for pure (non cached) requests to JIRA service
\ No newline at end of file
diff --git a/tcbot-engine/build.gradle b/tcbot-jira/build.gradle
similarity index 73%
copy from tcbot-engine/build.gradle
copy to tcbot-jira/build.gradle
index bfac9d0..ca6c2cc 100644
--- a/tcbot-engine/build.gradle
+++ b/tcbot-jira/build.gradle
@@ -18,8 +18,11 @@
 apply plugin: 'java'
 
 dependencies {
+    compile (project(":tcbot-common"));
+    // JIRA integration shares entries for pure and Ignited connection, so persistence module is here for interfaces/annotations
     compile (project(":tcbot-persistence"));
-    compile (project(":tcbot-teamcity-ignited"));
-    compile (project(":tcbot-github-ignited"));
+    
+    testCompile group: 'junit', name: 'junit', version: junitVer
+    testCompile group: 'org.mockito', name: 'mockito-core', version: mockitoVer
 }
  
\ No newline at end of file
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Fields.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Fields.java
similarity index 97%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Fields.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Fields.java
index 02ed0b2..914b2c4 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Fields.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Fields.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.pure;
+package org.apache.ignite.jiraservice;
 
 import com.google.common.base.MoreObjects;
 
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/IJiraIntegration.java
similarity index 96%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/IJiraIntegration.java
index cfced3c..6d44b9d 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegration.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/IJiraIntegration.java
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.pure;
+package org.apache.ignite.jiraservice;
 
 import java.io.IOException;
-import org.apache.ignite.ci.jira.Tickets;
 import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
 
 /**
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegrationProvider.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/IJiraIntegrationProvider.java
similarity index 95%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegrationProvider.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/IJiraIntegrationProvider.java
index 984233b..6886518 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/IJiraIntegrationProvider.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/IJiraIntegrationProvider.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.pure;
+package org.apache.ignite.jiraservice;
 
 /**
  *
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Jira.java
similarity index 95%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Jira.java
index cdef647..b2d4943 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Jira.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Jira.java
@@ -15,14 +15,13 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.pure;
+package org.apache.ignite.jiraservice;
 
 import com.google.common.base.Preconditions;
 import com.google.gson.Gson;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
 import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
-import org.apache.ignite.ci.jira.Tickets;
 import org.apache.ignite.tcbot.common.conf.IJiraServerConfig;
-import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
 import org.apache.ignite.tcbot.common.util.HttpUtil;
 import org.checkerframework.checker.nullness.qual.Nullable;
 import org.slf4j.Logger;
@@ -44,7 +43,7 @@ class Jira implements IJiraIntegration {
     private String srvCode;
 
     /** Config. */
-    @Inject ITcBotConfig cfg;
+    @Inject private IDataSourcesConfigSupplier cfg;
 
     /** {@inheritDoc} */
     @Override public void init(String srvCode) {
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/JiraIntegrationModule.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/JiraIntegrationModule.java
similarity index 96%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/JiraIntegrationModule.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/JiraIntegrationModule.java
index 3c19a9f..325a94e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/JiraIntegrationModule.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/JiraIntegrationModule.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.pure;
+package org.apache.ignite.jiraservice;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.internal.SingletonScope;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/JiraIntegrationProvider.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/JiraIntegrationProvider.java
similarity index 98%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/JiraIntegrationProvider.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/JiraIntegrationProvider.java
index fcfd473..62d648c 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/JiraIntegrationProvider.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/JiraIntegrationProvider.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.pure;
+package org.apache.ignite.jiraservice;
 
 import com.google.common.base.Strings;
 import com.google.common.cache.Cache;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Status.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Status.java
similarity index 97%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Status.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Status.java
index c1ad37a..3cc37e9 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Status.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Status.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.pure;
+package org.apache.ignite.jiraservice;
 
 /**
  * Status for Jira ticket.
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Ticket.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Ticket.java
similarity index 93%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Ticket.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Ticket.java
index 256bb3d..2221c6c 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/pure/Ticket.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Ticket.java
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira.pure;
+package org.apache.ignite.jiraservice;
 
 import com.google.common.base.MoreObjects;
-import org.apache.ignite.ci.jira.ignited.TicketCompacted;
 
 import javax.annotation.Nullable;
 
@@ -26,6 +25,7 @@ import javax.annotation.Nullable;
  * See example of GSON here https://issues.apache.org/jira/rest/api/2/issue/IGNITE-123
  */
 public class Ticket {
+    public static final String PROJECT_DELIM = "-";
     /** Id. */
     public long id;
 
@@ -47,7 +47,7 @@ public class Ticket {
      * @return Ignite ticket Number ignoring project code (like 123 in IGNITE-123).
      */
     public int keyWithoutProject(String projectCode) {
-        String ticketPrefix = projectCode + TicketCompacted.PROJECT_DELIM;
+        String ticketPrefix = projectCode + PROJECT_DELIM;
 
         return Integer.valueOf(key.substring(ticketPrefix.length()));
     }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/Tickets.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Tickets.java
similarity index 95%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/Tickets.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Tickets.java
index 4ce85c5..125baa6 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/Tickets.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/Tickets.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.jira;
+package org.apache.ignite.jiraservice;
 
 import java.util.Collection;
 import java.util.Collections;
-import org.apache.ignite.ci.jira.pure.Ticket;
+import org.apache.ignite.jiraservice.Ticket;
 
 /**
  * See example of GSON here https://issues.apache.org/jira/rest/api/2/search?jql=project%20=%20IGNITE%20order%20by%20updated%20DESC&fields=status
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/package-info.java b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/package-info.java
similarity index 96%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/package-info.java
rename to tcbot-jira/src/main/java/org/apache/ignite/jiraservice/package-info.java
index f7c4ecf..5699df1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jira/package-info.java
+++ b/tcbot-jira/src/main/java/org/apache/ignite/jiraservice/package-info.java
@@ -19,4 +19,4 @@
  * This package is intended for interacting with Jira servers. It contains classes which is needed for injection Jira
  * integration service instance via Guice. And interfaces and classes which provide specified functionality.
  */
-package org.apache.ignite.ci.jira;
+package org.apache.ignite.jiraservice;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/NamedTask.java b/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/NamedTask.java
similarity index 98%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/NamedTask.java
rename to tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/NamedTask.java
index a5b2c37..8c1ef60 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/NamedTask.java
+++ b/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/NamedTask.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.di.scheduler;
+package org.apache.ignite.tcbot.persistence.scheduler;
 
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.StampedLock;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/SchedulerModule.java b/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/SchedulerModule.java
similarity index 91%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/SchedulerModule.java
rename to tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/SchedulerModule.java
index 81cd86e..2cd2ea7 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/SchedulerModule.java
+++ b/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/SchedulerModule.java
@@ -15,11 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.di.scheduler;
+package org.apache.ignite.tcbot.persistence.scheduler;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.internal.SingletonScope;
-import org.apache.ignite.tcbot.persistence.scheduler.IScheduler;
 
 public class SchedulerModule extends AbstractModule {
     /** {@inheritDoc} */
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/TcBotScheduler.java b/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/TcBotScheduler.java
similarity index 97%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/TcBotScheduler.java
rename to tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/TcBotScheduler.java
index 791ae21..5728e0e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/scheduler/TcBotScheduler.java
+++ b/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/TcBotScheduler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.di.scheduler;
+package org.apache.ignite.tcbot.persistence.scheduler;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
@@ -30,7 +30,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
-import org.apache.ignite.tcbot.persistence.scheduler.IScheduler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;