private Users.SearchWsResponse doHandle(SearchRequest request) { SearchOptions options = new SearchOptions().setPage(request.getPage(), request.getPageSize()); List<String> fields = request.getPossibleFields(); SearchResult<UserDoc> result = userIndex.search(UserQuery.builder().setTextQuery(request.getQuery()).build(), options); try (DbSession dbSession = dbClient.openSession(false)) { List<String> logins = result.getDocs().stream().map(UserDoc::login).collect(toList()); Multimap<String, String> groupsByLogin = dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, logins); List<UserDto> users = dbClient.userDao().selectByOrderedLogins(dbSession, logins); Map<String, Integer> tokenCountsByLogin = dbClient.userTokenDao().countTokensByUsers(dbSession, users); Paging paging = forPageIndex(request.getPage()).withPageSize(request.getPageSize()).andTotal((int) result.getTotal()); return buildResponse(users, groupsByLogin, tokenCountsByLogin, fields, paging); } }
public SearchResult<UserDoc> search(UserQuery userQuery, SearchOptions options) { SearchRequestBuilder request = esClient.prepareSearch(UserIndexDefinition.INDEX_TYPE_USER) .setSize(options.getLimit()) .setFrom(options.getOffset()) .addSort(FIELD_NAME, SortOrder.ASC); BoolQueryBuilder filter = boolQuery().must(termQuery(FIELD_ACTIVE, true)); userQuery.getOrganizationUuid() .ifPresent(o -> filter.must(termQuery(FIELD_ORGANIZATION_UUIDS, o))); userQuery.getExcludedOrganizationUuid() .ifPresent(o -> filter.mustNot(termQuery(FIELD_ORGANIZATION_UUIDS, o))); QueryBuilder esQuery = matchAllQuery(); Optional<String> textQuery = userQuery.getTextQuery(); if (textQuery.isPresent()) { esQuery = QueryBuilders.multiMatchQuery(textQuery.get(), FIELD_LOGIN, USER_SEARCH_GRAMS_ANALYZER.subField(FIELD_LOGIN), FIELD_NAME, USER_SEARCH_GRAMS_ANALYZER.subField(FIELD_NAME), FIELD_EMAIL, USER_SEARCH_GRAMS_ANALYZER.subField(FIELD_EMAIL)) .operator(Operator.AND); } request.setQuery(boolQuery().must(esQuery).filter(filter)); return new SearchResult<>(request.get(), UserDoc::new, system2.getDefaultTimeZone()); }
@Test public void searchUsers() { es.putDocuments(INDEX_TYPE_USER, newUser(USER1_LOGIN, asList("user_1", "u1")).setEmail("email1")); es.putDocuments(INDEX_TYPE_USER, newUser(USER2_LOGIN, Collections.emptyList()).setEmail("email2")); assertThat(underTest.search(userQuery.build(), new SearchOptions()).getDocs()).hasSize(2); assertThat(underTest.search(userQuery.setTextQuery("user").build(), new SearchOptions()).getDocs()).hasSize(2); assertThat(underTest.search(userQuery.setTextQuery("ser").build(), new SearchOptions()).getDocs()).hasSize(2); assertThat(underTest.search(userQuery.setTextQuery(USER1_LOGIN).build(), new SearchOptions()).getDocs()).hasSize(1); assertThat(underTest.search(userQuery.setTextQuery(USER2_LOGIN).build(), new SearchOptions()).getDocs()).hasSize(1); assertThat(underTest.search(userQuery.setTextQuery("mail").build(), new SearchOptions()).getDocs()).hasSize(2); assertThat(underTest.search(userQuery.setTextQuery("EMAIL1").build(), new SearchOptions()).getDocs()).hasSize(1); }
private static Common.Paging buildWsPaging(Request request, SearchResult<UserDoc> searchResults) { return Common.Paging.newBuilder() .setPageIndex(request.mandatoryParamAsInt(Param.PAGE)) .setPageSize(request.mandatoryParamAsInt(Param.PAGE_SIZE)) .setTotal((int) searchResults.getTotal()) .build(); }
@Test public void search_users_filter_by_excluded_organization_uuid() { es.putDocuments(INDEX_TYPE_USER, newUser(USER1_LOGIN, asList("user_1", "u1")).setEmail("email1") .setOrganizationUuids(newArrayList("O1", "O2"))); es.putDocuments(INDEX_TYPE_USER, newUser(USER2_LOGIN, emptyList()).setEmail("email2") .setOrganizationUuids(newArrayList("O2"))); assertThat(underTest.search(userQuery.setExcludedOrganizationUuid("O42").build(), new SearchOptions()).getDocs()).hasSize(2); assertThat(underTest.search(userQuery.setExcludedOrganizationUuid("O2").build(), new SearchOptions()).getDocs()).isEmpty(); assertThat(underTest.search(userQuery.setExcludedOrganizationUuid("O1").build(), new SearchOptions()).getDocs()).hasSize(1); }
public TelemetryData load() { TelemetryData.Builder data = TelemetryData.builder(); data.setServerId(server.getId()); data.setVersion(server.getVersion()); data.setEdition(editionProvider.get()); ofNullable(licenseReader) .flatMap(reader -> licenseReader.read()) .ifPresent(license -> data.setLicenseType(license.getType())); Function<PluginInfo, String> getVersion = plugin -> plugin.getVersion() == null ? "undefined" : plugin.getVersion().getName(); Map<String, String> plugins = pluginRepository.getPluginInfos().stream().collect(MoreCollectors.uniqueIndex(PluginInfo::getKey, getVersion)); data.setPlugins(plugins); long userCount = userIndex.search(UserQuery.builder().build(), new SearchOptions().setLimit(1)).getTotal(); data.setUserCount(userCount); ProjectMeasuresStatistics projectMeasuresStatistics = projectMeasuresIndex.searchTelemetryStatistics(); data.setProjectMeasuresStatistics(projectMeasuresStatistics); try (DbSession dbSession = dbClient.openSession(false)) { data.setDatabase(loadDatabaseMetadata(dbSession)); data.setUsingBranches(dbClient.branchDao().hasNonMainBranches(dbSession)); SumNclocDbQuery query = SumNclocDbQuery.builder() .setOnlyPrivateProjects(false) .setOrganizationUuid(defaultOrganizationProvider.get().getUuid()) .build(); data.setNcloc(dbClient.liveMeasureDao().sumNclocOfBiggestLongLivingBranch(dbSession, query)); } return data.build(); }
private Users.SearchWsResponse doHandle(SearchRequest request) { SearchOptions options = new SearchOptions().setPage(request.getPage(), request.getPageSize()); List<String> fields = request.getPossibleFields(); SearchResult<UserDoc> result = userIndex.search(UserQuery.builder().setTextQuery(request.getQuery()).build(), options); try (DbSession dbSession = dbClient.openSession(false)) { List<String> logins = result.getDocs().stream().map(UserDoc::login).collect(toList()); Multimap<String, String> groupsByLogin = dbClient.groupMembershipDao().selectGroupsByLogins(dbSession, logins); List<UserDto> users = dbClient.userDao().selectByOrderedLogins(dbSession, logins); Map<String, Integer> tokenCountsByLogin = dbClient.userTokenDao().countTokensByUsers(dbSession, users); Paging paging = forPageIndex(request.getPage()).withPageSize(request.getPageSize()).andTotal((int) result.getTotal()); return buildResponse(users, groupsByLogin, tokenCountsByLogin, fields, paging); } }
@Override public void handle(Request request, Response response) throws Exception { try (DbSession dbSession = dbClient.openSession(false)) { OrganizationDto organization = getOrganization(dbSession, request.param("organization")); userSession.checkMembership(organization); UserQuery.Builder userQuery = buildUserQuery(request, organization); SearchOptions searchOptions = buildSearchOptions(request); SearchResult<UserDoc> searchResults = userIndex.search(userQuery.build(), searchOptions); List<String> orderedLogins = searchResults.getDocs().stream().map(UserDoc::login).collect(MoreCollectors.toList()); List<UserDto> users = dbClient.userDao().selectByLogins(dbSession, orderedLogins).stream() .sorted(Ordering.explicit(orderedLogins).onResultOf(UserDto::getLogin)) .collect(MoreCollectors.toList()); Multiset<String> groupCountByLogin = null; if (userSession.hasPermission(ADMINISTER, organization)) { groupCountByLogin = dbClient.groupMembershipDao().countGroupByLoginsAndOrganization(dbSession, orderedLogins, organization.getUuid()); } Common.Paging wsPaging = buildWsPaging(request, searchResults); SearchMembersWsResponse wsResponse = buildResponse(users, wsPaging, groupCountByLogin); writeProtobuf(wsResponse, request, response); } }
@Test public void create_add_current_user_as_member_of_organization() throws OrganizationUpdater.KeyConflictException { UserDto user = db.users().insertUser(); builtInQProfileRepositoryRule.initialize(); db.qualityGates().insertBuiltInQualityGate(); OrganizationDto result = underTest.create(dbSession, user, FULL_POPULATED_NEW_ORGANIZATION, EMPTY_ORGANIZATION_CONSUMER); assertThat(dbClient.organizationMemberDao().select(dbSession, result.getUuid(), user.getId())).isPresent(); assertThat(userIndex.search(UserQuery.builder().setOrganizationUuid(result.getUuid()).setTextQuery(user.getLogin()).build(), new SearchOptions()).getTotal()).isEqualTo(1L); }
public SearchResult<TestDoc> searchByTestFileUuid(String testFileUuid, SearchOptions searchOptions) { SearchRequestBuilder searchRequest = client.prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST) .setSize(searchOptions.getLimit()) .setFrom(searchOptions.getOffset()) .setQuery(boolQuery().must(matchAllQuery()).filter(termQuery(FIELD_FILE_UUID, testFileUuid))); return new SearchResult<>(searchRequest.get(), TestDoc::new, system2.getDefaultTimeZone()); }
try (DbSession dbSession = dbClient.openSession(false)) { tests = searchTests(dbSession, testUuid, testFileUuid, testFileKey, sourceFileUuid, sourceFileKey, branch, pullRequest, sourceFileLineNumber, searchOptions); componentsByTestFileUuid = buildComponentsByTestFileUuid(dbSession, tests.getDocs()); .setPageIndex(searchOptions.getPage()) .setPageSize(searchOptions.getLimit()) .setTotal((int) tests.getTotal()) .build()); for (TestDoc testDoc : tests.getDocs()) { Tests.Test.Builder testBuilder = Tests.Test.newBuilder(); testBuilder.setId(testDoc.testUuid());
@Test public void search_users_filter_by_organization_uuid() { es.putDocuments(INDEX_TYPE_USER, newUser(USER1_LOGIN, asList("user_1", "u1")).setEmail("email1") .setOrganizationUuids(newArrayList("O1", "O2"))); es.putDocuments(INDEX_TYPE_USER, newUser(USER2_LOGIN, emptyList()).setEmail("email2") .setOrganizationUuids(newArrayList("O2"))); assertThat(underTest.search(userQuery.setOrganizationUuid("O42").build(), new SearchOptions()).getDocs()).isEmpty(); assertThat(underTest.search(userQuery.setOrganizationUuid("O2").build(), new SearchOptions()).getDocs()).extracting(UserDoc::login).containsOnly(USER1_LOGIN, USER2_LOGIN); assertThat(underTest.search(userQuery.setOrganizationUuid("O1").build(), new SearchOptions()).getDocs()).extracting(UserDoc::login).containsOnly(USER1_LOGIN); }
@Test public void delete_members_of_specified_organization() { OrganizationDto org = db.organizations().insert(); OrganizationDto otherOrg = db.organizations().insert(); UserDto user1 = db.users().insertUser(); UserDto user2 = db.users().insertUser(); db.organizations().addMember(org, user1); db.organizations().addMember(otherOrg, user1); db.organizations().addMember(org, user2); userIndexer.commitAndIndex(db.getSession(), asList(user1, user2)); logInAsAdministrator(org); sendRequest(org); verifyOrganizationDoesNotExist(org); assertThat(db.getDbClient().organizationMemberDao().select(db.getSession(), org.getUuid(), user1.getId())).isNotPresent(); assertThat(db.getDbClient().organizationMemberDao().select(db.getSession(), org.getUuid(), user2.getId())).isNotPresent(); assertThat(db.getDbClient().organizationMemberDao().select(db.getSession(), otherOrg.getUuid(), user1.getId())).isPresent(); assertThat(userIndex.search(UserQuery.builder().setOrganizationUuid(org.getUuid()).build(), new SearchOptions()).getTotal()).isEqualTo(0); assertThat(userIndex.search(UserQuery.builder().setOrganizationUuid(otherOrg.getUuid()).build(), new SearchOptions()).getTotal()).isEqualTo(1); verify(projectLifeCycleListeners).onProjectsDeleted(emptySet()); }
public SearchResult<TestDoc> searchByTestUuid(String testUuid, SearchOptions searchOptions) { SearchRequestBuilder searchRequest = client.prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST) .setSize(searchOptions.getLimit()) .setFrom(searchOptions.getOffset()) .setQuery(boolQuery().must(matchAllQuery()).filter(termQuery(FIELD_TEST_UUID, testUuid))); return new SearchResult<>(searchRequest.get(), TestDoc::new, system2.getDefaultTimeZone()); } }
private void assertMember(String organizationUuid, UserDto user) { assertThat(dbClient.organizationMemberDao().select(dbSession, organizationUuid, user.getId())).isPresent(); assertThat(userIndex.search(UserQuery.builder() .setOrganizationUuid(organizationUuid) .setTextQuery(user.getLogin()) .build(), new SearchOptions()).getDocs()) .hasSize(1); assertMemberInIndex(organizationUuid, user, true); }
private static Common.Paging buildWsPaging(Request request, SearchResult<UserDoc> searchResults) { return Common.Paging.newBuilder() .setPageIndex(request.mandatoryParamAsInt(Param.PAGE)) .setPageSize(request.mandatoryParamAsInt(Param.PAGE_SIZE)) .setTotal((int) searchResults.getTotal()) .build(); }
public SearchResult<TestDoc> searchBySourceFileUuidAndLineNumber(String sourceFileUuid, int lineNumber, SearchOptions searchOptions) { SearchRequestBuilder searchRequest = client.prepareSearch(TestIndexDefinition.INDEX_TYPE_TEST) .setSize(searchOptions.getLimit()) .setFrom(searchOptions.getOffset()) .setQuery(nestedQuery( FIELD_COVERED_FILES, boolQuery() .must(termQuery(FIELD_COVERED_FILES + "." + FIELD_COVERED_FILE_UUID, sourceFileUuid)) .must(termQuery(FIELD_COVERED_FILES + "." + FIELD_COVERED_FILE_LINES, lineNumber)), ScoreMode.Avg)); return new SearchResult<>(searchRequest.get(), TestDoc::new, system2.getDefaultTimeZone()); }
@Test public void add_member_in_db_and_user_index() { OrganizationDto organization = db.organizations().insert(); db.users().insertDefaultGroup(organization, "default"); UserDto user = db.users().insertUser(); call(organization.getKey(), user.getLogin()); assertMember(organization.getUuid(), user.getId()); List<UserDoc> userDocs = userIndex.search(UserQuery.builder().build(), new SearchOptions()).getDocs(); assertThat(userDocs).hasSize(1); assertThat(userDocs.get(0).organizationUuids()).containsOnly(organization.getUuid()); }
public TelemetryData load() { TelemetryData.Builder data = TelemetryData.builder(); data.setServerId(server.getId()); data.setVersion(server.getVersion()); data.setEdition(editionProvider.get()); Function<PluginInfo, String> getVersion = plugin -> plugin.getVersion() == null ? "undefined" : plugin.getVersion().getName(); Map<String, String> plugins = pluginRepository.getPluginInfos().stream().collect(MoreCollectors.uniqueIndex(PluginInfo::getKey, getVersion)); data.setPlugins(plugins); long userCount = userIndex.search(UserQuery.builder().build(), new SearchOptions().setLimit(1)).getTotal(); data.setUserCount(userCount); ProjectMeasuresStatistics projectMeasuresStatistics = projectMeasuresIndex.searchTelemetryStatistics(); data.setProjectMeasuresStatistics(projectMeasuresStatistics); try (DbSession dbSession = dbClient.openSession(false)) { data.setDatabase(loadDatabaseMetadata(dbSession)); data.setUsingBranches(dbClient.branchDao().hasNonMainBranches(dbSession)); data.setNcloc(dbClient.liveMeasureDao().sumNclocOfBiggestLongLivingBranch(dbSession)); } return data.build(); }
public SearchResult<UserDoc> search(UserQuery userQuery, SearchOptions options) { SearchRequestBuilder request = esClient.prepareSearch(UserIndexDefinition.INDEX_TYPE_USER) .setSize(options.getLimit()) .setFrom(options.getOffset()) .addSort(FIELD_NAME, SortOrder.ASC); BoolQueryBuilder filter = boolQuery().must(termQuery(FIELD_ACTIVE, true)); userQuery.getOrganizationUuid() .ifPresent(o -> filter.must(termQuery(FIELD_ORGANIZATION_UUIDS, o))); userQuery.getExcludedOrganizationUuid() .ifPresent(o -> filter.mustNot(termQuery(FIELD_ORGANIZATION_UUIDS, o))); QueryBuilder esQuery = matchAllQuery(); Optional<String> textQuery = userQuery.getTextQuery(); if (textQuery.isPresent()) { esQuery = QueryBuilders.multiMatchQuery(textQuery.get(), FIELD_LOGIN, USER_SEARCH_GRAMS_ANALYZER.subField(FIELD_LOGIN), FIELD_NAME, USER_SEARCH_GRAMS_ANALYZER.subField(FIELD_NAME), FIELD_EMAIL, USER_SEARCH_GRAMS_ANALYZER.subField(FIELD_EMAIL)) .operator(Operator.AND); } request.setQuery(boolQuery().must(esQuery).filter(filter)); return new SearchResult<>(request.get(), UserDoc::new, system2.getDefaultTimeZone()); }