]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7080 Web service must provide execution time of the background task in progress
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Wed, 25 Nov 2015 15:38:00 +0000 (16:38 +0100)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 26 Nov 2015 09:50:11 +0000 (10:50 +0100)
server/sonar-server/src/main/java/org/sonar/server/computation/ws/TaskFormatter.java
server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActivityWsActionTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/ws/ComponentWsActionTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/ws/QueueWsActionTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/ws/TaskFormatterTest.java
server/sonar-server/src/test/java/org/sonar/server/computation/ws/TaskWsActionTest.java

index 57754f32bf7ba57a039c12317507f059ed8e917a..1346e6e654d52582a2d714f13a0a456ece6dc614 100644 (file)
@@ -28,6 +28,7 @@ import java.util.Map;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import org.sonar.api.utils.DateUtils;
+import org.sonar.api.utils.System2;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
 import org.sonar.db.ce.CeActivityDto;
@@ -45,10 +46,12 @@ public class TaskFormatter {
 
   private final DbClient dbClient;
   private final CeLogging ceLogging;
+  private final System2 system2;
 
-  public TaskFormatter(DbClient dbClient, CeLogging ceLogging) {
+  public TaskFormatter(DbClient dbClient, CeLogging ceLogging, System2 system2) {
     this.dbClient = dbClient;
     this.ceLogging = ceLogging;
+    this.system2 = system2;
   }
 
   public List<WsCe.Task> formatQueue(DbSession dbSession, List<CeQueueDto> dtos) {
@@ -81,6 +84,11 @@ public class TaskFormatter {
     if (dto.getStartedAt() != null) {
       builder.setStartedAt(DateUtils.formatDateTime(new Date(dto.getStartedAt())));
     }
+    //
+    Long executionTimeMs = computeExecutionTimeMs(dto);
+    if (executionTimeMs != null) {
+      builder.setExecutionTimeMs(executionTimeMs);
+    }
     return builder.build();
   }
 
@@ -152,4 +160,16 @@ public class TaskFormatter {
       return dto;
     }
   }
+
+  /**
+   * now - startedAt
+   */
+  @CheckForNull
+  Long computeExecutionTimeMs(CeQueueDto dto) {
+    Long startedAt = dto.getStartedAt();
+    if (startedAt == null) {
+      return null;
+    }
+    return system2.now() - startedAt;
+  }
 }
index 8f981cb856e9f504f003418ac7eea8e5a9d3f3ff..c1b54d02df7c87225228053e4c62ad09e07c1b8d 100644 (file)
@@ -68,7 +68,7 @@ public class ActivityWsActionTest {
   ComponentDbTester componentDb = new ComponentDbTester(dbTester);
 
   CeLogging ceLogging = mock(CeLogging.class);
-  TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), ceLogging);
+  TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), ceLogging, System2.INSTANCE);
   ActivityWsAction underTest = new ActivityWsAction(userSession, dbTester.getDbClient(), formatter);
   WsActionTester tester = new WsActionTester(underTest);
 
index 8d2908d146050cf977de07ec642a537dccdc01c4..9dd41cbe1963b3b3484c87ec9d06928ab650d483 100644 (file)
@@ -53,7 +53,7 @@ public class ComponentWsActionTest {
   public DbTester dbTester = DbTester.create(System2.INSTANCE);
 
   CeLogging ceLogging = mock(CeLogging.class);
-  TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), ceLogging);
+  TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), ceLogging, System2.INSTANCE);
   ComponentWsAction underTest = new ComponentWsAction(userSession, dbTester.getDbClient(), formatter);
   WsActionTester tester = new WsActionTester(underTest);
 
index 5709e7acda067ed7b8c3e9f54ed339d52802e957..c8baf5778b6b2e1f3c5bd872850d245c55a492a3 100644 (file)
@@ -53,7 +53,7 @@ public class QueueWsActionTest {
   public DbTester dbTester = DbTester.create(System2.INSTANCE);
 
   CeLogging ceLogging = mock(CeLogging.class);
-  TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), ceLogging);
+  TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), ceLogging, System2.INSTANCE);
   QueueWsAction underTest = new QueueWsAction(userSession, dbTester.getDbClient(), formatter);
   WsActionTester tester = new WsActionTester(underTest);
 
