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/23 19:30:31 UTC

[ignite-teamcity-bot] branch master updated: IGNITE-10989: TC Helper god object was removed

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 11bfe4d  IGNITE-10989: TC Helper god object was removed
11bfe4d is described below

commit 11bfe4d067d0a80f0475c628a46911bbd22bdb4f
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Wed Jan 23 22:30:15 2019 +0300

    IGNITE-10989: TC Helper god object was removed
---
 README.md                                          |  2 +-
 .../java/org/apache/ignite/ci/HelperConfig.java    |  3 +-
 .../main/java/org/apache/ignite/ci/TcHelper.java   | 49 ----------------------
 .../org/apache/ignite/ci/db/Ignite2Configurer.java |  4 +-
 .../org/apache/ignite/ci/di/IgniteTcBotModule.java |  3 --
 .../apache/ignite/ci/observer/BuildObserver.java   |  7 ++--
 .../apache/ignite/ci/observer/ObserverTask.java    | 15 +++----
 .../apache/ignite/ci/runners/ClientTmpHelper.java  |  2 +-
 .../ignite/ci/runners/RemoteClientTmpHelper.java   |  2 +-
 .../ci/{ITcHelper.java => tcbot/ITcBotBgAuth.java} | 30 ++++---------
 .../apache/ignite/ci/tcbot/TcBotBgAuthImpl.java    | 22 ++++++++++
 .../ci/tcbot/TcBotBusinessServicesModule.java      |  3 +-
 .../ignite/ci/tcbot/TcBotSystemProperties.java     | 10 +++++
 .../apache/ignite/ci/tcbot/conf/ITcBotConfig.java  |  5 +++
 .../ci/tcbot/conf/LocalFilesBasedConfig.java       |  4 ++
 .../{ => tcbot}/user/UserAndSessionsStorage.java   |  4 +-
 .../tcbot/visa/TcBotTriggerAndSignOffService.java  |  7 ++--
 .../java/org/apache/ignite/ci/web/CtxListener.java |  1 -
 .../apache/ignite/ci/web/rest/TriggerBuilds.java   |  2 -
 .../org/apache/ignite/ci/web/rest/login/Login.java | 10 ++---
 .../ignite/ci/web/rest/login/UserService.java      |  4 +-
 .../org/apache/ignite/ci/di/DiContextTest.java     | 10 +++--
 .../ci/tcbot/chain/MockBasedTcBotModule.java       |  4 ++
 .../org/apache/ignite/ci/user/LoginAuthTest.java   |  1 +
 24 files changed, 90 insertions(+), 114 deletions(-)

diff --git a/README.md b/README.md
index a67798f..f1ff6b9 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ Should you have any questions please contact Ignite Developers at dev@ignite.apa
 Locally code can be set up using IntelliJ idea and gradle project import.
 Locally it can be run using org.apache.ignite.ci.web.Launcher.main() method.
 The bot will create necessary configs in ~/.ignite-teamcity-helper - it is bot Home directory.
-In can be changed with org.apache.ignite.ci.ITcHelper.TEAMCITY_HELPER_HOME system property.
+In can be changed with org.apache.ignite.ci.tcbot.TcBotSystemProperties.TEAMCITY_HELPER_HOME system property.
 
 Examples of configs can be found in [conf](conf) directory.
 
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/HelperConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/HelperConfig.java
index a0cd102..ebdb919 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/HelperConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/HelperConfig.java
@@ -28,6 +28,7 @@ import java.util.Properties;
 import javax.ws.rs.QueryParam;
 import org.apache.ignite.ci.conf.BranchesTracked;
 import org.apache.ignite.ci.conf.PasswordEncoder;
+import org.apache.ignite.ci.tcbot.TcBotSystemProperties;
 import org.apache.ignite.ci.util.Base64Util;
 import org.apache.ignite.ci.util.ExceptionUtil;
 import org.jetbrains.annotations.NotNull;
