aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorsimonbrandhof <simon.brandhof@gmail.com>2010-12-07 16:58:58 +0000
committersimonbrandhof <simon.brandhof@gmail.com>2010-12-07 16:58:58 +0000
commit01e310b419f1ed34ecda6bbe45674ca8e0e2a422 (patch)
treed389e72c9f89670716ab3bffcbe17cee9c6ed4e7 /plugins
parentf6edb3b39c3a337a4302e6d4a87d8160ecebc11d (diff)
downloadsonarqube-01e310b419f1ed34ecda6bbe45674ca8e0e2a422.tar.gz
sonarqube-01e310b419f1ed34ecda6bbe45674ca8e0e2a422.zip
SONAR-1450 log comparison dates at batch startup + improve the algorithm of periods in number of days
Diffstat (limited to 'plugins')
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java2
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDays.java37
-rw-r--r--plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TimeMachineConfiguration.java2
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest.java69
-rw-r--r--plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TimeMachineConfigurationTest.java16
-rw-r--r--plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest/shared.xml (renamed from plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest/shouldLoadSnapshotsFromDatabase.xml)38
6 files changed, 60 insertions, 104 deletions
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java
index 717f3b6734f..a51d5640247 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/NewViolationsDecorator.java
@@ -105,8 +105,8 @@ public class NewViolationsDecorator implements Decorator {
Measure measure = new Measure(metric);
for (PastSnapshot variationSnapshot : timeMachineConfiguration.getProjectPastSnapshots()) {
int variationIndex = variationSnapshot.getIndex();
- Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.metric(metric));
int count = countViolations(violationsBySeverity.get(priority), variationSnapshot.getDate());
+ Collection<Measure> children = context.getChildrenMeasures(MeasuresFilters.metric(metric));
double sum = sumChildren(variationIndex, children) + count;
measure.setVariation(variationIndex, sum);
}
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDays.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDays.java
index b3235bb8ae3..9a49b236402 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDays.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDays.java
@@ -27,7 +27,7 @@ import org.sonar.api.database.model.Snapshot;
import java.util.Date;
import java.util.List;
-public class PastSnapshotFinderByDays implements BatchExtension{
+public class PastSnapshotFinderByDays implements BatchExtension {
private Snapshot projectSnapshot; // TODO replace by PersistenceManager
private DatabaseSession session;
@@ -37,37 +37,16 @@ public class PastSnapshotFinderByDays implements BatchExtension{
}
Snapshot findInDays(int days) {
- List<Snapshot> snapshots = loadSnapshotsFromDatabase();
- return getNearestToTarget(snapshots, projectSnapshot.getCreatedAt(), days);
- }
-
- List<Snapshot> loadSnapshotsFromDatabase() {
- String hql = "from " + Snapshot.class.getSimpleName() + " where resourceId=:resourceId AND status=:status order by createdAt";
- return session.createQuery(hql)
+ Date targetDate = DateUtils.addDays(projectSnapshot.getCreatedAt(), -days);
+ String hql = "from " + Snapshot.class.getSimpleName() + " where resourceId=:resourceId AND status=:status AND createdAt>=:from AND createdAt<:to order by createdAt asc";
+ List<Snapshot> snapshots = session.createQuery(hql)
+ .setParameter("from", targetDate)
+ .setParameter("to", projectSnapshot.getCreatedAt())
.setParameter("resourceId", projectSnapshot.getResourceId())
.setParameter("status", Snapshot.STATUS_PROCESSED)
+ .setMaxResults(1)
.getResultList();
- }
-
- static Snapshot getNearestToTarget(List<Snapshot> snapshots, Date currentDate, int distanceInDays) {
- Date targetDate = DateUtils.addDays(currentDate, -distanceInDays);
- return getNearestToTarget(snapshots, targetDate);
- }
-
- static Snapshot getNearestToTarget(List<Snapshot> snapshots, Date targetDate) {
- long bestDistance = Long.MAX_VALUE;
- Snapshot nearest = null;
- for (Snapshot snapshot : snapshots) {
- long distance = distance(snapshot.getCreatedAt(), targetDate);
- if (distance <= bestDistance) {
- bestDistance = distance;
- nearest = snapshot;
- }
- }
- return nearest;
- }
- static long distance(Date d1, Date d2) {
- return Math.abs(d1.getTime() - d2.getTime());
+ return snapshots.isEmpty() ? null : snapshots.get(0);
}
}
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TimeMachineConfiguration.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TimeMachineConfiguration.java
index a3fe6efd7c8..1658381f0d4 100644
--- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TimeMachineConfiguration.java
+++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/timemachine/TimeMachineConfiguration.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Lists;
import org.apache.commons.configuration.Configuration;
import org.sonar.api.BatchExtension;
import org.sonar.api.CoreProperties;
+import org.sonar.api.utils.Logs;
import java.util.Collections;
import java.util.List;
@@ -44,6 +45,7 @@ public class TimeMachineConfiguration implements BatchExtension {
for (int index = 1; index <= NUMBER_OF_VARIATION_SNAPSHOTS; index++) {
PastSnapshot variationSnapshot = variationSnapshotFinder.find(configuration, index);
if (variationSnapshot != null) {
+ Logs.INFO.info("Comparison date: " + variationSnapshot.getDate());
projectPastSnapshots.add(variationSnapshot);
}
}
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest.java
index d4f70c535ae..a09efeda4dc 100644
--- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest.java
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest.java
@@ -19,81 +19,46 @@
*/
package org.sonar.plugins.core.timemachine;
-import com.google.common.collect.Lists;
+import org.hamcrest.core.IsNull;
import org.junit.Test;
import org.sonar.api.database.model.Snapshot;
import org.sonar.jpa.test.AbstractDbUnitTestCase;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.core.IsNull.nullValue;
import static org.junit.Assert.assertThat;
-import static org.junit.internal.matchers.IsCollectionContaining.hasItems;
public class PastSnapshotFinderByDaysTest extends AbstractDbUnitTestCase {
- private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-
@Test
- public void shouldLoadSnapshotsFromDatabase() {
- setupData("shouldLoadSnapshotsFromDatabase");
+ public void shouldGetNextSnapshot() throws ParseException {
+ setupData("shared");
- Snapshot projectSnapshot = getSession().getSingleResult(Snapshot.class, "id", 1009);
+ Snapshot projectSnapshot = getSession().getSingleResult(Snapshot.class, "id", 1009); // 2008-11-16
PastSnapshotFinderByDays finder = new PastSnapshotFinderByDays(projectSnapshot, getSession());
- List<Snapshot> snapshots = finder.loadSnapshotsFromDatabase();
- List<Integer> snapshotIds = Lists.newLinkedList();
- for (Snapshot snapshot : snapshots) {
- snapshotIds.add(snapshot.getId());
- }
- assertThat(snapshotIds.size(), is(2));
- assertThat(snapshotIds, hasItems(1000, 1003)); // project snapshots
+
+ assertThat(finder.findInDays(50).getId(), is(1000));
}
@Test
- public void shouldGetNearestSnapshotBefore() throws ParseException {
- Date current = dateFormat.parse("2010-10-20");
- // distance: 15 => target is 2010-10-05
+ public void shouldIgnoreUnprocessedSnapshots() throws ParseException {
+ setupData("shared");
+
+ Snapshot projectSnapshot = getSession().getSingleResult(Snapshot.class, "id", 1009); // 2008-11-16
+ PastSnapshotFinderByDays finder = new PastSnapshotFinderByDays(projectSnapshot, getSession());
- List<Snapshot> snapshots = Arrays.asList(
- newSnapshot(1, "2010-09-30"),
- newSnapshot(2, "2010-10-03"),// -2 days
- newSnapshot(3, "2010-10-08"),// +3 days
- newSnapshot(4, "2010-10-12") // + 7 days
- );
- assertThat(PastSnapshotFinderByDays.getNearestToTarget(snapshots, current, 15).getId(), is(2));
+ assertThat(finder.findInDays(7).getId(), is(1006));
}
@Test
- public void shouldgetNearestSnapshotAfter() throws ParseException {
- Date current = dateFormat.parse("2010-10-20");
- // distance: 15 => target is 2010-10-05
+ public void shouldNotFindSelf() throws ParseException {
+ setupData("shared");
- List<Snapshot> snapshots = Arrays.asList(
- newSnapshot(1, "2010-09-30"),
- newSnapshot(2, "2010-10-01"),// -4 days
- newSnapshot(3, "2010-10-08"),// +3 days
- newSnapshot(4, "2010-10-12") // + 7 days
- );
- assertThat(PastSnapshotFinderByDays.getNearestToTarget(snapshots, current, 15).getId(), is(3));
- }
+ Snapshot projectSnapshot = getSession().getSingleResult(Snapshot.class, "id", 1009); // 2008-11-16
+ PastSnapshotFinderByDays finder = new PastSnapshotFinderByDays(projectSnapshot, getSession());
- @Test
- public void shouldReturnNullIfNoSnapshots() throws ParseException {
- Date current = dateFormat.parse("2010-10-20");
- List<Snapshot> snapshots = Collections.emptyList();
- assertThat(PastSnapshotFinderByDays.getNearestToTarget(snapshots, current, 15), nullValue());
+ assertThat(finder.findInDays(1), IsNull.<Object>nullValue());
}
- private Snapshot newSnapshot(int id, String date) throws ParseException {
- Snapshot snapshot = new Snapshot();
- snapshot.setId(id);
- snapshot.setCreatedAt(dateFormat.parse(date));
- return snapshot;
- }
}
diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TimeMachineConfigurationTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TimeMachineConfigurationTest.java
index 67b8f7ea1b0..2070bc6b0d3 100644
--- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TimeMachineConfigurationTest.java
+++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/timemachine/TimeMachineConfigurationTest.java
@@ -22,8 +22,13 @@ package org.sonar.plugins.core.timemachine;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.junit.Test;
import org.sonar.api.CoreProperties;
+import org.sonar.api.database.model.Snapshot;
import org.sonar.jpa.test.AbstractDbUnitTestCase;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.*;
@@ -44,11 +49,11 @@ public class TimeMachineConfigurationTest extends AbstractDbUnitTestCase {
}
@Test
- public void shouldInitSnapshotReferences() {
+ public void shouldInitVariationSnapshots() throws ParseException {
PropertiesConfiguration conf = new PropertiesConfiguration();
PastSnapshotFinder snapshotReferenceFinder = mock(PastSnapshotFinder.class);
- when(snapshotReferenceFinder.find(conf, 1)).thenReturn(new PastSnapshot(1, "days", null));
- when(snapshotReferenceFinder.find(conf, 3)).thenReturn(new PastSnapshot(3, "days", null));
+ when(snapshotReferenceFinder.find(conf, 1)).thenReturn(new PastSnapshot(1, "days", newSnapshot("2010-10-15")));
+ when(snapshotReferenceFinder.find(conf, 3)).thenReturn(new PastSnapshot(3, "days", newSnapshot("2010-10-13")));
TimeMachineConfiguration timeMachineConfiguration = new TimeMachineConfiguration(conf, snapshotReferenceFinder);
@@ -59,5 +64,10 @@ public class TimeMachineConfigurationTest extends AbstractDbUnitTestCase {
assertThat(timeMachineConfiguration.getProjectPastSnapshots().size(), is(2));
}
+ private Snapshot newSnapshot(String date) throws ParseException {
+ Date createdAt = new SimpleDateFormat("yyyy-MM-dd").parse(date);
+ return new Snapshot().setCreatedAt(createdAt);
+ }
+
}
diff --git a/plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest/shouldLoadSnapshotsFromDatabase.xml b/plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest/shared.xml
index 4429d7c65c4..d419e635011 100644
--- a/plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest/shouldLoadSnapshotsFromDatabase.xml
+++ b/plugins/sonar-core-plugin/src/test/resources/org/sonar/plugins/core/timemachine/PastSnapshotFinderByDaysTest/shared.xml
@@ -19,7 +19,7 @@
enabled="true" language="java" copy_resource_id="[null]"/>
- <!-- first analysis -->
+ <!-- first analysis : 2008-11-01-->
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1000" project_id="1" parent_snapshot_id="[null]" root_project_id="1" root_snapshot_id="[null]"
scope="PRJ" qualifier="TRK" created_at="2008-11-01 13:58:00.00" version="[null]" path=""
status="P" islast="false" depth="0" />
@@ -33,44 +33,44 @@
status="P" islast="false" depth="2" />
- <!-- second analysis -->
+ <!-- second unprocessed analysis - to ignore: 2008-11-12 -->
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1003" project_id="1" parent_snapshot_id="[null]" root_project_id="1" root_snapshot_id="[null]"
- scope="PRJ" qualifier="TRK" created_at="2008-11-02 13:58:00.00" version="[null]" path=""
- status="P" islast="true" depth="0" />
+ scope="PRJ" qualifier="TRK" created_at="2008-11-12 13:58:00.00" version="[null]" path=""
+ status="U" islast="false" depth="0" />
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1004" project_id="2" parent_snapshot_id="1003" root_project_id="1" root_snapshot_id="1003"
- scope="DIR" qualifier="PAC" created_at="2008-11-02 13:58:00.00" version="[null]" path="1003."
- status="P" islast="true" depth="1" />
+ scope="DIR" qualifier="PAC" created_at="2008-11-12 13:58:00.00" version="[null]" path="1003."
+ status="U" islast="false" depth="1" />
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1005" project_id="3" parent_snapshot_id="1004" root_project_id="1" root_snapshot_id="1003"
- scope="FIL" qualifier="CLA" created_at="2008-11-02 13:58:00.00" version="[null]" path="1003.1004."
- status="P" islast="true" depth="2" />
+ scope="FIL" qualifier="CLA" created_at="2008-11-12 13:58:00.00" version="[null]" path="1003.1004."
+ status="P" islast="false" depth="2" />
- <!-- unprocessed analysis (to ignore) -->
+ <!-- second analysis : 2008-11-13-->
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1006" project_id="1" parent_snapshot_id="[null]" root_project_id="1" root_snapshot_id="[null]"
- scope="PRJ" qualifier="TRK" created_at="2008-11-03 13:58:00.00" version="[null]" path=""
- status="U" islast="false" depth="0" />
+ scope="PRJ" qualifier="TRK" created_at="2008-11-13 13:58:00.00" version="[null]" path=""
+ status="P" islast="true" depth="0" />
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1007" project_id="2" parent_snapshot_id="1006" root_project_id="1" root_snapshot_id="1006"
- scope="DIR" qualifier="PAC" created_at="2008-11-03 13:58:00.00" version="[null]" path="1006."
- status="U" islast="false" depth="1" />
+ scope="DIR" qualifier="PAC" created_at="2008-11-13 13:58:00.00" version="[null]" path="1006."
+ status="P" islast="true" depth="1" />
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1008" project_id="3" parent_snapshot_id="1007" root_project_id="1" root_snapshot_id="1006"
- scope="FIL" qualifier="CLA" created_at="2008-11-03 13:58:00.00" version="[null]" path="1006.1007."
- status="U" islast="false" depth="2" />
+ scope="FIL" qualifier="CLA" created_at="2008-11-13 13:58:00.00" version="[null]" path="1006.1007."
+ status="P" islast="true" depth="2" />
- <!-- current analysis -->
+ <!-- current analysis : 2008-11-16 -->
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1009" project_id="1" parent_snapshot_id="[null]" root_project_id="1" root_snapshot_id="[null]"
- scope="PRJ" qualifier="TRK" created_at="2008-11-04 13:58:00.00" version="[null]" path=""
+ scope="PRJ" qualifier="TRK" created_at="2008-11-16 13:58:00.00" version="[null]" path=""
status="U" islast="false" depth="0" />
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1010" project_id="2" parent_snapshot_id="1009" root_project_id="1" root_snapshot_id="1009"
- scope="DIR" qualifier="PAC" created_at="2008-11-04 13:58:00.00" version="[null]" path="1009."
+ scope="DIR" qualifier="PAC" created_at="2008-11-16 13:58:00.00" version="[null]" path="1009."
status="U" islast="false" depth="1" />
<snapshots variation_mode_1="[null]" variation_param_1="[null]" variation_mode_2="[null]" variation_param_2="[null]" variation_mode_3="[null]" variation_param_3="[null]" variation_mode_4="[null]" variation_param_4="[null]" variation_mode_5="[null]" variation_param_5="[null]" id="1011" project_id="3" parent_snapshot_id="1010" root_project_id="1" root_snapshot_id="1009"
- scope="FIL" qualifier="CLA" created_at="2008-11-04 13:58:00.00" version="[null]" path="1009.1010."
+ scope="FIL" qualifier="CLA" created_at="2008-11-16 13:58:00.00" version="[null]" path="1009.1010."
status="U" islast="false" depth="2" />
</dataset> \ No newline at end of file