From c80217c9b71f272ad0213c606a3ca62f48b48605 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Mon, 25 Jun 2018 13:24:17 +0200 Subject: [PATCH] SONARCLOUD-78 add metric org_15d_active_orgs --- .../sonar/db/organization/OrganizationQuery.java | 16 ++++++++++++++++ .../sonar/db/organization/OrganizationMapper.xml | 11 +++++++++++ 2 files changed, 27 insertions(+) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationQuery.java b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationQuery.java index 2117660e8e6..ca3e2b27943 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationQuery.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/organization/OrganizationQuery.java @@ -30,10 +30,13 @@ import static org.sonar.core.util.stream.MoreCollectors.toSet; public class OrganizationQuery { private static final OrganizationQuery NO_FILTER = newOrganizationQueryBuilder().build(); private final Set keys; + @Nullable private final Integer userId; private final boolean onlyTeam; private final boolean onlyPersonal; private final boolean withAnalyses; + @Nullable + private final Long analyzedAfter; private OrganizationQuery(Builder builder) { this.keys = builder.keys; @@ -44,6 +47,7 @@ public class OrganizationQuery { throw new IllegalArgumentException("Only one of onlyPersonal and onlyTeam can be true"); } this.withAnalyses = builder.withAnalyses; + this.analyzedAfter = builder.analyzedAfter; } @CheckForNull @@ -68,6 +72,11 @@ public class OrganizationQuery { return withAnalyses; } + @CheckForNull + public Long getAnalyzedAfter() { + return analyzedAfter; + } + public static OrganizationQuery returnAll() { return NO_FILTER; } @@ -83,6 +92,8 @@ public class OrganizationQuery { private boolean onlyTeam = false; private boolean onlyPersonal = false; private boolean withAnalyses = false; + @Nullable + private Long analyzedAfter; private Builder() { // use static factory method @@ -117,6 +128,11 @@ public class OrganizationQuery { return this; } + public Builder setAnalyzedAfter(long l) { + this.analyzedAfter = l; + return this; + } + public OrganizationQuery build() { return new OrganizationQuery(this); } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMapper.xml index 46d8dd1c9e7..74578417dc7 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/organization/OrganizationMapper.xml @@ -134,6 +134,17 @@ and s.islast = ${_true} ) + + and exists( + select 1 + from snapshots s + inner join projects p on p.uuid = s.component_uuid + where p.organization_uuid = org.uuid + and p.enabled = ${_true} + and s.islast = ${_true} + and s.created_at >= #{query.analyzedAfter,jdbcType=BIGINT} + ) + -- 2.39.5