@@ -126,7 +127,7 @@ public class HelperConfig {
 
     public static File resolveWorkDir() {
         File workDir = null;
-        String property = System.getProperty(ITcHelper.TEAMCITY_HELPER_HOME);
+        String property = System.getProperty(TcBotSystemProperties.TEAMCITY_HELPER_HOME);
         if (isNullOrEmpty(property)) {
             String conf = ".ignite-teamcity-helper";
             String prop = System.getProperty("user.home");
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
deleted file mode 100644
index 0b094e7..0000000
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/TcHelper.java
+++ /dev/null
@@ -1,49 +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;
-
-import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
-import org.apache.ignite.ci.user.ICredentialsProv;
-
-/**
- * TC Bot implementation. To be migrated to smaller injected classes
- */
-@Deprecated
-public class TcHelper implements ITcHelper {
-    /** Server authorizer credentials. */
-    private ICredentialsProv serverAuthorizerCreds;
-
-    /** {@inheritDoc} */
-    @Override public void setServerAuthorizerCreds(ICredentialsProv creds) {
-        this.serverAuthorizerCreds = creds;
-    }
-
-    /** {@inheritDoc} */
-    @Override public ICredentialsProv getServerAuthorizerCreds() {
-        return serverAuthorizerCreds;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isServerAuthorized() {
-        return serverAuthorizerCreds != null;
-    }
-
-    @Override public String primaryServerId() {
-        return ITcBotConfig.DEFAULT_SERVER_ID; //todo move to method
-    }
-}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/db/Ignite2Configurer.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/db/Ignite2Configurer.java
index 63d7727..29ccee1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/db/Ignite2Configurer.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/db/Ignite2Configurer.java
@@ -23,7 +23,7 @@ import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
 import ch.qos.logback.core.rolling.RollingFileAppender;
 import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
 import org.apache.ignite.ci.HelperConfig;
-import org.apache.ignite.ci.ITcHelper;
+import org.apache.ignite.ci.tcbot.TcBotSystemProperties;
 import org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
@@ -95,7 +95,7 @@ public class Ignite2Configurer {
         final DataRegionConfiguration regConf = new DataRegionConfiguration()
             .setPersistenceEnabled(true);
 
-        String regSzGb = System.getProperty(ITcHelper.TEAMCITY_BOT_REGIONSIZE);
+        String regSzGb = System.getProperty(TcBotSystemProperties.TEAMCITY_BOT_REGIONSIZE);
 
         if (regSzGb != null) {
             try {
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 e45db99..64ecd36 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
@@ -26,8 +26,6 @@ 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;
 import org.apache.ignite.ci.db.Ignite1Init;
 import org.apache.ignite.ci.di.cache.GuavaCachedModule;
 import org.apache.ignite.ci.di.scheduler.SchedulerModule;
@@ -76,7 +74,6 @@ public class IgniteTcBotModule extends AbstractModule {
         bind(ObserverTask.class).in(new SingletonScope());
         bind(BuildObserver.class).in(new SingletonScope());
         bind(VisasHistoryStorage.class).in(new SingletonScope());
-        bind(ITcHelper.class).to(TcHelper.class).in(new SingletonScope());
         bind(BackgroundUpdater.class).in(new SingletonScope());
 
         install(new TeamcityIgnitedModule());
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
index 88a858e..503889b 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/BuildObserver.java
@@ -20,7 +20,7 @@ package org.apache.ignite.ci.observer;
 import java.util.Objects;
 import java.util.Timer;
 import javax.inject.Inject;
-import org.apache.ignite.ci.ITcHelper;
+import org.apache.ignite.ci.tcbot.ITcBotBgAuth;
 import org.apache.ignite.ci.tcmodel.result.Build;
 import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
@@ -47,8 +47,7 @@ public class BuildObserver {
     /** Task, which should be done periodically. */
     private ObserverTask observerTask;
 
-    /** Helper. */
-    @Inject private ITcHelper tcHelper;
+    @Inject private ITcBotBgAuth tcBotBgAuth;
 
     /** */
     @Inject private ITeamcityIgnitedProvider teamcityIgnitedProvider;
@@ -115,7 +114,7 @@ public class BuildObserver {
 
         BuildsInfo buildsInfo = observerTask.getInfo(key);
 
-        ICredentialsProv creds = tcHelper.getServerAuthorizerCreds();
+        ICredentialsProv creds = tcBotBgAuth.getServerAuthorizerCreds();
 
         ITeamcityIgnited teamcity = teamcityIgnitedProvider.server(key.srvId, creds);
 
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
index 24b32d5..f91bad6 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/observer/ObserverTask.java
@@ -27,11 +27,9 @@ import java.util.TimerTask;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantLock;
 import javax.inject.Inject;
-import org.apache.ignite.ci.ITcHelper;
 import org.apache.ignite.ci.di.AutoProfiling;
 import org.apache.ignite.ci.di.MonitoredTask;
-import org.apache.ignite.ci.jira.pure.IJiraIntegration;
-import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider;
+import org.apache.ignite.ci.tcbot.ITcBotBgAuth;
 import org.apache.ignite.ci.tcbot.visa.TcBotTriggerAndSignOffService;
 import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
@@ -57,7 +55,7 @@ public class ObserverTask extends TimerTask {
     private static final Logger logger = LoggerFactory.getLogger(ObserverTask.class);
 
     /** Helper. */
-    @Inject private ITcHelper tcHelper;
+    @Inject private ITcBotBgAuth tcBotBgAuth;
 
     /** */
     @Inject private ITeamcityIgnitedProvider teamcityIgnitedProvider;
@@ -154,9 +152,11 @@ public class ObserverTask extends TimerTask {
         observationLock.lock();
 
         try {
-            if (!tcHelper.isServerAuthorized())
+            if (!tcBotBgAuth.isServerAuthorized())
                 return "Server authorization required.";
 
+            ICredentialsProv creds = tcBotBgAuth.getServerAuthorizerCreds();
+
             int checkedBuilds = 0;
             int notFinishedBuilds = 0;
             Set<String> ticketsNotified = new HashSet<>();
@@ -166,8 +166,7 @@ public class ObserverTask extends TimerTask {
             for (ContributionKey key : infos.keySet()) {
                 BuildsInfo info = infos.get(key);
 
-                ITeamcityIgnited teamcity = teamcityIgnitedProvider.server(info.srvId,
-                    tcHelper.getServerAuthorizerCreds());
+                ITeamcityIgnited teamcity = teamcityIgnitedProvider.server(info.srvId, creds);
 
                 checkedBuilds += info.buildsCount();
 
@@ -190,8 +189,6 @@ public class ObserverTask extends TimerTask {
                 Visa visa = visasHistStorage.getLastVisaRequest(info.getContributionKey()).getResult();
 
                 if (!visa.isSuccess()) {
-                    ICredentialsProv creds = tcHelper.getServerAuthorizerCreds();
-
                     Visa updatedVisa = visaIssuer.notifyJira(info.srvId, creds, info.buildTypeId,
                         info.branchForTc, info.ticket);
 
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 f05804f..35884cc 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
@@ -22,7 +22,7 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.ci.db.TcHelperDb;
 import org.apache.ignite.ci.issue.Issue;
 import org.apache.ignite.ci.issue.IssuesStorage;
-import org.apache.ignite.ci.user.UserAndSessionsStorage;
+import org.apache.ignite.ci.tcbot.user.UserAndSessionsStorage;
 
 /**
  * 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/runners/RemoteClientTmpHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
index 4f50769..5413f04 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/runners/RemoteClientTmpHelper.java
@@ -38,7 +38,7 @@ import org.apache.ignite.ci.teamcity.ignited.IgniteStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildDao;
 import org.apache.ignite.ci.user.TcHelperUser;
-import org.apache.ignite.ci.user.UserAndSessionsStorage;
+import org.apache.ignite.ci.tcbot.user.UserAndSessionsStorage;
 import org.apache.ignite.ci.util.XmlUtil;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.logger.slf4j.Slf4jLogger;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITcHelper.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/ITcBotBgAuth.java
similarity index 56%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITcHelper.java
rename to ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/ITcBotBgAuth.java
index ae45495..69db701 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/ITcHelper.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/ITcBotBgAuth.java
@@ -14,35 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-package org.apache.ignite.ci;
+package org.apache.ignite.ci.tcbot;
 
 import org.apache.ignite.ci.user.ICredentialsProv;
+import org.jetbrains.annotations.Nullable;
 
 /**
- * Teamcity Bot main interface. This inteface became too huge.
+ * Server authorization data holder. Saves credentials provided by user in Authorize server.
  */
-@Deprecated
-public interface ITcHelper {
-    /** System property to specify: Teamcity helper home. Ignite home will be set to same dir. */
-    public String TEAMCITY_HELPER_HOME = "teamcity.helper.home";
-
-    /**
-     * Teamcity bot data storage configuration region size in gigabytes. Default is 20% of physical RAM.
-     */
-    public String TEAMCITY_BOT_REGIONSIZE = "teamcity.bot.regionsize";
-
-    String primaryServerId();
-
-    @Deprecated
+public interface ITcBotBgAuth {
     /** */
-    void setServerAuthorizerCreds(ICredentialsProv creds);
+    public void setServerAuthorizerCreds(ICredentialsProv creds);
 
-    @Deprecated
     /** */
-    ICredentialsProv getServerAuthorizerCreds();
+    @Nullable public ICredentialsProv getServerAuthorizerCreds();
 
     /** */
-    boolean isServerAuthorized();
-
+    public default boolean isServerAuthorized() {
+        return getServerAuthorizerCreds() != null;
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBgAuthImpl.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBgAuthImpl.java
new file mode 100644
index 0000000..6cacb47
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBgAuthImpl.java
@@ -0,0 +1,22 @@
+package org.apache.ignite.ci.tcbot;
+
+import org.apache.ignite.ci.user.ICredentialsProv;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ *
+ */
+class TcBotBgAuthImpl implements ITcBotBgAuth {
+    /** Server authorizer credentials. */
+    private ICredentialsProv srvAuthorizerCreds;
+
+    /** {@inheritDoc} */
+    @Override public void setServerAuthorizerCreds(ICredentialsProv creds) {
+        this.srvAuthorizerCreds = creds;
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public ICredentialsProv getServerAuthorizerCreds() {
+        return srvAuthorizerCreds;
+    }
+}
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java
index b3a2368..45076b6 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java
@@ -24,7 +24,7 @@ import org.apache.ignite.ci.tcbot.conf.LocalFilesBasedConfig;
 import org.apache.ignite.ci.tcbot.issue.IIssuesStorage;
 import org.apache.ignite.ci.tcbot.trends.MasterTrendsService;
 import org.apache.ignite.ci.tcbot.user.IUserStorage;
-import org.apache.ignite.ci.user.UserAndSessionsStorage;
+import org.apache.ignite.ci.tcbot.user.UserAndSessionsStorage;
 
 /**
  * TC Bot self services mapping (without 3rd party integrations configuration.
@@ -36,5 +36,6 @@ public class TcBotBusinessServicesModule extends AbstractModule {
         bind(IUserStorage.class).to(UserAndSessionsStorage.class).in(new SingletonScope());
         bind(IIssuesStorage.class).to(IssuesStorage.class).in(new SingletonScope());
         bind(MasterTrendsService.class).in(new SingletonScope());
+        bind(ITcBotBgAuth.class).to(TcBotBgAuthImpl.class).in(new SingletonScope());
     }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotSystemProperties.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotSystemProperties.java
index 1e4b45c..49a55b4 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotSystemProperties.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotSystemProperties.java
@@ -21,7 +21,17 @@ package org.apache.ignite.ci.tcbot;
  * Apache Ignite Teamcity Bot properties.
  */
 public class TcBotSystemProperties {
+    /** Dev mode. */
     public static final String DEV_MODE = "DEV_MODE";
 
+    /** Teamcity bot recorder. */
     public static final String TEAMCITY_BOT_RECORDER = "teamcity.bot.recorder";
+
+    /**
+     * Teamcity bot data storage configuration region size in gigabytes. Default is 20% of physical RAM.
+     */
+    public static final String TEAMCITY_BOT_REGIONSIZE = "teamcity.bot.regionsize";
+
+    /** System property to specify: Teamcity helper home. Ignite home will be set to same dir. */
+    public static final String TEAMCITY_HELPER_HOME = "teamcity.helper.home";
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcBotConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcBotConfig.java
index 0ee6465..95948da 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcBotConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/ITcBotConfig.java
@@ -27,6 +27,9 @@ public interface ITcBotConfig {
     /** Default server id. */
     String DEFAULT_SERVER_ID = "apache";
 
+
+    public String primaryServerId();
+
     /**
      * @return Tracked branches configuration for TC Bot.
      */
@@ -45,4 +48,6 @@ public interface ITcBotConfig {
     public default Collection<String> getServerIds() {
         return getTrackedBranches().getServerIds();
     }
+
+
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
index 90c4fa4..f510061 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/conf/LocalFilesBasedConfig.java
@@ -29,4 +29,8 @@ public class LocalFilesBasedConfig implements ITcBotConfig {
     @Override public BranchesTracked getTrackedBranches() {
         return HelperConfig.getTrackedBranches();
     }
+
+    @Override public String primaryServerId() {
+        return ITcBotConfig.DEFAULT_SERVER_ID;
+    }
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/user/UserAndSessionsStorage.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/user/UserAndSessionsStorage.java
similarity index 95%
rename from ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/user/UserAndSessionsStorage.java
rename to ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/user/UserAndSessionsStorage.java
index 6396781..a287790 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/user/UserAndSessionsStorage.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/user/UserAndSessionsStorage.java
@@ -15,12 +15,14 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.user;
+package org.apache.ignite.ci.tcbot.user;
 
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.ci.db.TcHelperDb;
 import org.apache.ignite.ci.tcbot.user.IUserStorage;
+import org.apache.ignite.ci.user.TcHelperUser;
+import org.apache.ignite.ci.user.UserSession;
 import org.jetbrains.annotations.Nullable;
 
 import javax.cache.Cache;
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 d47933b..05031c7 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
@@ -18,7 +18,6 @@
 package org.apache.ignite.ci.tcbot.visa;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.inject.Provider;
 import java.text.DateFormat;
@@ -37,7 +36,6 @@ import javax.annotation.Nonnull;
 import javax.inject.Inject;
 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.github.GitHubBranch;
 import org.apache.ignite.ci.github.GitHubUser;
@@ -51,6 +49,7 @@ import org.apache.ignite.ci.jira.ignited.IJiraIgnitedProvider;
 import org.apache.ignite.ci.jira.pure.IJiraIntegrationProvider;
 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.ci.tcmodel.mute.MuteInfo;
 import org.apache.ignite.ci.tcmodel.result.Build;
@@ -126,7 +125,7 @@ public class TcBotTriggerAndSignOffService {
     @Inject IStringCompactor compactor;
 
     /** Helper. */
-    @Inject ITcHelper tcHelper;
+    @Inject ITcBotBgAuth tcBotBgAuth;
 
     @Inject PrChainsProcessor prChainsProcessor;
 
@@ -342,7 +341,7 @@ public class TcBotTriggerAndSignOffService {
 
         buildObserverProvider.get().observe(srvId, prov, ticketFullName, branchForTc, parentSuiteId, builds);
 
-        if (!tcHelper.isServerAuthorized())
+        if (!tcBotBgAuth.isServerAuthorized())
             return "Ask server administrator to authorize the Bot to enable JIRA notifications.";
 
         return "JIRA ticket " + ticketFullName + " will be notified after the tests are completed.";
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/CtxListener.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/CtxListener.java
index 50b9e22..8619355 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/CtxListener.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/CtxListener.java
@@ -25,7 +25,6 @@ import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 import org.apache.ignite.Ignite;
-import org.apache.ignite.ci.ITcHelper;
 import org.apache.ignite.ci.db.TcHelperDb;
 import org.apache.ignite.ci.di.IgniteTcBotModule;
 import org.apache.ignite.ci.di.scheduler.IScheduler;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java
index cd11e81..5f4031c 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/TriggerBuilds.java
@@ -31,8 +31,6 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
-import org.apache.ignite.ci.ITcHelper;
-import org.apache.ignite.ci.ITeamcity;
 import org.apache.ignite.ci.conf.ServerIntegrationLinks;
 import org.apache.ignite.ci.github.pure.IGitHubConnection;
 import org.apache.ignite.ci.github.pure.IGitHubConnectionProvider;
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/Login.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/Login.java
index 78affa3..f6f62d1 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/Login.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/Login.java
@@ -19,15 +19,12 @@ package org.apache.ignite.ci.web.rest.login;
 
 import com.google.common.base.Preconditions;
 import com.google.inject.Injector;
-import org.apache.ignite.ci.IAnalyticsEnabledTeamcity;
-import org.apache.ignite.ci.ITcHelper;
 import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
 import org.apache.ignite.ci.tcbot.user.IUserStorage;
 import org.apache.ignite.ci.tcmodel.user.User;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider;
 import org.apache.ignite.ci.teamcity.pure.ITcLogin;
 import org.apache.ignite.ci.user.TcHelperUser;
-import org.apache.ignite.ci.user.UserAndSessionsStorage;
 import org.apache.ignite.ci.util.Base64Util;
 import org.apache.ignite.ci.util.CryptUtil;
 import org.apache.ignite.ci.web.CtxListener;
@@ -60,8 +57,8 @@ public class Login {
     public ServerDataResponse primaryServerUrl() {
         Injector injector = CtxListener.getInjector(ctx);
 
-        ITcHelper tcHelper = injector.getInstance(ITcHelper.class);
-        String srvId = tcHelper.primaryServerId();
+        ITcBotConfig tcBotCfg = injector.getInstance(ITcBotConfig.class);
+        String srvId = tcBotCfg.primaryServerId();
         String host = injector.getInstance(ITeamcityIgnitedProvider.class).server(srvId, null).host();
         return new ServerDataResponse(host);
     }
@@ -79,8 +76,7 @@ public class Login {
         final ITcLogin tcLogin = injector.getInstance(ITcLogin.class);
         IUserStorage users = injector.getInstance(IUserStorage.class);
 
-        ITcHelper tcHelper = injector.getInstance(ITcHelper.class);
-        String primarySrvId = tcHelper.primaryServerId();
+        String primarySrvId = cfg.primaryServerId();
 
         try {
             return doLogin(username, pwd, users, primarySrvId,
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
index 5aa6cdb..22ee2f5 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/login/UserService.java
@@ -31,7 +31,7 @@ import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Form;
 import javax.ws.rs.core.MediaType;
-import org.apache.ignite.ci.ITcHelper;
+import org.apache.ignite.ci.tcbot.ITcBotBgAuth;
 import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
 import org.apache.ignite.ci.tcbot.issue.IssueDetector;
 import org.apache.ignite.ci.tcbot.user.IUserStorage;
@@ -95,7 +95,7 @@ public class UserService {
         Injector injector = CtxListener.getInjector(ctx);
 
         IssueDetector issueDetector = injector.getInstance(IssueDetector.class);
-        final ITcHelper helper = injector.getInstance(ITcHelper.class);
+        final ITcBotBgAuth helper = injector.getInstance(ITcBotBgAuth.class);
         helper.setServerAuthorizerCreds(prov);
 
         issueDetector.startBackgroundCheck(prov);
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/DiContextTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/DiContextTest.java
index eb9a92a..e996691 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/DiContextTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/DiContextTest.java
@@ -23,15 +23,15 @@ import java.util.Collection;
 import java.util.concurrent.CompletableFuture;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.ci.ITcHelper;
 import org.apache.ignite.ci.observer.BuildObserver;
 import org.apache.ignite.ci.observer.ObserverTask;
+import org.apache.ignite.ci.tcbot.ITcBotBgAuth;
+import org.apache.ignite.ci.tcbot.conf.ITcBotConfig;
 import org.apache.ignite.ci.teamcity.restcached.ITcServerProvider;
 import org.apache.ignite.ci.teamcity.restcached.ITcServerFactory;
 import org.apache.ignite.ci.web.TcUpdatePool;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.junit.Test;
-import org.mockito.Mock;
 import org.mockito.Mockito;
 
 import static org.junit.Assert.assertTrue;
@@ -125,10 +125,12 @@ public class DiContextTest {
     }
 
     @Test
-    public void checkSingletonTcHelper() {
+    public void checkSingletonTcConfig() {
         Injector injector = getInjector();
 
-        validateInstanceCachedFor(injector, ITcHelper.class);
+        validateInstanceCachedFor(injector, ITcBotConfig.class);
+
+        validateInstanceCachedFor(injector, ITcBotBgAuth.class);
 
         validateInstanceCachedFor(injector, BuildObserver.class).stop();
     }
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 f734d13..77fd7c2 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
@@ -98,6 +98,10 @@ public class MockBasedTcBotModule extends AbstractModule {
         bind(ITcServerProvider.class).toInstance(tcSrvOldProv);
 
         bind(ITcBotConfig.class).toInstance(new ITcBotConfig() {
+            @Override public String primaryServerId() {
+                return ITcBotConfig.DEFAULT_SERVER_ID;
+            }
+
             @Override public BranchesTracked getTrackedBranches() {
                 return tracked;
             }
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/user/LoginAuthTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/user/LoginAuthTest.java
index 1a21536..b93631a 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/user/LoginAuthTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/user/LoginAuthTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.ci.user;
 
+import org.apache.ignite.ci.tcbot.user.UserAndSessionsStorage;
 import org.apache.ignite.ci.tcmodel.user.User;
 import org.apache.ignite.ci.teamcity.pure.ITcLogin;
 import org.apache.ignite.ci.util.Base64Util;