diff options
author | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-21 16:15:39 +0200 |
---|---|---|
committer | Teryk Bellahsene <teryk.bellahsene@sonarsource.com> | 2014-10-22 09:26:25 +0200 |
commit | 99e61ab58b3bc76bbf9e3d9524c79282e046505d (patch) | |
tree | ac19b460c484d0e343f11c3345ce2a61a92e3c94 /server | |
parent | 9c03512e5342c127ce904ffa2a8a0e42d1819826 (diff) | |
download | sonarqube-99e61ab58b3bc76bbf9e3d9524c79282e046505d.tar.gz sonarqube-99e61ab58b3bc76bbf9e3d9524c79282e046505d.zip |
SONAR-5698 SONAR-5694 Add business dates finishedAt startedAt and submittedAt to analysis report
Diffstat (limited to 'server')
13 files changed, 109 insertions, 47 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportLog.java b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportLog.java index 9f41a3fdfd8..025325e8999 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportLog.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportLog.java @@ -44,8 +44,10 @@ public class AnalysisReportLog implements ActivityLog { .put("projectKey", report.getProjectKey()) .put("projectName", report.getProjectName()) .put("status", String.valueOf(report.getStatus())) - .put("createdAt", DateUtils.formatDateTime(report.getCreatedAt())) - .put("updatedAt", DateUtils.formatDateTime(report.getUpdatedAt())) + .put("submittedAt", DateUtils.formatDateTimeNullSafe(report.getCreatedAt())) + .put("updatedAt", DateUtils.formatDateTimeNullSafe(report.getUpdatedAt())) + .put("startedAt", DateUtils.formatDateTimeNullSafe(report.getStartedAt())) + .put("finishedAt", DateUtils.formatDateTimeNullSafe(report.getFinishedAt())) .build(); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java index 64c2c2c146c..06a721129db 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/AnalysisReportQueue.java @@ -21,6 +21,7 @@ package org.sonar.server.computation; import org.sonar.api.ServerComponent; +import org.sonar.api.utils.System2; import org.sonar.core.activity.Activity; import org.sonar.core.computation.db.AnalysisReportDto; import org.sonar.core.permission.GlobalPermissions; @@ -33,6 +34,7 @@ import org.sonar.server.user.UserSession; import javax.annotation.CheckForNull; +import java.util.Date; import java.util.List; import static com.google.common.base.Preconditions.checkArgument; @@ -42,11 +44,13 @@ public class AnalysisReportQueue implements ServerComponent { private final DbClient dbClient; private final AnalysisReportDao dao; private final ActivityService activityService; + private final System2 system2; - public AnalysisReportQueue(DbClient dbClient, ActivityService activityService) { + public AnalysisReportQueue(DbClient dbClient, ActivityService activityService, System2 system2) { this.dbClient = dbClient; this.activityService = activityService; this.dao = dbClient.analysisReportDao(); + this.system2 = system2; } public AnalysisReportDto add(String projectKey, Long snapshotId) { @@ -86,6 +90,7 @@ public class AnalysisReportQueue implements ServerComponent { DbSession session = dbClient.openSession(false); try { + report.setFinishedAt(new Date(system2.now())); dao.delete(session, report); logActivity(report, session); session.commit(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/ActiveAnalysisReportsAction.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/ActiveAnalysisReportsAction.java index d37bcb2fcdf..3c559b9c3ab 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/ActiveAnalysisReportsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/ActiveAnalysisReportsAction.java @@ -58,8 +58,9 @@ public class ActiveAnalysisReportsAction implements RequestHandler { json.prop("id", report.getId()); json.prop("project", report.getProjectKey()); json.prop("projectName", report.getProjectName()); - json.propDateTime("startDate", report.getCreatedAt()); - json.propDateTime("updateDate", report.getUpdatedAt()); + json.propDateTime("startedAt", report.getStartedAt()); + json.propDateTime("finishedAt", report.getFinishedAt()); + json.propDateTime("submittedAt", report.getCreatedAt()); json.prop("status", report.getStatus().toString()); json.endObject(); } @@ -68,11 +69,11 @@ public class ActiveAnalysisReportsAction implements RequestHandler { void define(WebService.NewController controller) { controller - .createAction("active") - .setDescription("List all the active analysis reports") - .setSince("5.0") - .setResponseExample(Resources.getResource(getClass(), "example-list.json")) - .setHandler(this); + .createAction("active") + .setDescription("List all the active analysis reports") + .setSince("5.0") + .setResponseExample(Resources.getResource(getClass(), "example-list.json")) + .setHandler(this); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java index e520d4bab3c..72ad3f443ae 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportLogMediumTest.java @@ -66,9 +66,11 @@ public class AnalysisReportLogMediumTest { AnalysisReportDto report = AnalysisReportDto.newForTests(1L) .setProjectKey("projectKey") .setProjectName("projectName") - .setStatus(FAILED); - report.setCreatedAt(DateUtils.parseDate("2014-10-15")) - .setUpdatedAt(DateUtils.parseDate("2014-10-16")); + .setStatus(FAILED) + .setCreatedAt(DateUtils.parseDate("2014-10-15")) + .setUpdatedAt(DateUtils.parseDate("2014-10-16")) + .setStartedAt(DateUtils.parseDate("2014-10-17")) + .setFinishedAt(DateUtils.parseDate("2014-10-18")); service.write(dbSession, ANALYSIS_REPORT, new AnalysisReportLog(report)); dbSession.commit(); @@ -83,8 +85,10 @@ public class AnalysisReportLogMediumTest { assertThat(details.get("projectKey")).isEqualTo(report.getProjectKey()); assertThat(details.get("projectName")).isEqualTo(report.getProjectName()); assertThat(details.get("status")).isEqualTo("FAILED"); - assertThat(details.get("createdAt")).isEqualTo("2014-10-15T00:00:00+0200"); + assertThat(details.get("submittedAt")).isEqualTo("2014-10-15T00:00:00+0200"); assertThat(details.get("updatedAt")).isEqualTo("2014-10-16T00:00:00+0200"); + assertThat(details.get("startedAt")).isEqualTo("2014-10-17T00:00:00+0200"); + assertThat(details.get("finishedAt")).isEqualTo("2014-10-18T00:00:00+0200"); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java index 84a1392e57e..050330acba4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/AnalysisReportQueueMediumTest.java @@ -26,6 +26,7 @@ import org.junit.ClassRule; import org.junit.Test; import org.sonar.api.security.DefaultGroups; import org.sonar.api.web.UserRole; +import org.sonar.core.activity.Activity; import org.sonar.core.component.ComponentDto; import org.sonar.core.computation.db.AnalysisReportDto; import org.sonar.core.permission.GlobalPermissions; @@ -40,6 +41,7 @@ import org.sonar.server.tester.ServerTester; import org.sonar.server.user.MockUserSession; import java.util.List; +import java.util.Map; import static org.fest.assertions.Assertions.assertThat; import static org.sonar.core.computation.db.AnalysisReportDto.Status.SUCCESS; @@ -92,6 +94,7 @@ public class AnalysisReportQueueMediumTest { assertThat(reports).hasSize(1); assertThat(report.getProjectKey()).isEqualTo(DEFAULT_PROJECT_KEY); assertThat(report.getSnapshotId()).isEqualTo(123L); + assertThat(report.getCreatedAt()).isNotNull(); } private ComponentDto insertPermissionsForProject(String projectKey) { @@ -122,6 +125,7 @@ public class AnalysisReportQueueMediumTest { assertThat(firstBookedReport.getProjectKey()).isEqualTo(DEFAULT_PROJECT_KEY); assertThat(firstBookedReport.getStatus()).isEqualTo(WORKING); + assertThat(firstBookedReport.getStartedAt()).isNotNull(); assertThat(secondBookedReport.getProjectKey()).isEqualTo("2"); assertThat(thirdBookedReport.getProjectKey()).isEqualTo("3"); } @@ -156,7 +160,10 @@ public class AnalysisReportQueueMediumTest { sut.remove(report); assertThat(sut.all()).isEmpty(); - assertThat(tester.get(ActivityIndex.class).findAll().getHits()).hasSize(1); + List<Activity> activities = tester.get(ActivityIndex.class).findAll().getHits(); + Map<String, String> details = activities.get(0).details(); + assertThat(activities).hasSize(1); + assertThat(details.get("finishedAt")).isNotEmpty(); } @Test(expected = ForbiddenException.class) diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java index 6fd0a31bd02..5aa270e5bfb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/db/AnalysisReportDaoTest.java @@ -75,8 +75,10 @@ public class AnalysisReportDaoTest { .setProjectName(DEFAULT_PROJECT_NAME) .setSnapshotId(DEFAULT_SNAPSHOT_ID) .setData("data-project") - .setStatus(PENDING); - report.setCreatedAt(DateUtils.parseDate("2014-09-24")) + .setStatus(PENDING) + .setStartedAt(DateUtils.parseDate("2014-09-25")) + .setFinishedAt(DateUtils.parseDate("2014-09-27")) + .setCreatedAt(DateUtils.parseDate("2014-09-24")) .setUpdatedAt(DateUtils.parseDate("2014-09-25")); sut.insert(session, report); @@ -161,16 +163,20 @@ public class AnalysisReportDaoTest { } @Test - public void getById_maps_all_the_fields_except_report_data() { - db.prepareDbUnit(getClass(), "select.xml"); + public void getById_maps_all_the_fields_except_the_data() { + db.prepareDbUnit(getClass(), "one_analysis_report.xml"); AnalysisReportDto report = sut.getById(session, 1L); - assertThat(report.getId()).isEqualTo(1L); - assertThat(report.getStatus()).isEqualTo(WORKING); - assertThat(report.getProjectKey()).isEqualTo("123456789-987654321"); - assertThat(report.getData()).isNull(); + + assertThat(report.getProjectKey()).isEqualTo(DEFAULT_PROJECT_KEY); + assertThat(report.getProjectName()).isEqualTo(DEFAULT_PROJECT_NAME); assertThat(report.getCreatedAt()).isEqualTo(DateUtils.parseDate("2014-09-24")); assertThat(report.getUpdatedAt()).isEqualTo(DateUtils.parseDate("2014-09-25")); + assertThat(report.getStartedAt()).isEqualTo(DateUtils.parseDate("2014-09-26")); + assertThat(report.getFinishedAt()).isEqualTo(DateUtils.parseDate("2014-09-27")); + assertThat(report.getStatus()).isEqualTo(WORKING); + assertThat(report.getData()).isNull(); + assertThat(report.getKey()).isEqualTo("1"); } @Test @@ -208,7 +214,7 @@ public class AnalysisReportDaoTest { assertThat(reportBooked.getId()).isEqualTo(1L); assertThat(reportBooked.getStatus()).isEqualTo(WORKING); - assertThat(reportBooked.getUpdatedAt()).isEqualTo(mockedNow); + assertThat(reportBooked.getStartedAt()).isEqualTo(mockedNow); } @Test @@ -242,21 +248,6 @@ public class AnalysisReportDaoTest { } @Test - public void getById_maps_all_the_fields_except_the_data() { - db.prepareDbUnit(getClass(), "one_analysis_report.xml"); - - AnalysisReportDto report = sut.getById(session, 1L); - - assertThat(report.getProjectKey()).isEqualTo(DEFAULT_PROJECT_KEY); - assertThat(report.getProjectName()).isEqualTo(DEFAULT_PROJECT_NAME); - assertThat(report.getCreatedAt()).isEqualTo(DateUtils.parseDate("2014-09-24")); - assertThat(report.getUpdatedAt()).isEqualTo(DateUtils.parseDate("2014-09-25")); - assertThat(report.getStatus()).isEqualTo(WORKING); - assertThat(report.getData()).isNull(); - assertThat(report.getKey()).isEqualTo("1"); - } - - @Test public void findAll_one_analysis_report() { db.prepareDbUnit(getClass(), "one_analysis_report.xml"); @@ -301,9 +292,10 @@ public class AnalysisReportDaoTest { private AnalysisReportDto newDefaultReport() { AnalysisReportDto report = AnalysisReportDto.newForTests(1L) .setStatus(PENDING) - .setProjectKey(DEFAULT_PROJECT_KEY); - report + .setProjectKey(DEFAULT_PROJECT_KEY) .setCreatedAt(DateUtils.parseDate("2014-09-30")) + .setFinishedAt(DateUtils.parseDate("2014-09-30")) + .setStartedAt(DateUtils.parseDate("2014-09-30")) .setUpdatedAt(DateUtils.parseDate("2014-09-30")); return report; diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java index 7770b3ce1e0..56817de9884 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest.java @@ -54,14 +54,15 @@ public class ActiveAnalysisReportsActionTest { .setProjectName("Project Name") .setProjectKey("project-name") .setStatus(PENDING) - .setData(null); - report.setCreatedAt(DateUtils.parseDateTime("2014-10-13T00:00:00+0200")) - .setUpdatedAt(DateUtils.parseDateTime("2014-10-14T00:00:00+0200")); + .setData(null) + .setCreatedAt(DateUtils.parseDateTime("2014-10-13T00:00:00+0200")) + .setStartedAt(DateUtils.parseDateTime("2014-10-13T00:00:00+0200")) + .setFinishedAt(DateUtils.parseDateTime("2014-10-13T00:00:00+0200")); List<AnalysisReportDto> reports = Lists.newArrayList(report); when(queue.all()).thenReturn(reports); WsTester.TestRequest request = tester.newGetRequest(AnalysisReportWebService.API_ENDPOINT, "active"); - request.execute().assertJson(getClass(), "list_active_reports.json"); + request.execute().assertJson(getClass(), "list_active_reports.json", false); } @Test diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml index 816774bdb21..189aa5a770c 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/insert-result.xml @@ -7,6 +7,8 @@ report_data="data-project" report_status="PENDING" created_at="2014-09-24" + started_at="2014-09-25" + finished_at="2014-09-27" updated_at="2014-09-26" /> <analysis_reports @@ -17,6 +19,8 @@ report_data="data-project" report_status="PENDING" created_at="2014-09-24" + started_at="2014-09-25" + finished_at="2014-09-27" updated_at="2014-09-26" /> </dataset> diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml index 7a384fef8bf..fad68c874f3 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/one_analysis_report.xml @@ -8,5 +8,7 @@ report_status="WORKING" created_at="2014-09-24" updated_at="2014-09-25" + started_at="2014-09-26" + finished_at="2014-09-27" /> </dataset>
\ No newline at end of file diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml index ee97b8c8c3b..4a32fbe8dd0 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending-result.xml @@ -8,6 +8,8 @@ report_status="PENDING" created_at="2014-09-24" updated_at="2014-09-26" + started_at="2014-09-24" + finished_at="2014-09-24" /> <analysis_reports id="2" @@ -18,6 +20,8 @@ report_status="PENDING" created_at="2014-09-25" updated_at="2014-09-26" + started_at="2014-09-24" + finished_at="2014-09-24" /> <analysis_reports id="3" @@ -28,5 +32,7 @@ report_status="PENDING" created_at="2014-09-26" updated_at="2014-09-26" + started_at="2014-09-24" + finished_at="2014-09-24" /> </dataset>
\ No newline at end of file diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml index cb5e9a70c3f..71e67e7b911 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/db/AnalysisReportDaoTest/update-all-to-status-pending.xml @@ -8,6 +8,8 @@ report_status="WORKING" created_at="2014-09-24" updated_at="2014-09-24" + started_at="2014-09-24" + finished_at="2014-09-24" /> <analysis_reports id="2" @@ -18,6 +20,8 @@ report_status="WORKING" created_at="2014-09-25" updated_at="2014-09-25" + started_at="2014-09-24" + finished_at="2014-09-24" /> <analysis_reports id="3" @@ -28,5 +32,7 @@ report_status="PENDING" created_at="2014-09-26" updated_at="2014-09-26" + started_at="2014-09-24" + finished_at="2014-09-24" /> </dataset>
\ No newline at end of file diff --git a/server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json b/server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json index 1f30d284f52..e5bd54abf0a 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/computation/ws/ActiveAnalysisReportsActionTest/list_active_reports.json @@ -5,8 +5,9 @@ "status": "PENDING", "projectName": "Project Name", "project": "project-name", - "startDate": "2014-10-13T00:00:00+0200", - "updateDate": "2014-10-14T00:00:00+0200" + "submittedAt": "2014-10-13T00:00:00+0200", + "startedAt": "2014-10-13T00:00:00+0200", + "finishedAt": "2014-10-13T00:00:00+0200" } ] }
\ No newline at end of file diff --git a/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/707_add_business_dates_to_analysis_reports.rb b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/707_add_business_dates_to_analysis_reports.rb new file mode 100644 index 00000000000..6456d78eb10 --- /dev/null +++ b/server/sonar-web/src/main/webapp/WEB-INF/db/migrate/707_add_business_dates_to_analysis_reports.rb @@ -0,0 +1,31 @@ +# +# SonarQube, open source software quality management tool. +# Copyright (C) 2008-2014 SonarSource +# mailto:contact AT sonarsource DOT com +# +# SonarQube is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3 of the License, or (at your option) any later version. +# +# SonarQube is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +# +# SonarQube 5.0 +# SONAR-5698 SONAR-5694 +# +class AddBusinessDatesToAnalysisReports < ActiveRecord::Migration + def self.up + add_column 'analysis_reports', :started_at, :datetime, :null => true + add_column 'analysis_reports', :finished_at, :datetime, :null => true + end +end + |