index 452ce1bb6f39012a19111339842f845d354480fa..cca32b55a955f822c11e2bd1d6c3c733827167ca 100644 (file)
@@ -30,6 +30,7 @@ import org.mockito.Mockito;
 import org.sonar.api.resources.Qualifiers;
 import org.sonar.api.utils.DateUtils;
 import org.sonar.api.utils.System2;
+import org.sonar.api.utils.internal.TestSystem2;
 import org.sonar.db.DbTester;
 import org.sonar.db.ce.CeActivityDto;
 import org.sonar.db.ce.CeQueueDto;
@@ -53,8 +54,9 @@ public class TaskFormatterTest {
   @Rule
   public DbTester db = DbTester.create(System2.INSTANCE);
 
+  System2 system2 = mock(System2.class);
   CeLogging ceLogging = mock(CeLogging.class, Mockito.RETURNS_DEEP_STUBS);
-  TaskFormatter underTest = new TaskFormatter(db.getDbClient(), ceLogging);
+  TaskFormatter underTest = new TaskFormatter(db.getDbClient(), ceLogging, system2);
 
   @Test
   public void formatQueue_without_component() {
@@ -78,6 +80,8 @@ public class TaskFormatterTest {
     assertThat(wsTask.hasComponentKey()).isFalse();
     assertThat(wsTask.hasComponentName()).isFalse();
     assertThat(wsTask.hasExecutedAt()).isFalse();
+    assertThat(wsTask.hasStartedAt()).isFalse();
+    assertThat(wsTask.hasExecutionTimeMs()).isFalse();
   }
 
   @Test
@@ -106,8 +110,7 @@ public class TaskFormatterTest {
     assertThat(wsTask.getStatus()).isEqualTo(WsCe.TaskStatus.IN_PROGRESS);
     assertThat(wsTask.getLogs()).isTrue();
     assertThat(wsTask.getSubmitterLogin()).isEqualTo("rob");
-
-    assertThat(wsTask.hasExecutionTimeMs()).isFalse();
+    assertThat(wsTask.hasExecutionTimeMs()).isTrue();
     assertThat(wsTask.hasExecutedAt()).isFalse();
   }
 
@@ -127,6 +130,23 @@ public class TaskFormatterTest {
     assertThat(wsTask.hasComponentName()).isFalse();
   }
 
+  @Test
+  public void formatQueue_compute_execute_time_if_in_progress() {
+    long startedAt = 1_450_000_001_000L;
+    long now = 1_450_000_003_000L;
+    CeQueueDto dto = new CeQueueDto();
+    dto.setUuid("UUID");
+    dto.setTaskType("TYPE");
+    dto.setStatus(CeQueueDto.Status.IN_PROGRESS);
+    dto.setCreatedAt(1_450_000_000_000L);
+    dto.setStartedAt(startedAt);
+    when(system2.now()).thenReturn(now);
+
+    WsCe.Task wsTask = underTest.formatQueue(db.getSession(), dto);
+
+    assertThat(wsTask.getExecutionTimeMs()).isEqualTo(now-startedAt);
+  }
+
   @Test
   public void formatQueues() throws Exception {
     CeQueueDto dto1 = new CeQueueDto();
index c43a24096ee37d85f0f3f5acfc244fc55e1b8702..5eca667d865ee3e798273028a5197ee272ca97b6 100644 (file)
@@ -57,7 +57,7 @@ public class TaskWsActionTest {
   public DbTester dbTester = DbTester.create(System2.INSTANCE);
 
   CeLogging ceLogging = mock(CeLogging.class);
-  TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), ceLogging);
+  TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), ceLogging, System2.INSTANCE);
   TaskWsAction underTest = new TaskWsAction(dbTester.getDbClient(), formatter, userSession);
   WsActionTester tester = new WsActionTester(underTest);