]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7354 Display total analysis time in scanners
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Fri, 1 Jul 2016 15:46:24 +0000 (17:46 +0200)
committerDuarte Meneses <duarte.meneses@sonarsource.com>
Mon, 4 Jul 2016 09:58:13 +0000 (11:58 +0200)
sonar-scanner-engine/src/main/java/org/sonar/batch/bootstrap/GlobalContainer.java
sonar-scanner-engine/src/test/java/org/sonar/batch/bootstrap/GlobalContainerTest.java

index 0578a3b144d24f3dc60e65350e0a8c17a97074be..606b3d9a29d2f59ae642b6b007eefdd36ea7b10d 100644 (file)
@@ -21,10 +21,13 @@ package org.sonar.batch.bootstrap;
 
 import java.util.List;
 import java.util.Map;
+
 import org.sonar.api.Plugin;
 import org.sonar.api.internal.SonarQubeVersionFactory;
 import org.sonar.api.utils.System2;
 import org.sonar.api.utils.UriReader;
+import org.sonar.api.utils.log.Logger;
+import org.sonar.api.utils.log.Loggers;
 import org.sonar.batch.index.CachesManager;
 import org.sonar.batch.platform.DefaultServer;
 import org.sonar.batch.repository.DefaultGlobalRepositoriesLoader;
@@ -40,7 +43,7 @@ import org.sonar.core.util.DefaultHttpDownloader;
 import org.sonar.core.util.UuidFactoryImpl;
 
 public class GlobalContainer extends ComponentContainer {
-
+  private static final Logger LOG = Loggers.get(GlobalContainer.class);
   private final Map<String, String> bootstrapProperties;
 
   private GlobalContainer(Map<String, String> bootstrapProperties) {
@@ -103,7 +106,26 @@ public class GlobalContainer extends ComponentContainer {
   }
 
   public void executeTask(Map<String, String> taskProperties, Object... components) {
+    long startTime = System.currentTimeMillis();
     new TaskContainer(this, taskProperties, components).execute();
+
+    LOG.info("Task total time: {}", formatTime(System.currentTimeMillis() - startTime));
+  }
+
+  static String formatTime(long time) {
+    long h = time / (60 * 60 * 1000);
+    long m = (time - h * 60 * 60 * 1000) / (60 * 1000);
+    long s = (time - h * 60 * 60 * 1000 - m * 60 * 1000) / 1000;
+    long ms = time % 1000;
+    final String format;
+    if (h > 0) {
+      format = "%1$d:%2$02d:%3$02d.%4$03ds";
+    } else if (m > 0) {
+      format = "%2$d:%3$02d.%4$03ds";
+    } else {
+      format = "%3$d.%4$03ds";
+    }
+    return String.format(format, h, m, s, ms);
   }
 
 }
index 0019d8adc18fa17df84dc004d34f5319bdda3ae5..168ebd6a844e98e7403945a1238ddf3e8a6ff36d 100644 (file)
@@ -63,6 +63,14 @@ public class GlobalContainerTest {
     assertThat(container.getComponentByType(Bar.class)).isNotNull();
   }
 
+  @Test
+  public void shouldFormatTime() {
+    assertThat(GlobalContainer.formatTime(1 * 60 * 60 * 1000 + 2 * 60 * 1000 + 3 * 1000 + 400)).isEqualTo("1:02:03.400s");
+    assertThat(GlobalContainer.formatTime(2 * 60 * 1000 + 3 * 1000 + 400)).isEqualTo("2:03.400s");
+    assertThat(GlobalContainer.formatTime(3 * 1000 + 400)).isEqualTo("3.400s");
+    assertThat(GlobalContainer.formatTime(400)).isEqualTo("0.400s");
+  }
+
   @BatchSide
   public static class Foo {