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;
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) {
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();
}
return dto;
}
}
+
+ /**
+ * now - startedAt
+ */
+ @CheckForNull
+ Long computeExecutionTimeMs(CeQueueDto dto) {
+ Long startedAt = dto.getStartedAt();
+ if (startedAt == null) {
+ return null;
+ }
+ return system2.now() - startedAt;
+ }
}
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);
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);
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);
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;
@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() {
assertThat(wsTask.hasComponentKey()).isFalse();
assertThat(wsTask.hasComponentName()).isFalse();
assertThat(wsTask.hasExecutedAt()).isFalse();
+ assertThat(wsTask.hasStartedAt()).isFalse();
+ assertThat(wsTask.hasExecutionTimeMs()).isFalse();
}
@Test
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();
}
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();
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);