private CeTaskQuery buildQuery(DbSession dbSession, Request request, @Nullable ComponentDto component) { CeTaskQuery query = new CeTaskQuery(); query.setType(request.getType()); query.setOnlyCurrents(parseBoolean(request.getOnlyCurrents())); Date minSubmittedAt = parseStartingDateOrDateTime(request.getMinSubmittedAt()); query.setMinSubmittedAt(minSubmittedAt == null ? null : minSubmittedAt.getTime()); Date maxExecutedAt = parseEndingDateOrDateTime(request.getMaxExecutedAt()); query.setMaxExecutedAt(maxExecutedAt == null ? null : maxExecutedAt.getTime()); List<String> statuses = request.getStatus(); if (statuses != null && !statuses.isEmpty()) { query.setStatuses(request.getStatus()); } String componentQuery = request.getQ(); if (component != null) { query.setMainComponentUuid(component.uuid()); } else if (componentQuery != null) { query.setMainComponentUuids(loadComponents(dbSession, componentQuery).stream() .map(ComponentDto::uuid) .collect(toList())); } return query; }
public int countByQuery(DbSession dbSession, CeTaskQuery query) { if (query.isShortCircuitedByMainComponentUuids() || query.isOnlyCurrents() || query.getMaxExecutedAt() != null) { return 0; } return mapper(dbSession).countByQuery(query); }
private static Request toSearchWsRequest(org.sonar.api.server.ws.Request request) { Request activityWsRequest = new Request() .setComponentId(request.param(PARAM_COMPONENT_ID)) .setQ(defaultString(request.param(TEXT_QUERY), request.param(PARAM_COMPONENT_QUERY))) .setStatus(request.paramAsStrings(PARAM_STATUS)) .setType(request.param(PARAM_TYPE)) .setMinSubmittedAt(request.param(PARAM_MIN_SUBMITTED_AT)) .setMaxExecutedAt(request.param(PARAM_MAX_EXECUTED_AT)) .setOnlyCurrents(String.valueOf(request.paramAsBoolean(PARAM_ONLY_CURRENTS))) .setPs(String.valueOf(request.mandatoryParamAsInt(Param.PAGE_SIZE))); checkRequest(activityWsRequest.getComponentId() == null || activityWsRequest.getQ() == null, "%s and %s must not be set at the same time", PARAM_COMPONENT_ID, PARAM_COMPONENT_QUERY); return activityWsRequest; }
@Test public void test_selectByQuery() { insert("TASK_1", REPORT, MAINCOMPONENT_1, SUCCESS); insert("TASK_2", REPORT, MAINCOMPONENT_1, FAILED); insert("TASK_3", REPORT, MAINCOMPONENT_2, SUCCESS); insert("TASK_4", "views", null, SUCCESS); // no filters CeTaskQuery query = new CeTaskQuery().setStatuses(Collections.emptyList()); List<CeActivityDto> dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(10)); assertThat(dtos).extracting("uuid").containsExactly("TASK_4", "TASK_3", "TASK_2", "TASK_1"); // select by component uuid query = new CeTaskQuery().setMainComponentUuid(MAINCOMPONENT_1); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_2", "TASK_1"); // select by status query = new CeTaskQuery().setStatuses(singletonList(SUCCESS.name())); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_4", "TASK_3", "TASK_1"); // select by type query = new CeTaskQuery().setType(REPORT); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_3", "TASK_2", "TASK_1"); query = new CeTaskQuery().setType("views"); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_4"); // select by multiple conditions query = new CeTaskQuery().setType(REPORT).setOnlyCurrents(true).setMainComponentUuid(MAINCOMPONENT_1); dtos = underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100)); assertThat(dtos).extracting("uuid").containsExactly("TASK_2"); }
private CeTaskQuery buildQuery(DbSession dbSession, Request request, @Nullable ComponentDto component) { CeTaskQuery query = new CeTaskQuery(); query.setType(request.getType()); query.setOnlyCurrents(parseBoolean(request.getOnlyCurrents())); Date minSubmittedAt = parseStartingDateOrDateTime(request.getMinSubmittedAt()); query.setMinSubmittedAt(minSubmittedAt == null ? null : minSubmittedAt.getTime()); Date maxExecutedAt = parseEndingDateOrDateTime(request.getMaxExecutedAt()); query.setMaxExecutedAt(maxExecutedAt == null ? null : maxExecutedAt.getTime()); List<String> statuses = request.getStatus(); if (statuses != null && !statuses.isEmpty()) { query.setStatuses(request.getStatus()); } String componentQuery = request.getQ(); if (component != null) { query.setComponentUuid(component.uuid()); } else if (componentQuery != null) { query.setComponentUuids(loadComponents(dbSession, componentQuery).stream() .map(ComponentDto::uuid) .collect(toList())); } return query; }
@Override public void handle(Request wsRequest, Response wsResponse) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto component = loadComponent(dbSession, wsRequest); userSession.checkComponentPermission(UserRole.USER, component); List<CeQueueDto> queueDtos = dbClient.ceQueueDao().selectByMainComponentUuid(dbSession, component.uuid()); CeTaskQuery activityQuery = new CeTaskQuery() .setMainComponentUuid(component.uuid()) .setOnlyCurrents(true); List<CeActivityDto> activityDtos = dbClient.ceActivityDao().selectByQuery(dbSession, activityQuery, forPage(1).andSize(1)); Ce.ComponentResponse.Builder wsResponseBuilder = ComponentResponse.newBuilder(); wsResponseBuilder.addAllQueue(formatter.formatQueue(dbSession, queueDtos)); if (activityDtos.size() == 1) { wsResponseBuilder.setCurrent(formatter.formatActivity(dbSession, activityDtos.get(0), null, emptyList())); } writeProtobuf(wsResponseBuilder.build(), wsRequest, wsResponse); } }
/** * componentUuid is not null but is set to empty * --> no results */ @Test public void short_circuited_if_empty_component_uuid_filter() { underTest.setMainComponentUuids(Collections.emptyList()); assertThat(underTest.getMainComponentUuids()).isEmpty(); assertThat(underTest.isShortCircuitedByMainComponentUuids()).isTrue(); }
@Test public void selectByQuery_populates_hasScannerContext_flag() { insert("TASK_1", REPORT, MAINCOMPONENT_1, SUCCESS); CeActivityDto dto2 = insert("TASK_2", REPORT, MAINCOMPONENT_2, SUCCESS); insertScannerContext(dto2.getUuid()); CeActivityDto dto = underTest.selectByQuery(db.getSession(), new CeTaskQuery().setMainComponentUuid(MAINCOMPONENT_1), forPage(1).andSize(100)).iterator().next(); assertThat(dto.isHasScannerContext()).isFalse(); dto = underTest.selectByQuery(db.getSession(), new CeTaskQuery().setMainComponentUuid(MAINCOMPONENT_2), forPage(1).andSize(100)).iterator().next(); assertThat(dto.isHasScannerContext()).isTrue(); }
public int countByQuery(DbSession dbSession, CeTaskQuery query) { if (query.isShortCircuitedByComponentUuids() || query.isOnlyCurrents() || query.getMaxExecutedAt() != null) { return 0; } return mapper(dbSession).countByQuery(query); }
@Override public void handle(Request wsRequest, Response wsResponse) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { ComponentDto component = loadComponent(dbSession, wsRequest); userSession.checkComponentPermission(UserRole.USER, component); List<CeQueueDto> queueDtos = dbClient.ceQueueDao().selectByComponentUuid(dbSession, component.uuid()); CeTaskQuery activityQuery = new CeTaskQuery() .setComponentUuid(component.uuid()) .setOnlyCurrents(true); List<CeActivityDto> activityDtos = dbClient.ceActivityDao().selectByQuery(dbSession, activityQuery, forPage(1).andSize(1)); Ce.ComponentResponse.Builder wsResponseBuilder = ComponentResponse.newBuilder(); wsResponseBuilder.addAllQueue(formatter.formatQueue(dbSession, queueDtos)); if (activityDtos.size() == 1) { wsResponseBuilder.setCurrent(formatter.formatActivity(dbSession, activityDtos.get(0), null)); } writeProtobuf(wsResponseBuilder.build(), wsRequest, wsResponse); } }
@Test public void filter_on_component_uuid() { underTest.setMainComponentUuid("UUID1"); assertThat(underTest.getMainComponentUuids()).containsOnly("UUID1"); assertThat(underTest.isShortCircuitedByMainComponentUuids()).isFalse(); }
@Test public void selectByQuery_no_results_if_shortcircuited_by_component_uuids() { insert("TASK_1", REPORT, MAINCOMPONENT_1, SUCCESS); CeTaskQuery query = new CeTaskQuery(); query.setMainComponentUuids(Collections.emptyList()); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(1))).isEmpty(); }
@Test public void no_filter_on_component_uuids_by_default() { assertThat(underTest.getMainComponentUuids()).isNull(); assertThat(underTest.isShortCircuitedByMainComponentUuids()).isFalse(); }
private List<String> selectPageOfUuids(Pagination pagination) { return underTest.selectByQuery(db.getSession(), new CeTaskQuery(), pagination).stream() .map(CeActivityToUuid.INSTANCE::apply) .collect(MoreCollectors.toList()); }
/** * Ordered by id desc -> newest to oldest */ public List<CeActivityDto> selectByQuery(DbSession dbSession, CeTaskQuery query, Pagination pagination) { if (query.isShortCircuitedByMainComponentUuids()) { return Collections.emptyList(); } return mapper(dbSession).selectByQuery(query, pagination); }
CeTaskQuery query = new CeTaskQuery().setStatuses(Collections.emptyList()); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(10))) .extracting(CeActivityDto::getUuid, CeActivityDto::getWarningCount) query = new CeTaskQuery().setMainComponentUuid("PROJECT_1"); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100))) .extracting(CeActivityDto::getUuid, CeActivityDto::getWarningCount) query = new CeTaskQuery().setStatuses(singletonList(SUCCESS.name())); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100))) .extracting(CeActivityDto::getUuid, CeActivityDto::getWarningCount) query = new CeTaskQuery().setType(REPORT); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100))) .extracting(CeActivityDto::getUuid, CeActivityDto::getWarningCount) .containsExactly(tuple("TASK_3", 1), tuple("TASK_2", 3), tuple("TASK_1", moreThan1)); query = new CeTaskQuery().setType("views"); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100))) .extracting(CeActivityDto::getUuid, CeActivityDto::getWarningCount) query = new CeTaskQuery().setType(REPORT).setOnlyCurrents(true).setMainComponentUuid("PROJECT_1"); assertThat(underTest.selectByQuery(db.getSession(), query, forPage(1).andSize(100))) .extracting(CeActivityDto::getUuid, CeActivityDto::getWarningCount)
private static Request toSearchWsRequest(org.sonar.api.server.ws.Request request) { Request activityWsRequest = new Request() .setComponentId(request.param(PARAM_COMPONENT_ID)) .setQ(defaultString(request.param(Param.TEXT_QUERY), request.param(PARAM_COMPONENT_QUERY))) .setStatus(request.paramAsStrings(PARAM_STATUS)) .setType(request.param(PARAM_TYPE)) .setMinSubmittedAt(request.param(PARAM_MIN_SUBMITTED_AT)) .setMaxExecutedAt(request.param(PARAM_MAX_EXECUTED_AT)) .setOnlyCurrents(String.valueOf(request.paramAsBoolean(PARAM_ONLY_CURRENTS))) .setPs(String.valueOf(request.mandatoryParamAsInt(Param.PAGE_SIZE))); checkRequest(activityWsRequest.getComponentId() == null || activityWsRequest.getQ() == null, "%s and %s must not be set at the same time", PARAM_COMPONENT_ID, PARAM_COMPONENT_QUERY); return activityWsRequest; }
@Test public void filter_on_multiple_component_uuids() { underTest.setMainComponentUuids(asList("UUID1", "UUID2")); assertThat(underTest.getMainComponentUuids()).containsOnly("UUID1", "UUID2"); assertThat(underTest.isShortCircuitedByMainComponentUuids()).isFalse(); }
@Test public void selectByQuery_does_not_populate_errorStacktrace_field() { insert("TASK_1", REPORT, MAINCOMPONENT_1, FAILED); underTest.insert(db.getSession(), createActivityDto("TASK_2", REPORT, COMPONENT_1, MAINCOMPONENT_1, FAILED).setErrorStacktrace("some stack")); List<CeActivityDto> dtos = underTest.selectByQuery(db.getSession(), new CeTaskQuery().setMainComponentUuid(MAINCOMPONENT_1), forPage(1).andSize(100)); assertThat(dtos) .hasSize(2) .extracting("errorStacktrace").containsOnly((String) null); }
public List<CeQueueDto> selectByQueryInDescOrder(DbSession dbSession, CeTaskQuery query, int pageSize) { if (query.isShortCircuitedByComponentUuids() || query.isOnlyCurrents() || query.getMaxExecutedAt() != null) { return emptyList(); } return mapper(dbSession).selectByQueryInDescOrder(query, new RowBounds(0, pageSize)); }