@Override
public void execute(ComputationStep.Context context) {
+ IssueStatistics statistics = new IssueStatistics();
try (DbSession dbSession = dbClient.openSession(true);
CloseableIterator<DefaultIssue> issues = issueCache.traverse()) {
IssueChangeMapper changeMapper = dbSession.getMapper(IssueChangeMapper.class);
while (issues.hasNext()) {
DefaultIssue issue = issues.next();
- boolean saved = persistIssueIfRequired(mapper, issue);
+ boolean saved = persistIssueIfRequired(mapper, issue, statistics);
if (saved) {
issueStorage.insertChanges(changeMapper, issue);
}
}
dbSession.flushStatements();
dbSession.commit();
+ } finally {
+ statistics.dumpTo(context);
}
}
- private boolean persistIssueIfRequired(IssueMapper mapper, DefaultIssue issue) {
+ private boolean persistIssueIfRequired(IssueMapper mapper, DefaultIssue issue, IssueStatistics issueStatistics) {
if (issue.isNew() || issue.isCopied()) {
persistNewIssue(mapper, issue);
+ issueStatistics.inserts++;
return true;
}
if (issue.isChanged()) {
persistChangedIssue(mapper, issue);
+ issueStatistics.updates++;
return true;
}
+
+ issueStatistics.untouched++;
return false;
}
public String getDescription() {
return "Persist issues";
}
+
+ private static class IssueStatistics {
+ private int inserts = 0;
+ private int updates = 0;
+ private int untouched = 0;
+
+ private void dumpTo(ComputationStep.Context context) {
+ context.getStatistics()
+ .add("inserts", String.valueOf(inserts))
+ .add("updates", String.valueOf(updates))
+ .add("untouched", String.valueOf(untouched));
+ }
+ }
}
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.data.MapEntry.entry;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.api.issue.Issue.RESOLUTION_FIXED;
public class PersistIssuesStepTest extends BaseStepTest {
- public static final long NOW = 1_400_000_000_000L;
+ private static final long NOW = 1_400_000_000_000L;
@Rule
public TemporaryFolder temp = new TemporaryFolder();
when(system2.now()).thenReturn(NOW);
reportReader.setMetadata(ScannerReport.Metadata.getDefaultInstance());
- underTest = new PersistIssuesStep(dbClient, system2, new UpdateConflictResolver(), new RuleRepositoryImpl(externalRuleCreator, dbClient, analysisMetadataHolder), issueCache, new IssueStorage());
+ underTest = new PersistIssuesStep(dbClient, system2, new UpdateConflictResolver(), new RuleRepositoryImpl(externalRuleCreator, dbClient, analysisMetadataHolder), issueCache,
+ new IssueStorage());
}
@After
.setCreationDate(new Date(NOW))))
.close();
- underTest.execute(new TestComputationStepContext());
+ TestComputationStepContext context = new TestComputationStepContext();
+ underTest.execute(context);
IssueDto result = dbClient.issueDao().selectOrFailByKey(session, "ISSUE");
assertThat(result.getKey()).isEqualTo("ISSUE");
List<IssueChangeDto> changes = dbClient.issueChangeDao().selectByIssueKeys(session, Arrays.asList("ISSUE"));
assertThat(changes).extracting(IssueChangeDto::getChangeType).containsExactly(IssueChangeDto.TYPE_COMMENT, IssueChangeDto.TYPE_FIELD_CHANGE);
+ assertThat(context.getStatistics().getAll()).containsOnly(
+ entry("inserts", "1"), entry("updates", "0"), entry("untouched", "0"));
}
@Test
.setDiff("technicalDebt", null, 1L)
.setCreationDate(new Date(NOW))))
.close();
- underTest.execute(new TestComputationStepContext());
+
+ TestComputationStepContext context = new TestComputationStepContext();
+ underTest.execute(context);
IssueDto result = dbClient.issueDao().selectOrFailByKey(session, "ISSUE");
assertThat(result.getKey()).isEqualTo("ISSUE");
List<IssueChangeDto> changes = dbClient.issueChangeDao().selectByIssueKeys(session, Arrays.asList("ISSUE"));
assertThat(changes).extracting(IssueChangeDto::getChangeType).containsExactly(IssueChangeDto.TYPE_COMMENT, IssueChangeDto.TYPE_FIELD_CHANGE);
+ assertThat(context.getStatistics().getAll()).containsOnly(
+ entry("inserts", "1"), entry("updates", "0"), entry("untouched", "0"));
}
@Test
.setNew(true)
.setType(RuleType.BUG)).close();
- underTest.execute(new TestComputationStepContext());
+ TestComputationStepContext context = new TestComputationStepContext();
+ underTest.execute(context);
IssueDto result = dbClient.issueDao().selectOrFailByKey(session, "ISSUE");
assertThat(result.getKey()).isEqualTo("ISSUE");
assertThat(result.getSeverity()).isEqualTo(BLOCKER);
assertThat(result.getStatus()).isEqualTo(STATUS_OPEN);
assertThat(result.getType()).isEqualTo(RuleType.BUG.getDbConstant());
+ assertThat(context.getStatistics().getAll()).containsOnly(
+ entry("inserts", "1"), entry("updates", "0"), entry("untouched", "0"));
}
@Test
.setNew(false)
.setChanged(true))
.close();
- underTest.execute(new TestComputationStepContext());
+
+ TestComputationStepContext context = new TestComputationStepContext();
+ underTest.execute(context);
IssueDto issueReloaded = db.getDbClient().issueDao().selectByKey(db.getSession(), issue.getKey()).get();
assertThat(issueReloaded.getStatus()).isEqualTo(STATUS_CLOSED);
assertThat(issueReloaded.getResolution()).isEqualTo(RESOLUTION_FIXED);
+ assertThat(context.getStatistics().getAll()).containsOnly(
+ entry("inserts", "0"), entry("updates", "1"), entry("untouched", "0"));
}
@Test
.setCreatedAt(new Date(NOW))
.setNew(true)))
.close();
- underTest.execute(new TestComputationStepContext());
+
+ TestComputationStepContext context = new TestComputationStepContext();
+ underTest.execute(context);
IssueChangeDto issueChangeDto = db.getDbClient().issueChangeDao().selectByIssueKeys(db.getSession(), singletonList(issue.getKey())).get(0);
assertThat(issueChangeDto)
.extracting(IssueChangeDto::getChangeType, IssueChangeDto::getUserUuid, IssueChangeDto::getChangeData, IssueChangeDto::getIssueKey,
IssueChangeDto::getIssueChangeCreationDate)
.containsOnly(IssueChangeDto.TYPE_COMMENT, "john_uuid", "Some text", issue.getKey(), NOW);
+ assertThat(context.getStatistics().getAll()).containsOnly(
+ entry("inserts", "0"), entry("updates", "1"), entry("untouched", "0"));
}
@Test
.setDiff("technicalDebt", null, 1L)
.setCreationDate(new Date(NOW))))
.close();
- underTest.execute(new TestComputationStepContext());
+
+ TestComputationStepContext context = new TestComputationStepContext();
+ underTest.execute(context);
IssueChangeDto issueChangeDto = db.getDbClient().issueChangeDao().selectByIssueKeys(db.getSession(), singletonList(issue.getKey())).get(0);
assertThat(issueChangeDto)
.extracting(IssueChangeDto::getChangeType, IssueChangeDto::getUserUuid, IssueChangeDto::getChangeData, IssueChangeDto::getIssueKey,
IssueChangeDto::getIssueChangeCreationDate)
.containsOnly(IssueChangeDto.TYPE_FIELD_CHANGE, "john_uuid", "technicalDebt=1", issue.getKey(), NOW);
+ assertThat(context.getStatistics().getAll()).containsOnly(
+ entry("inserts", "0"), entry("updates", "1"), entry("untouched", "0"));
}
}