package org.sonar.server.ce.ws;
import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
-import java.util.stream.Collectors;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import org.sonar.api.utils.DateUtils;
import org.sonar.api.utils.System2;
+import org.sonar.core.util.stream.Collectors;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.ce.CeActivityDto;
import org.sonar.db.organization.OrganizationDto;
import org.sonarqube.ws.WsCe;
+import static com.google.common.base.Preconditions.checkState;
+import static org.sonar.api.utils.DateUtils.formatDateTime;
+import static org.sonar.core.util.Protobuf.setNullable;
+
/**
* Converts {@link CeActivityDto} and {@link CeQueueDto} to the protobuf objects
* used to write WS responses (see ws-ce.proto in module sonar-ws)
public List<WsCe.Task> formatQueue(DbSession dbSession, List<CeQueueDto> dtos) {
ComponentDtoCache cache = ComponentDtoCache.forQueueDtos(dbClient, dbSession, dtos);
- return dtos.stream().map(input -> formatQueue(input, cache)).collect(Collectors.toList());
+ return dtos.stream().map(input -> formatQueue(input, cache)).collect(Collectors.toList(dtos.size()));
}
public WsCe.Task formatQueue(DbSession dbSession, CeQueueDto dto) {
WsCe.Task.Builder builder = WsCe.Task.newBuilder();
String organizationKey = componentDtoCache.getOrganizationKey(dto.getComponentUuid());
// FIXME organization field should be set from the CeQueueDto rather than from the ComponentDto
- if (organizationKey != null) {
- builder.setOrganization(organizationKey);
+ setNullable(organizationKey, builder::setOrganization);
+ if (dto.getComponentUuid() != null) {
+ builder.setComponentId(dto.getComponentUuid());
+ buildComponent(builder, componentDtoCache.getComponent(dto.getComponentUuid()));
}
builder.setId(dto.getUuid());
builder.setStatus(WsCe.TaskStatus.valueOf(dto.getStatus().name()));
builder.setType(dto.getTaskType());
builder.setLogs(false);
- if (dto.getComponentUuid() != null) {
- builder.setComponentId(dto.getComponentUuid());
- buildComponent(builder, componentDtoCache.getComponent(dto.getComponentUuid()));
- }
- if (dto.getSubmitterLogin() != null) {
- builder.setSubmitterLogin(dto.getSubmitterLogin());
- }
- builder.setSubmittedAt(DateUtils.formatDateTime(new Date(dto.getCreatedAt())));
- if (dto.getStartedAt() != null) {
- builder.setStartedAt(DateUtils.formatDateTime(new Date(dto.getStartedAt())));
- }
- //
- Long executionTimeMs = computeExecutionTimeMs(dto);
- if (executionTimeMs != null) {
- builder.setExecutionTimeMs(executionTimeMs);
- }
+ setNullable(dto.getSubmitterLogin(), builder::setSubmitterLogin);
+ builder.setSubmittedAt(formatDateTime(new Date(dto.getCreatedAt())));
+ setNullable(dto.getStartedAt(), builder::setStartedAt, DateUtils::formatDateTime);
+ setNullable(computeExecutionTimeMs(dto), builder::setExecutionTimeMs);
return builder.build();
}
public List<WsCe.Task> formatActivity(DbSession dbSession, List<CeActivityDto> dtos) {
ComponentDtoCache cache = ComponentDtoCache.forActivityDtos(dbClient, dbSession, dtos);
- return dtos.stream().map(input -> formatActivity(input, cache, null)).collect(Collectors.toList());
+ return dtos.stream()
+ .map(input -> formatActivity(input, cache, null))
+ .collect(Collectors.toList(dtos.size()));
}
private static WsCe.Task formatActivity(CeActivityDto dto, ComponentDtoCache componentDtoCache, @Nullable String scannerContext) {
WsCe.Task.Builder builder = WsCe.Task.newBuilder();
String organizationKey = componentDtoCache.getOrganizationKey(dto.getComponentUuid());
// FIXME organization field should be set from the CeActivityDto rather than from the ComponentDto
- if (organizationKey != null) {
- builder.setOrganization(organizationKey);
- }
+ setNullable(organizationKey, builder::setOrganization);
builder.setId(dto.getUuid());
builder.setStatus(WsCe.TaskStatus.valueOf(dto.getStatus().name()));
builder.setType(dto.getTaskType());
builder.setComponentId(dto.getComponentUuid());
buildComponent(builder, componentDtoCache.getComponent(dto.getComponentUuid()));
}
- if (dto.getAnalysisUuid() != null) {
- builder.setAnalysisId(dto.getAnalysisUuid());
- }
- if (dto.getSubmitterLogin() != null) {
- builder.setSubmitterLogin(dto.getSubmitterLogin());
- }
- builder.setSubmittedAt(DateUtils.formatDateTime(new Date(dto.getSubmittedAt())));
- if (dto.getStartedAt() != null) {
- builder.setStartedAt(DateUtils.formatDateTime(new Date(dto.getStartedAt())));
- }
- if (dto.getExecutedAt() != null) {
- builder.setExecutedAt(DateUtils.formatDateTime(new Date(dto.getExecutedAt())));
- }
- if (dto.getExecutionTimeMs() != null) {
- builder.setExecutionTimeMs(dto.getExecutionTimeMs());
- }
- if (dto.getErrorMessage() != null) {
- builder.setErrorMessage(dto.getErrorMessage());
- }
- if (dto.getErrorStacktrace() != null) {
- builder.setErrorStacktrace(dto.getErrorStacktrace());
- }
- if (scannerContext != null) {
- builder.setScannerContext(scannerContext);
- }
+ setNullable(dto.getAnalysisUuid(), builder::setAnalysisId);
+ setNullable(dto.getSubmitterLogin(), builder::setSubmitterLogin);
+ builder.setSubmittedAt(formatDateTime(new Date(dto.getSubmittedAt())));
+ setNullable(dto.getStartedAt(), builder::setStartedAt, DateUtils::formatDateTime);
+ setNullable(dto.getExecutedAt(), builder::setExecutedAt, DateUtils::formatDateTime);
+ setNullable(dto.getExecutionTimeMs(), builder::setExecutionTimeMs);
+ setNullable(dto.getErrorMessage(), builder::setErrorMessage);
+ setNullable(dto.getErrorStacktrace(), builder::setErrorStacktrace);
+ setNullable(scannerContext, builder::setScannerContext);
builder.setHasScannerContext(dto.isHasScannerContext());
return builder.build();
}
static ComponentDtoCache forQueueDtos(DbClient dbClient, DbSession dbSession, Collection<CeQueueDto> ceQueueDtos) {
Map<String, ComponentDto> componentsByUuid = dbClient.componentDao().selectByUuids(dbSession, uuidOfCeQueueDtos(ceQueueDtos))
.stream()
- .collect(org.sonar.core.util.stream.Collectors.uniqueIndex(ComponentDto::uuid));
+ .collect(Collectors.uniqueIndex(ComponentDto::uuid));
return new ComponentDtoCache(componentsByUuid, buildOrganizationsByUuid(dbClient, dbSession, componentsByUuid));
}
.filter(Objects::nonNull)
.map(CeQueueDto::getComponentUuid)
.filter(Objects::nonNull)
- .collect(org.sonar.core.util.stream.Collectors.toSet(ceQueueDtos.size()));
+ .collect(Collectors.toSet(ceQueueDtos.size()));
}
static ComponentDtoCache forActivityDtos(DbClient dbClient, DbSession dbSession, Collection<CeActivityDto> ceActivityDtos) {
dbSession,
uuidOfCeActivityDtos(ceActivityDtos))
.stream()
- .collect(org.sonar.core.util.stream.Collectors.uniqueIndex(ComponentDto::uuid));
+ .collect(Collectors.uniqueIndex(ComponentDto::uuid));
return new ComponentDtoCache(componentsByUuid, buildOrganizationsByUuid(dbClient, dbSession, componentsByUuid));
}
.filter(Objects::nonNull)
.map(CeActivityDto::getComponentUuid)
.filter(Objects::nonNull)
- .collect(org.sonar.core.util.stream.Collectors.toSet(ceActivityDtos.size()));
+ .collect(Collectors.toSet(ceActivityDtos.size()));
}
static ComponentDtoCache forUuid(DbClient dbClient, DbSession dbSession, String uuid) {
dbSession,
componentsByUuid.values().stream()
.map(ComponentDto::getOrganizationUuid)
- .collect(Collectors.toSet()))
+ .collect(Collectors.toSet(componentsByUuid.size())))
.stream()
- .collect(org.sonar.core.util.stream.Collectors.uniqueIndex(OrganizationDto::getUuid));
+ .collect(Collectors.uniqueIndex(OrganizationDto::getUuid));
}
@CheckForNull
}
String organizationUuid = componentDto.getOrganizationUuid();
OrganizationDto organizationDto = organizationsByUuid.get(organizationUuid);
- Preconditions.checkState(organizationDto != null, "Organization with uuid '%s' not found", organizationUuid);
+ checkState(organizationDto != null, "Organization with uuid '%s' not found", organizationUuid);
return organizationDto.getKey();
}
}
@Rule
public DbTester dbTester = DbTester.create(System2.INSTANCE);
- ComponentDbTester componentDb = new ComponentDbTester(dbTester);
-
- TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), System2.INSTANCE);
- ActivityAction underTest = new ActivityAction(userSession, dbTester.getDbClient(), formatter, new CeTaskProcessor[] {mock(CeTaskProcessor.class)});
- WsActionTester ws = new WsActionTester(underTest);
+ private ComponentDbTester componentDb = new ComponentDbTester(dbTester);
+ private TaskFormatter formatter = new TaskFormatter(dbTester.getDbClient(), System2.INSTANCE);
+ private ActivityAction underTest = new ActivityAction(userSession, dbTester.getDbClient(), formatter, new CeTaskProcessor[] {mock(CeTaskProcessor.class)});
+ private WsActionTester ws = new WsActionTester(underTest);
@Test
public void get_all_past_activity() {
globalAdmin();
- OrganizationDto organization1Dto = dbTester.organizations().insert();
- dbTester.components().insertProject(organization1Dto, "PROJECT_1");
- OrganizationDto organization2Dto = dbTester.organizations().insert();
- dbTester.components().insertProject(organization2Dto, "PROJECT_2");
+ OrganizationDto org1 = dbTester.organizations().insert();
+ dbTester.components().insertProject(org1, "PROJECT_1");
+ OrganizationDto org2 = dbTester.organizations().insert();
+ dbTester.components().insertProject(org2, "PROJECT_2");
insertActivity("T1", "PROJECT_1", CeActivityDto.Status.SUCCESS);
insertActivity("T2", "PROJECT_2", CeActivityDto.Status.FAILED);
assertThat(activityResponse.getTasksCount()).isEqualTo(2);
// chronological order, from newest to oldest
WsCe.Task task = activityResponse.getTasks(0);
- assertThat(task.getOrganization()).isEqualTo(organization2Dto.getKey());
+ assertThat(task.getOrganization()).isEqualTo(org2.getKey());
assertThat(task.getId()).isEqualTo("T2");
assertThat(task.getStatus()).isEqualTo(WsCe.TaskStatus.FAILED);
assertThat(task.getComponentId()).isEqualTo("PROJECT_2");
assertThat(task.getAnalysisId()).isEqualTo("U1");
assertThat(task.getExecutionTimeMs()).isEqualTo(500L);
assertThat(task.getLogs()).isFalse();
- assertThat(activityResponse.getTasks(1).getId()).isEqualTo("T1");
- assertThat(activityResponse.getTasks(1).getStatus()).isEqualTo(WsCe.TaskStatus.SUCCESS);
- assertThat(activityResponse.getTasks(1).getComponentId()).isEqualTo("PROJECT_1");
- assertThat(activityResponse.getTasks(1).getLogs()).isFalse();
-
- assertThat(activityResponse.getTasks(1).getOrganization()).isEqualTo(organization1Dto.getKey());
+ task = activityResponse.getTasks(1);
+ assertThat(task.getId()).isEqualTo("T1");
+ assertThat(task.getStatus()).isEqualTo(WsCe.TaskStatus.SUCCESS);
+ assertThat(task.getComponentId()).isEqualTo("PROJECT_1");
+ assertThat(task.getLogs()).isFalse();
+ assertThat(task.getOrganization()).isEqualTo(org1.getKey());
}
@Test
componentDb.insertProjectAndSnapshot(struts);
componentDb.insertProjectAndSnapshot(zookeeper);
componentDb.insertProjectAndSnapshot(eclipse);
- dbTester.commit();
globalAdmin();
insertActivity("T1", "P1", CeActivityDto.Status.SUCCESS);
insertActivity("T2", "P2", CeActivityDto.Status.SUCCESS);