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 aeb9c40  Add logging from monitoring interceptor, all tasks added to 
monitoring log
aeb9c40 is described below

commit aeb9c40d53885727460ed7b3ecff2ce4a37a1fa7
Author: Dmitriy Pavlov <dpav...@apache.org>
AuthorDate: Tue Jul 30 14:58:45 2019 +0300

    Add logging from monitoring interceptor, all tasks added to monitoring log
---
 .../ci/tcbot/TcBotBusinessServicesModule.java      |  48 --------
 .../TcBotWebAppModule.java}                        |  49 +++------
 .../java/org/apache/ignite/ci/web/CtxListener.java |  12 +-
 .../ci/web/rest/monitoring/MonitoringService.java  |   4 +-
 .../org/apache/ignite/ci/di/DiContextTest.java     |   6 +-
 .../org/apache/ignite/ci/di/cache/CachingTest.java |   1 +
 .../ignite/tcbot/common/TcBotCommonModule.java     |  18 ++-
 .../interceptor}/AutoProfilingInterceptor.java     |   2 +-
 .../AutoProfilingInterceptorModule.java            |  22 ++--
 .../interceptor}/GuavaCachedInterceptor.java       |   8 +-
 .../common/interceptor}/GuavaCachedModule.java     |   3 +-
 .../tcbot/common/interceptor/MonitoredTask.java    |   5 +
 .../interceptor}/MonitoredTaskInterceptor.java     | 122 +++++++++++++++++++--
 .../MonitoredTaskInterceptorModule.java            |  23 ++--
 .../apache/ignite/tcbot/common/util/TimeUtil.java  |   4 +
 .../ignite/tcbot/engine/TcBotEngineModule.java     |   7 ++
 .../persistence/scheduler/TcBotScheduler.java      |   2 +-
 17 files changed, 195 insertions(+), 141 deletions(-)

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
deleted file mode 100644
index 804bb89..0000000
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotBusinessServicesModule.java
+++ /dev/null
@@ -1,48 +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.tcbot;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.internal.SingletonScope;
-import org.apache.ignite.ci.issue.IssuesStorage;
-import org.apache.ignite.tcbot.engine.buildtime.BuildTimeService;
-import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
-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.tcbot.user.UserAndSessionsStorage;
-import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
-
-/**
- * TC Bot self services mapping (without 3rd party integrations configuration.
- */
-public class TcBotBusinessServicesModule extends AbstractModule {
-    /** {@inheritDoc} */
-    @Override protected void configure() {
-        bind(ITcBotConfig.class).to(LocalFilesBasedConfig.class).in(new 
SingletonScope());
-        //todo remove
-        
bind(IDataSourcesConfigSupplier.class).to(LocalFilesBasedConfig.class).in(new 
SingletonScope());
-        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());
-
-        //todo move to bot engine module
-        bind(BuildTimeService.class).in(new SingletonScope());
-    }
-}
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/tcbot/TcBotWebAppModule.java
similarity index 75%
rename from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/IgniteTcBotModule.java
rename to 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/TcBotWebAppModule.java
index 67f5ad1..e613ccf 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/tcbot/TcBotWebAppModule.java
@@ -14,28 +14,33 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.di;
+package org.apache.ignite.ci.tcbot;
 
 import com.google.common.base.Preconditions;
 import com.google.inject.AbstractModule;
 import com.google.inject.Injector;
 import com.google.inject.internal.SingletonScope;
-import com.google.inject.matcher.Matchers;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import javax.inject.Provider;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.ci.db.Ignite1Init;
-import org.apache.ignite.ci.di.cache.GuavaCachedModule;
+import org.apache.ignite.ci.issue.IssuesStorage;
+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.tcbot.user.UserAndSessionsStorage;
+import org.apache.ignite.tcbot.common.conf.IDataSourcesConfigSupplier;
 import org.apache.ignite.tcbot.engine.TcBotEngineModule;
+import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
 import org.apache.ignite.tcbot.notify.TcBotNotificationsModule;
 import org.apache.ignite.tcbot.persistence.scheduler.SchedulerModule;
 import org.apache.ignite.githubignited.GitHubIgnitedModule;
 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;
 import org.apache.ignite.ci.tcbot.issue.IssueDetector;
 import org.apache.ignite.tcbot.common.exeption.ServicesStartingException;
 import org.apache.ignite.tcbot.persistence.TcBotPersistenceModule;
