package org.sonar.server.computation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.sonar.api.ServerComponent;
import org.sonar.core.computation.db.AnalysisReportDto;
import org.sonar.core.persistence.DbSession;
* since 5.0
*/
public class ComputationService implements ServerComponent {
+ private static final Logger LOG = LoggerFactory.getLogger(ComputationService.class);
+
private final DbClient dbClient;
private final ComputationStepRegistry stepRegistry;
}
public void analyzeReport(AnalysisReportDto report) {
+ LOG.info(String.format("### Analysis '%s' of project '%s' started ###", report.getId(), report.getProjectKey()));
+
// Synchronization of lot of data can only be done with a batch session for the moment
DbSession session = dbClient.openSession(true);
try {
for (ComputationStep step : stepRegistry.steps()) {
+ LOG.info(String.format("# %s step started...", step.description()));
step.execute(session, report);
+ LOG.info(String.format("# %s step finished", step.description()));
}
} finally {
MyBatis.closeQuietly(session);
+ LOG.info(String.format("### Analysis '%s' finished ###", report.getId()));
}
}
}
indexProjectIssues(session, report.getProjectKey());
}
+ @Override
+ public String description() {
+ return "Update issues index";
+ }
+
private void indexProjectIssues(DbSession session, String projectKey) {
dbClient.issueDao().synchronizeAfter(session,
index.get(IssueIndex.class).getLastSynchronization(),
enableCurrentSnapshot(session, report);
}
+ @Override
+ public String description() {
+ return "Switch last snapshot flag";
+ }
+
private void disablePreviousSnapshot(DbSession session, AnalysisReportDto report) {
SnapshotDto referenceSnapshot = dao.getByKey(session, report.getSnapshotId());
synchronizeProjectPermissionsIfNotFound(session, report);
}
+ @Override
+ public String description() {
+ return "Synchronize project permissions";
+ }
+
private void synchronizeProjectPermissionsIfNotFound(DbSession session, AnalysisReportDto report) {
if (index.get(IssueAuthorizationIndex.class).getNullableByKey(report.getProjectKey()) == null) {
permissionService.synchronizePermissions(session, report.getProject().uuid());