private void doIndex(Size size, @Nullable String projectUuid) { try (DbSession dbSession = dbClient.openSession(false); ProjectMeasuresIndexerIterator rowIt = ProjectMeasuresIndexerIterator.create(dbSession, projectUuid)) { BulkIndexer bulkIndexer = createBulkIndexer(size, IndexingListener.FAIL_ON_ERROR); bulkIndexer.start(); while (rowIt.hasNext()) { ProjectMeasures doc = rowIt.next(); bulkIndexer.add(newIndexRequest(toProjectMeasuresDoc(doc))); } bulkIndexer.stop(); } }
public static ProjectMeasuresIndexerIterator create(DbSession session, @Nullable String projectUuid) { List<Project> projects = selectProjects(session, projectUuid); PreparedStatement projectsStatement = createMeasuresStatement(session); return new ProjectMeasuresIndexerIterator(projectsStatement, projects); }
private static List<Project> selectProjects(DbSession session, @Nullable String projectUuid) { List<Project> projects = new ArrayList<>(); try (PreparedStatement stmt = createProjectsStatement(session, projectUuid); ResultSet rs = stmt.executeQuery()) { while (rs.next()) { String orgUuid = rs.getString(1); String uuid = rs.getString(2); String key = rs.getString(3); String name = rs.getString(4); Long analysisDate = DatabaseUtils.getLong(rs, 5); List<String> tags = readDbTags(DatabaseUtils.getString(rs, 6)); Project project = new Project(orgUuid, uuid, key, name, tags, analysisDate); projects.add(project); } return projects; } catch (SQLException e) { throw new IllegalStateException("Fail to execute request to select all projects", e); } }
private static void readMeasure(ResultSet rs, Measures measures) throws SQLException { String metricKey = rs.getString(FIELD_METRIC_NAME); Optional<Double> value = metricKey.startsWith("new_") ? getDouble(rs, FIELD_MEASURE_VARIATION) : getDouble(rs, FIELD_MEASURE_VALUE); if (value.isPresent()) { measures.addNumericMeasure(metricKey, value.get()); return; } if (ALERT_STATUS_KEY.equals(metricKey)) { readTextValue(rs, measures::setQualityGateStatus); return; } if (NCLOC_LANGUAGE_DISTRIBUTION_KEY.equals(metricKey)) { readTextValue(rs, measures::setNclocByLanguages); return; } }
public static ProjectMeasuresIndexerIterator create(DbSession session, long afterDate, @Nullable String projectUuid) { try { Map<Long, String> metrics = selectMetricKeysByIds(session); List<Project> projects = selectProjects(session, afterDate, projectUuid); PreparedStatement projectsStatement = createMeasuresStatement(session, metrics.keySet()); return new ProjectMeasuresIndexerIterator(projectsStatement, metrics, projects); } catch (SQLException e) { throw new IllegalStateException("Fail to execute request to select all project measures", e); } }
private Map<String, ProjectMeasures> createResultSetAndReturnDocsById(@Nullable String projectUuid) { ProjectMeasuresIndexerIterator it = ProjectMeasuresIndexerIterator.create(dbTester.getSession(), projectUuid); Map<String, ProjectMeasures> docsById = Maps.uniqueIndex(it, pm -> pm.getProject().getUuid()); it.close(); return docsById; } }
@Override @CheckForNull protected ProjectMeasures doNext() { if (!projects.hasNext()) { return null; } Project project = projects.next(); Measures measures = selectMeasures(project.getUuid()); return new ProjectMeasures(project, measures); }
private Measures selectMeasures(String projectUuid) { Measures measures = new Measures(); ResultSet rs = null; try { AtomicInteger index = new AtomicInteger(1); measuresStatement.setString(index.getAndIncrement(), projectUuid); METRIC_KEYS.forEach(DatabaseUtils.setStrings(measuresStatement, index::getAndIncrement)); measuresStatement.setBoolean(index.getAndIncrement(), ENABLED); rs = measuresStatement.executeQuery(); while (rs.next()) { readMeasure(rs, measures); } return measures; } catch (Exception e) { throw new IllegalStateException(String.format("Fail to execute request to select measures of project %s", projectUuid), e); } finally { DatabaseUtils.closeQuietly(rs); } }
private void readMeasure(ResultSet rs, Measures measures) throws SQLException { String metricKey = metricKeysByIds.get(rs.getLong(1)); Optional<Double> value = metricKey.startsWith("new_") ? getDouble(rs, 3) : getDouble(rs, 2); if (value.isPresent()) { measures.addNumericMeasure(metricKey, value.get()); return; } else if (ALERT_STATUS_KEY.equals(metricKey)) { String textValue = rs.getString(4); if (!rs.wasNull()) { measures.setQualityGateStatus(textValue); return; } } throw new IllegalArgumentException("Measure has no value"); }
@Override @CheckForNull protected ProjectMeasures doNext() { if (!projects.hasNext()) { return null; } Project project = projects.next(); Measures measures = selectMeasures(project.getUuid(), project.getAnalysisUuid()); return new ProjectMeasures(project, measures); }
private Measures selectMeasures(String projectUuid, @Nullable String analysisUuid) { Measures measures = new Measures(); if (analysisUuid == null || metricKeysByIds.isEmpty()) { return measures; } ResultSet rs = null; try { measuresStatement.setString(1, projectUuid); measuresStatement.setString(2, analysisUuid); rs = measuresStatement.executeQuery(); while (rs.next()) { readMeasure(rs, measures); } return measures; } catch (Exception e) { throw new IllegalStateException(String.format("Fail to execute request to select measures of project %s, analysis %s", projectUuid, analysisUuid), e); } finally { DatabaseUtils.closeQuietly(rs); } }
@Override public IndexingResult index(DbSession dbSession, Collection<EsQueueDto> items) { if (items.isEmpty()) { return new IndexingResult(); } OneToOneResilientIndexingListener listener = new OneToOneResilientIndexingListener(dbClient, dbSession, items); BulkIndexer bulkIndexer = createBulkIndexer(Size.REGULAR, listener); bulkIndexer.start(); List<String> projectUuids = items.stream().map(EsQueueDto::getDocId).collect(MoreCollectors.toArrayList(items.size())); Iterator<String> it = projectUuids.iterator(); while (it.hasNext()) { String projectUuid = it.next(); try (ProjectMeasuresIndexerIterator rowIt = ProjectMeasuresIndexerIterator.create(dbSession, projectUuid)) { while (rowIt.hasNext()) { bulkIndexer.add(newIndexRequest(toProjectMeasuresDoc(rowIt.next()))); it.remove(); } } } // the remaining uuids reference projects that don't exist in db. They must // be deleted from index. projectUuids.forEach(projectUuid -> bulkIndexer.addDeletion(INDEX_TYPE_PROJECT_MEASURES, projectUuid, projectUuid)); return bulkIndexer.stop(); }
private static List<Project> selectProjects(DbSession session, long afterDate, @Nullable String projectUuid) { List<Project> projects = new ArrayList<>(); try (PreparedStatement stmt = createProjectsStatement(session, afterDate, projectUuid); ResultSet rs = stmt.executeQuery()) { while (rs.next()) { String orgUuid = rs.getString(1); String uuid = rs.getString(2); String key = rs.getString(3); String name = rs.getString(4); String analysisUuid = DatabaseUtils.getString(rs, 5); Long analysisDate = DatabaseUtils.getLong(rs, 6); Project project = new Project(orgUuid, uuid, key, name, analysisUuid, analysisDate); projects.add(project); } return projects; } catch (SQLException e) { throw new IllegalStateException("Fail to execute request to select all projects", e); } }
private void doIndex(Size size, @Nullable String projectUuid) { try (DbSession dbSession = dbClient.openSession(false); ProjectMeasuresIndexerIterator rowIt = ProjectMeasuresIndexerIterator.create(dbSession, projectUuid)) { BulkIndexer bulkIndexer = createBulkIndexer(size, IndexingListener.FAIL_ON_ERROR); bulkIndexer.start(); while (rowIt.hasNext()) { ProjectMeasures doc = rowIt.next(); bulkIndexer.add(newIndexRequest(toProjectMeasuresDoc(doc))); } bulkIndexer.stop(); } }
@Override public IndexingResult index(DbSession dbSession, Collection<EsQueueDto> items) { if (items.isEmpty()) { return new IndexingResult(); } OneToOneResilientIndexingListener listener = new OneToOneResilientIndexingListener(dbClient, dbSession, items); BulkIndexer bulkIndexer = createBulkIndexer(Size.REGULAR, listener); bulkIndexer.start(); List<String> projectUuids = items.stream().map(EsQueueDto::getDocId).collect(MoreCollectors.toArrayList(items.size())); Iterator<String> it = projectUuids.iterator(); while (it.hasNext()) { String projectUuid = it.next(); try (ProjectMeasuresIndexerIterator rowIt = ProjectMeasuresIndexerIterator.create(dbSession, projectUuid)) { while (rowIt.hasNext()) { bulkIndexer.add(newIndexRequest(toProjectMeasuresDoc(rowIt.next()))); it.remove(); } } } // the remaining uuids reference projects that don't exist in db. They must // be deleted from index. projectUuids.forEach(projectUuid -> bulkIndexer.addDeletion(INDEX_TYPE_PROJECT_MEASURES, projectUuid, projectUuid)); return bulkIndexer.stop(); }