@@ -43,22 +48,16 @@ import org.apache.ignite.tcignited.TeamcityIgnitedModule;
 import org.apache.ignite.tcbot.common.exeption.ExceptionUtil;
 import org.apache.ignite.tcbot.engine.pool.TcUpdatePool;
 import org.apache.ignite.ci.web.model.hist.VisasHistoryStorage;
-import org.apache.ignite.tcbot.common.interceptor.AutoProfiling;
-import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
 
 /**
  *
  */
-public class IgniteTcBotModule extends AbstractModule {
+public class TcBotWebAppModule extends AbstractModule {
     /** Ignite future. */
     private Future<Ignite> igniteFut;
 
     /** {@inheritDoc} */
     @Override protected void configure() {
-        install(new GuavaCachedModule());
-        configProfiling();
-        configTaskMonitor();
-
         bind(Ignite.class).toProvider((Provider<Ignite>)() -> {
             Preconditions.checkNotNull(igniteFut, "Ignite future is not yet 
initialized");
 
@@ -90,27 +89,13 @@ public class IgniteTcBotModule extends AbstractModule {
 
         // common services
         install(new TcBotEngineModule());
-        install(new TcBotBusinessServicesModule());
-    }
-
-    private void configProfiling() {
-        AutoProfilingInterceptor profilingInterceptor = new 
AutoProfilingInterceptor();
-
-        bindInterceptor(Matchers.any(),
-            Matchers.annotatedWith(AutoProfiling.class),
-            profilingInterceptor);
-
-        bind(AutoProfilingInterceptor.class).toInstance(profilingInterceptor);
-    }
-
-    private void configTaskMonitor() {
-        MonitoredTaskInterceptor profilingInterceptor = new 
MonitoredTaskInterceptor();
-
-        bindInterceptor(Matchers.any(),
-            Matchers.annotatedWith(MonitoredTask.class),
-            profilingInterceptor);
-
-        bind(MonitoredTaskInterceptor.class).toInstance(profilingInterceptor);
+        bind(ITcBotConfig.class).to(LocalFilesBasedConfig.class).in(new 
SingletonScope());
+        //todo remove duplication of instances for base and for overriden class
+        
bind(IDataSourcesConfigSupplier.class).to(LocalFilesBasedConfig.class).in(new 
SingletonScope());
+        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());
     }
 
     public void setIgniteFut(Future<Ignite> igniteFut) {
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 e637738..12dcf88 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
@@ -27,7 +27,8 @@ import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.ci.db.TcHelperDb;
-import org.apache.ignite.ci.di.IgniteTcBotModule;
+import org.apache.ignite.ci.tcbot.TcBotWebAppModule;
+import org.apache.ignite.tcbot.common.interceptor.MonitoredTaskInterceptor;
 import org.apache.ignite.tcbot.engine.pool.TcUpdatePool;
 import org.apache.ignite.tcbot.persistence.scheduler.IScheduler;
 import org.apache.ignite.ci.observer.BuildObserver;
@@ -51,7 +52,7 @@ public class CtxListener implements ServletContextListener {
     /** {@inheritDoc} */
     @Override public void contextInitialized(ServletContextEvent sctxEvt) {
         initLoggerBridge();
-        IgniteTcBotModule igniteTcBotModule = new IgniteTcBotModule();
+        TcBotWebAppModule igniteTcBotModule = new TcBotWebAppModule();
         Injector injectorPreCreated = Guice.createInjector(igniteTcBotModule);
 
         Injector injector = 
igniteTcBotModule.startIgniteInit(injectorPreCreated);
@@ -107,6 +108,13 @@ public class CtxListener implements ServletContextListener 
{
         }
 
         try {
+            injector.getInstance(MonitoredTaskInterceptor.class).close();
+        }
+        catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        try {
             TcHelperDb.stop(injector.getInstance(Ignite.class));
         }
         catch (Exception e) {
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/monitoring/MonitoringService.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/monitoring/MonitoringService.java
index 576a38d..b631639 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/monitoring/MonitoringService.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/rest/monitoring/MonitoringService.java
@@ -21,8 +21,8 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheMetrics;
 import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.ci.di.AutoProfilingInterceptor;
-import org.apache.ignite.ci.di.MonitoredTaskInterceptor;
+import org.apache.ignite.tcbot.common.interceptor.AutoProfilingInterceptor;
+import org.apache.ignite.tcbot.common.interceptor.MonitoredTaskInterceptor;
 import org.apache.ignite.ci.web.CtxListener;
 
 import javax.annotation.security.PermitAll;
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 01a7b88..10e1bcd 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
@@ -26,6 +26,8 @@ import org.apache.ignite.IgniteCache;
 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.TcBotWebAppModule;
+import org.apache.ignite.tcbot.common.interceptor.MonitoredTaskInterceptor;
 import org.apache.ignite.tcbot.engine.chain.BuildChainProcessor;
 import org.apache.ignite.tcbot.engine.conf.ITcBotConfig;
 import org.apache.ignite.tcbot.engine.pool.TcUpdatePool;
@@ -55,7 +57,7 @@ public class DiContextTest {
     }
 
     public Injector getInjector() {
-        IgniteTcBotModule igniteTcBotModule = new IgniteTcBotModule();
+        TcBotWebAppModule igniteTcBotModule = new TcBotWebAppModule();
         Ignite ignite = mock(Ignite.class);
         
when(ignite.getOrCreateCache(anyString())).thenReturn(Mockito.mock(IgniteCache.class));
         
when(ignite.getOrCreateCache(any(CacheConfiguration.class))).thenReturn(Mockito.mock(IgniteCache.class));
@@ -89,7 +91,7 @@ public class DiContextTest {
 
     @Test
     public void testMonitoring() {
-        IgniteTcBotModule igniteTcBotModule = new IgniteTcBotModule();
+        TcBotWebAppModule igniteTcBotModule = new TcBotWebAppModule();
         final Injector injector = Guice.createInjector(igniteTcBotModule);
         final MonitorTest instance = injector.getInstance(MonitorTest.class);
 
diff --git 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/cache/CachingTest.java
 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/cache/CachingTest.java
index ede1feb..b5a2906 100644
--- 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/cache/CachingTest.java
+++ 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/di/cache/CachingTest.java
@@ -21,6 +21,7 @@ import com.google.inject.Injector;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
+import org.apache.ignite.tcbot.common.interceptor.GuavaCachedModule;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/TcBotCommonModule.java
similarity index 65%
copy from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
copy to 
tcbot-common/src/main/java/org/apache/ignite/tcbot/common/TcBotCommonModule.java
index 393ebb8..bb5e532 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/TcBotCommonModule.java
@@ -14,25 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-package org.apache.ignite.ci.di.cache;
+package org.apache.ignite.tcbot.common;
 
 import com.google.inject.AbstractModule;
-import com.google.inject.matcher.Matchers;
-import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
+import 
org.apache.ignite.tcbot.common.interceptor.AutoProfilingInterceptorModule;
+import org.apache.ignite.tcbot.common.interceptor.GuavaCachedModule;
+import 
org.apache.ignite.tcbot.common.interceptor.MonitoredTaskInterceptorModule;
 
 /**
  *
  */
-public class GuavaCachedModule extends AbstractModule {
+public class TcBotCommonModule extends AbstractModule {
     /** {@inheritDoc} */
     @Override protected void configure() {
-        GuavaCachedInterceptor cachedInterceptor = new 
GuavaCachedInterceptor();
+        install(new MonitoredTaskInterceptorModule());
 
-        bindInterceptor(Matchers.any(),
-            Matchers.annotatedWith(GuavaCached.class),
-            cachedInterceptor);
+        install(new AutoProfilingInterceptorModule());
 
-        bind(GuavaCachedInterceptor.class).toInstance(cachedInterceptor);
+        install(new GuavaCachedModule());
     }
 }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/AutoProfilingInterceptor.java
 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/AutoProfilingInterceptor.java
similarity index 98%
rename from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/AutoProfilingInterceptor.java
rename to 
tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/AutoProfilingInterceptor.java
index fe7709b..fda3d11 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/AutoProfilingInterceptor.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/AutoProfilingInterceptor.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;
+package org.apache.ignite.tcbot.common.interceptor;
 
 import com.google.common.base.Stopwatch;
 import java.util.Collection;
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/AutoProfilingInterceptorModule.java
similarity index 68%
copy from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
copy to 
tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/AutoProfilingInterceptorModule.java
index 393ebb8..f0448c9 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/AutoProfilingInterceptorModule.java
@@ -14,25 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-package org.apache.ignite.ci.di.cache;
+package org.apache.ignite.tcbot.common.interceptor;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.matcher.Matchers;
-import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
 
-/**
- *
- */
-public class GuavaCachedModule extends AbstractModule {
-    /** {@inheritDoc} */
+public class AutoProfilingInterceptorModule extends AbstractModule {
     @Override protected void configure() {
-        GuavaCachedInterceptor cachedInterceptor = new 
GuavaCachedInterceptor();
+        configProfiling();
+    }
+
+    private void configProfiling() {
+        AutoProfilingInterceptor profilingInterceptor = new 
AutoProfilingInterceptor();
 
         bindInterceptor(Matchers.any(),
-            Matchers.annotatedWith(GuavaCached.class),
-            cachedInterceptor);
+            Matchers.annotatedWith(AutoProfiling.class),
+            profilingInterceptor);
 
-        bind(GuavaCachedInterceptor.class).toInstance(cachedInterceptor);
+        bind(AutoProfilingInterceptor.class).toInstance(profilingInterceptor);
     }
 }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedInterceptor.java
 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/GuavaCachedInterceptor.java
similarity index 96%
rename from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedInterceptor.java
rename to 
tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/GuavaCachedInterceptor.java
index 5629694..6c0180f 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedInterceptor.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/GuavaCachedInterceptor.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.cache;
+package org.apache.ignite.tcbot.common.interceptor;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Throwables;
@@ -28,10 +28,9 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.TimeUnit;
+import javax.annotation.Nonnull;
 import org.aopalliance.intercept.MethodInterceptor;
 import org.aopalliance.intercept.MethodInvocation;
-import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
-import org.jetbrains.annotations.NotNull;
 
 public class GuavaCachedInterceptor implements MethodInterceptor {
     private final ConcurrentMap<String, Cache<List, Optional>> caches = new 
ConcurrentHashMap<>();
@@ -95,7 +94,7 @@ public class GuavaCachedInterceptor implements 
MethodInterceptor {
         return optional.orElse(null);
     }
 
-    @NotNull
+    @Nonnull
     private String cacheId(MethodInvocation invocation) {
         final Method invocationMtd = invocation.getMethod();
         final String cls = invocationMtd.getDeclaringClass().getName();
@@ -103,5 +102,4 @@ public class GuavaCachedInterceptor implements 
MethodInterceptor {
 
         return cls + "." + mtd;
     }
-
 }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/GuavaCachedModule.java
similarity index 92%
copy from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
copy to 
tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/GuavaCachedModule.java
index 393ebb8..a73cd40 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/GuavaCachedModule.java
@@ -15,11 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.ci.di.cache;
+package org.apache.ignite.tcbot.common.interceptor;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.matcher.Matchers;
-import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
 
 /**
  *
diff --git 
a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTask.java
 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTask.java
index 2849109..54de520 100644
--- 
a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTask.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTask.java
@@ -37,4 +37,9 @@ public @interface MonitoredTask {
      * Array of Argument indexes (0-based) to be used to extend name.
      */
     int[] nameExtArgsIndexes() default {};
+
+    /**
+     * Add log record to monitoring.txt log
+     */
+    boolean log() default true;
 }
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/MonitoredTaskInterceptor.java
 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTaskInterceptor.java
similarity index 62%
rename from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/MonitoredTaskInterceptor.java
rename to 
tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTaskInterceptor.java
index 85a6519..20a5a85 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/MonitoredTaskInterceptor.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTaskInterceptor.java
@@ -14,33 +14,69 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.ignite.ci.di;
+package org.apache.ignite.tcbot.common.interceptor;
 
 import com.google.common.base.Strings;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Objects;
+import java.util.StringJoiner;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
+import javax.annotation.Nonnull;
 import org.aopalliance.intercept.MethodInterceptor;
 import org.aopalliance.intercept.MethodInvocation;
-import org.apache.ignite.tcbot.common.interceptor.MonitoredTask;
+import org.apache.ignite.tcbot.common.conf.TcBotWorkDir;
 import org.apache.ignite.tcbot.common.util.TimeUtil;
-import org.jetbrains.annotations.NotNull;
 
-public class MonitoredTaskInterceptor implements MethodInterceptor {
+import static 
org.apache.ignite.tcbot.common.util.TimeUtil.timestampForLogsSimpleDate;
+
+public class MonitoredTaskInterceptor implements MethodInterceptor, 
AutoCloseable {
     private final ConcurrentMap<String, Invocation> totalTime = new 
ConcurrentSkipListMap<>();
 
+    private FileWriter fileWriter;
+
+    private final AtomicBoolean init = new AtomicBoolean();
+
+    public void initLogging() {
+        try {
+            final File workDir = TcBotWorkDir.resolveWorkDir();
+            File tcbotLogs = new File(workDir, "tcbot_logs");
+            File file = new File(tcbotLogs, "monitoring"+
+                timestampForLogsSimpleDate(System.currentTimeMillis())+".log");
+
+            if (!tcbotLogs.exists())
+                file.mkdirs();
+
+            fileWriter = new FileWriter(file);
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void close() throws Exception {
+        if (fileWriter != null)
+            fileWriter.close();
+        fileWriter = null;
+    }
+
     public static class Invocation {
         private final AtomicLong lastStartTs = new AtomicLong();
         private final AtomicLong lastEndTs = new AtomicLong();
         private final AtomicReference<Object> lastResult = new 
AtomicReference<>();
 
         private final AtomicInteger callsCnt = new AtomicInteger();
+        /** Name and full key for monitored task. */
         private String name;
 
         Invocation(String name) {
@@ -95,18 +131,34 @@ public class MonitoredTaskInterceptor implements 
MethodInterceptor {
 
             return Objects.toString(lastResult.get());
         }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return new StringJoiner(", ", Invocation.class.getSimpleName() + 
"[", "]")
+                .add("name='" + name + "'")
+                .add("startTs=" + lastStartTs)
+                .add("endTs=" + lastEndTs)
+                .add("result=" + lastResult)
+                .add("callsCnt=" + callsCnt)
+                .toString();
+        }
     }
 
     /** {@inheritDoc} */
     @Override public Object invoke(MethodInvocation invocation) throws 
Throwable {
-        final long startTs = System.currentTimeMillis();
+        if(init.compareAndSet(false,true))
+            initLogging();
 
-        String fullKey = taskName(invocation);
+        final long startTs = System.currentTimeMillis();
 
-        final Invocation monitoredInvoke = totalTime.computeIfAbsent(fullKey, 
Invocation::new);
+        TaskSettings settings = taskName(invocation);
+        final Invocation monitoredInvoke = 
totalTime.computeIfAbsent(settings.name, Invocation::new);
 
         monitoredInvoke.saveStart(startTs);
 
+        if (settings.log)
+            log(monitoredInvoke.toString(), -1);
+
         Object res = null;
         try {
             res = invocation.proceed();
@@ -119,18 +171,56 @@ public class MonitoredTaskInterceptor implements 
MethodInterceptor {
             throw t;
         }
         finally {
-            monitoredInvoke.saveEnd(System.currentTimeMillis(), res);
+            long end = System.currentTimeMillis();
+            monitoredInvoke.saveEnd(end, res);
+
+            if (settings.log)
+                log(monitoredInvoke.toString(), end - startTs);
         }
     }
 
-    @NotNull
-    private String taskName(MethodInvocation invocation) {
+    public void log(String str, long duration) {
+        if (fileWriter == null)
+            return;
+
+        try {
+            StringBuilder sb = new StringBuilder();
+            sb.append(str);
+
+            if (duration > 1) {
+                sb.append(", duration: ");
+                sb.append(TimeUtil.millisToDurationPrintable(duration));
+            }
+
+            sb.append(String.format("%n"));
+
+            fileWriter.write(sb.toString());
+            fileWriter.flush();
+        }
+        catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static class TaskSettings {
+        private final String name;
+        private final boolean log;
+
+        public TaskSettings(String name, boolean log) {
+            this.name = name;
+            this.log = log;
+        }
+    }
+
+    @Nonnull
+    private TaskSettings taskName(MethodInvocation invocation) {
         final Method invocationMtd = invocation.getMethod();
         final String cls = invocationMtd.getDeclaringClass().getSimpleName();
         final String mtd = invocationMtd.getName();
 
         StringBuilder fullKey = new StringBuilder();
 
+        boolean log;
         final MonitoredTask annotation = 
invocationMtd.getAnnotation(MonitoredTask.class);
         if (annotation != null) {
             String activityName = annotation.name();
@@ -160,11 +250,19 @@ public class MonitoredTaskInterceptor implements 
MethodInterceptor {
                 }
             }
 
+            if (annotation.log())
+                log = true;
+            else
+                log = false;
+
         }
-        else
+        else {
             fullKey.append(cls).append(".").append(mtd);
 
-        return fullKey.toString();
+            log = false;
+        }
+
+        return new TaskSettings(fullKey.toString(), log);
     }
 
     public Collection<Invocation> getList() {
diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTaskInterceptorModule.java
similarity index 68%
rename from 
ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
rename to 
tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTaskInterceptorModule.java
index 393ebb8..10cd706 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/di/cache/GuavaCachedModule.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/interceptor/MonitoredTaskInterceptorModule.java
@@ -14,25 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-package org.apache.ignite.ci.di.cache;
+package org.apache.ignite.tcbot.common.interceptor;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.matcher.Matchers;
-import org.apache.ignite.tcbot.common.interceptor.GuavaCached;
 
-/**
- *
- */
-public class GuavaCachedModule extends AbstractModule {
-    /** {@inheritDoc} */
+public class MonitoredTaskInterceptorModule extends AbstractModule {
     @Override protected void configure() {
-        GuavaCachedInterceptor cachedInterceptor = new 
GuavaCachedInterceptor();
+        configTaskMonitor();
+    }
+
+    private void configTaskMonitor() {
+        MonitoredTaskInterceptor profilingInterceptor = new 
MonitoredTaskInterceptor();
 
         bindInterceptor(Matchers.any(),
-            Matchers.annotatedWith(GuavaCached.class),
-            cachedInterceptor);
+            Matchers.annotatedWith(MonitoredTask.class),
+            profilingInterceptor);
 
-        bind(GuavaCachedInterceptor.class).toInstance(cachedInterceptor);
+        bind(MonitoredTaskInterceptor.class).toInstance(profilingInterceptor);
     }
+
 }
diff --git 
a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/util/TimeUtil.java 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/util/TimeUtil.java
index 82ae16e..c596ab2 100644
--- 
a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/util/TimeUtil.java
+++ 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/util/TimeUtil.java
@@ -94,4 +94,8 @@ public class TimeUtil {
     public static String timestampToTcSimpleDate(long ts) {
         return new SimpleDateFormat("yyyyMMdd'T'HHmmssZ").format(new Date(ts));
     }
+
+    public static String timestampForLogsSimpleDate(long ts) {
+        return new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date(ts));
+    }
 }
diff --git 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/TcBotEngineModule.java
 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/TcBotEngineModule.java
index 3b8dd80..44a9465 100644
--- 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/TcBotEngineModule.java
+++ 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/TcBotEngineModule.java
@@ -19,6 +19,9 @@ package org.apache.ignite.tcbot.engine;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.internal.SingletonScope;
+import org.apache.ignite.tcbot.common.TcBotCommonModule;
+import 
org.apache.ignite.tcbot.common.interceptor.MonitoredTaskInterceptorModule;
+import org.apache.ignite.tcbot.engine.buildtime.BuildTimeService;
 import org.apache.ignite.tcbot.engine.chain.BuildChainProcessor;
 import org.apache.ignite.tcbot.engine.tracked.IDetailedStatusForTrackedBranch;
 import org.apache.ignite.tcbot.engine.tracked.TrackedBranchChainsProcessor;
@@ -31,5 +34,9 @@ public class TcBotEngineModule extends AbstractModule {
     @Override protected void configure() {
         bind(BuildChainProcessor.class).in(new SingletonScope());
         
bind(IDetailedStatusForTrackedBranch.class).to(TrackedBranchChainsProcessor.class).in(new
 SingletonScope());
+
+        bind(BuildTimeService.class).in(new SingletonScope());
+
+        install(new TcBotCommonModule());
     }
 }
\ No newline at end of file
diff --git 
a/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/TcBotScheduler.java
 
b/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/TcBotScheduler.java
index 5728e0e..495cb2d 100644
--- 
a/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/TcBotScheduler.java
+++ 
b/tcbot-persistence/src/main/java/org/apache/ignite/tcbot/persistence/scheduler/TcBotScheduler.java
@@ -81,7 +81,7 @@ class TcBotScheduler implements IScheduler {
      * @param threadNme Runner name to be used in display.
      */
     @SuppressWarnings({"UnusedReturnValue", "WeakerAccess"})
-    @MonitoredTask(name = "Scheduled", nameExtArgIndex = 0)
+    @MonitoredTask(name = "Scheduled", nameExtArgIndex = 0, log = false)
     protected String checkNamedTasks(String threadNme) {
         AtomicInteger run = new AtomicInteger();
         List<Throwable> problems = new ArrayList<>();

Reply via email to