]> source.dussan.org Git - sonarqube.git/commitdiff
SONARCLOUD-103 Introduce organizationUuid in loc calculation
authorEric Hartmann <hartmann.eric@gmail.com>
Wed, 18 Jul 2018 10:44:28 +0000 (12:44 +0200)
committersonartech <sonartech@sonarsource.com>
Tue, 24 Jul 2018 07:31:49 +0000 (09:31 +0200)
server/sonar-db-dao/src/main/java/org/sonar/db/measure/LiveMeasureDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/measure/LiveMeasureMapper.java
server/sonar-db-dao/src/main/java/org/sonar/db/measure/SumNclocDbQuery.java
server/sonar-db-dao/src/main/resources/org/sonar/db/measure/LiveMeasureMapper.xml
server/sonar-db-dao/src/test/java/org/sonar/db/measure/LiveMeasureDaoTest.java
server/sonar-server/src/main/java/org/sonar/server/telemetry/TelemetryDataLoader.java
server/sonar-server/src/main/java/org/sonar/server/ui/ws/MarketplaceAction.java
server/sonar-server/src/test/java/org/sonar/server/telemetry/TelemetryDaemonTest.java
server/sonar-server/src/test/java/org/sonar/server/ui/ws/MarketplaceActionTest.java

index dc07aa60d502deca9e2a53b7caa80bedbfe8ca38..4f76a3cf800de8a68a6792cf17fd01b9b4a8b76f 100644 (file)
@@ -87,12 +87,13 @@ public class LiveMeasureDao implements Dao {
    * If Main Branch = 100 LOCs and the "largest long-lived branch" is 120 LOCs, I'm expecting to consider the value 120.
    * If Main Branch = 100 LOCs and the "largest long-lived branch" is 80 LOCs, I'm expecting to consider the value 100.
    */
-  public long sumNclocOfBiggestLongLivingBranch(DbSession dbSession) {
-    return sumNclocOfBiggestLongLivingBranch(dbSession, SumNclocDbQuery.builder().build());
+  public long sumNclocOfBiggestLongLivingBranch(DbSession dbSession, String organizationUuid) {
+    return sumNclocOfBiggestLongLivingBranch(dbSession, SumNclocDbQuery.builder().setOrganizationUuid(organizationUuid).build());
   }
 
   public long sumNclocOfBiggestLongLivingBranch(DbSession dbSession, SumNclocDbQuery dbQuery) {
-    Long ncloc = mapper(dbSession).sumNclocOfBiggestLongLivingBranch(NCLOC_KEY, KeyType.BRANCH, BranchType.LONG, dbQuery.getProjectUuidToExclude());
+    Long ncloc = mapper(dbSession).sumNclocOfBiggestLongLivingBranch(
+      NCLOC_KEY, KeyType.BRANCH, BranchType.LONG, dbQuery.getOrganizationUuid(), dbQuery.getProjectUuidToExclude());
     return ncloc == null ? 0L : ncloc;
   }
 
index ed3977d684bf2290cc1308542c59c1358a76476d..a8901407637dfbc02656511be32063c8e9c16d8e 100644 (file)
@@ -47,6 +47,7 @@ public interface LiveMeasureMapper {
     @Param("ncloc") String nclocKey,
     @Param("branch") KeyType branchOrPullRequest,
     @Param("branchType") BranchType branchType,
+    @Param("organizationUuid") String organizationUuid,
     @Nullable @Param("projectUuidToExclude") String projectUuidToExclude);
 
   void insert(
index b9e3a502632a02a5d30e7af0c4f49f446b4a094e..437ce88cee4e98ba87a3df0a76ead7f70f4a2f99 100644 (file)
@@ -22,12 +22,16 @@ package org.sonar.db.measure;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 public class SumNclocDbQuery {
 
   private final String projectUuidToExclude;
+  private final String organizationUuid;
 
   public SumNclocDbQuery(Builder builder) {
     projectUuidToExclude = builder.projectUuidToExclude;
+    organizationUuid = builder.organizationUuid;
   }
 
   @CheckForNull
@@ -35,12 +39,17 @@ public class SumNclocDbQuery {
     return projectUuidToExclude;
   }
 
+  public String getOrganizationUuid() {
+    return organizationUuid;
+  }
+
   public static Builder builder() {
     return new Builder();
   }
 
   public static class Builder {
     private String projectUuidToExclude;
+    private String organizationUuid;
 
     private Builder() {
       // to enforce use of builder()
@@ -51,7 +60,13 @@ public class SumNclocDbQuery {
       return this;
     }
 
+    public Builder setOrganizationUuid(String organizationUuid) {
+      this.organizationUuid = organizationUuid;
+      return this;
+    }
+
     public SumNclocDbQuery build() {
+      checkNotNull(organizationUuid);
       return new SumNclocDbQuery(this);
     }
   }
index 999aa79aec937d3fc43fdaccfcfaeb39cd4b2040..fc89e3ac806d9ab0fe21bfa8184f7a493c803e80 100644 (file)
 
   <select id="sumNclocOfBiggestLongLivingBranch" parameterType="map" resultType="long">
     select sum(sumncloc.maxncloc) from (
-    select b.project_uuid as projectUuid, max(lm.value) as maxncloc
-    from live_measures lm
-    inner join metrics m on m.id = lm.metric_id
-    inner join projects p on p.uuid = lm.component_uuid
-    inner join project_branches b on b.uuid = p.uuid
-    <where>
-    m.name = #{ncloc, jdbcType=VARCHAR}
-    and p.enabled = ${_true}
-    and p.scope = 'PRJ'
-    and p.qualifier = 'TRK'
-    and p.copy_component_uuid is null
-    and b.branch_type = #{branchType, jdbcType=VARCHAR}
-    and b.key_type = #{branch, jdbcType=VARCHAR}
-    <if test="projectUuidToExclude != null">
-      and b.project_uuid &lt;&gt; #{projectUuidToExclude,jdbcType=VARCHAR}
-    </if>
-    </where>
-    group by b.project_uuid
+      select b.project_uuid as projectUuid, max(lm.value) as maxncloc
+      from live_measures lm
+      inner join metrics m on m.id = lm.metric_id
+      inner join projects p on p.uuid = lm.component_uuid
+      inner join project_branches b on b.uuid = p.uuid
+      <where>
+        m.name = #{ncloc, jdbcType=VARCHAR}
+        and p.enabled = ${_true}
+        and p.scope = 'PRJ'
+        and p.qualifier = 'TRK'
+        and p.copy_component_uuid is null
+        and p.organization_uuid = #{organizationUuid, jdbcType=VARCHAR}
+        and b.branch_type = #{branchType, jdbcType=VARCHAR}
+        and b.key_type = #{branch, jdbcType=VARCHAR}
+        <if test="projectUuidToExclude != null">
+          and b.project_uuid &lt;&gt; #{projectUuidToExclude,jdbcType=VARCHAR}
+        </if>
+      </where>
+      group by b.project_uuid
     ) sumncloc
   </select>
 
index 51d83d6d79566e00b464f3a25fd649b809e875bf..5100e6791befe6cecddd1276112d3e74fc911335 100644 (file)
@@ -219,7 +219,7 @@ public class LiveMeasureDaoTest {
     db.measures().insertLiveMeasure(projectWithLinesButNoLoc, lines, m -> m.setValue(365d));
     db.measures().insertLiveMeasure(projectWithLinesButNoLoc, ncloc, m -> m.setValue(0d));
 
-    long result = underTest.sumNclocOfBiggestLongLivingBranch(db.getSession());
+    long result = underTest.sumNclocOfBiggestLongLivingBranch(db.getSession(), organization.getUuid());
 
     assertThat(result).isEqualTo(10L + 200L);
   }
@@ -229,7 +229,7 @@ public class LiveMeasureDaoTest {
     db.measures().insertMetric(m -> m.setKey("ncloc").setValueType(INT.toString()));
     db.measures().insertMetric(m -> m.setKey("lines").setValueType(INT.toString()));
 
-    long result = underTest.sumNclocOfBiggestLongLivingBranch(db.getSession());
+    long result = underTest.sumNclocOfBiggestLongLivingBranch(db.getSession(), db.getDefaultOrganization().getUuid());
 
     assertThat(result).isEqualTo(0L);
   }
@@ -252,7 +252,11 @@ public class LiveMeasureDaoTest {
     db.measures().insertLiveMeasure(projectToExclude, ncloc, m -> m.setValue(300d));
     db.measures().insertLiveMeasure(projectToExcludeBranch, ncloc, m -> m.setValue(400d));
 
-    long result = underTest.sumNclocOfBiggestLongLivingBranch(db.getSession(), SumNclocDbQuery.builder().setProjectUuidToExclude(projectToExclude.uuid()).build());
+    SumNclocDbQuery query = SumNclocDbQuery.builder()
+      .setOrganizationUuid(organization.getUuid())
+      .setProjectUuidToExclude(projectToExclude.uuid())
+      .build();
+    long result = underTest.sumNclocOfBiggestLongLivingBranch(db.getSession(), query);
 
     assertThat(result).isEqualTo(10L + 200L);
   }
index 3fb5eec773331d6787aec6daf20f70f3dd2e0dbc..b0b9d3a4e56a001c8c257b0b8b572754c93cb486 100644 (file)
@@ -34,6 +34,7 @@ import org.sonar.db.DbSession;
 import org.sonar.server.es.SearchOptions;
 import org.sonar.server.measure.index.ProjectMeasuresIndex;
 import org.sonar.server.measure.index.ProjectMeasuresStatistics;
+import org.sonar.server.organization.DefaultOrganizationProvider;
 import org.sonar.server.telemetry.TelemetryData.Database;
 import org.sonar.server.user.index.UserIndex;
 import org.sonar.server.user.index.UserQuery;
@@ -46,15 +47,17 @@ public class TelemetryDataLoader {
   private final UserIndex userIndex;
   private final ProjectMeasuresIndex projectMeasuresIndex;
   private final PlatformEditionProvider editionProvider;
+  private final DefaultOrganizationProvider defaultOrganizationProvider;
 
   public TelemetryDataLoader(Server server, DbClient dbClient, PluginRepository pluginRepository, UserIndex userIndex, ProjectMeasuresIndex projectMeasuresIndex,
-    PlatformEditionProvider editionProvider) {
+    PlatformEditionProvider editionProvider, DefaultOrganizationProvider defaultOrganizationProvider) {
     this.server = server;
     this.dbClient = dbClient;
     this.pluginRepository = pluginRepository;
     this.userIndex = userIndex;
     this.projectMeasuresIndex = projectMeasuresIndex;
     this.editionProvider = editionProvider;
+    this.defaultOrganizationProvider = defaultOrganizationProvider;
   }
 
   public TelemetryData load() {
@@ -73,7 +76,7 @@ public class TelemetryDataLoader {
     try (DbSession dbSession = dbClient.openSession(false)) {
       data.setDatabase(loadDatabaseMetadata(dbSession));
       data.setUsingBranches(dbClient.branchDao().hasNonMainBranches(dbSession));
-      data.setNcloc(dbClient.liveMeasureDao().sumNclocOfBiggestLongLivingBranch(dbSession));
+      data.setNcloc(dbClient.liveMeasureDao().sumNclocOfBiggestLongLivingBranch(dbSession, defaultOrganizationProvider.get().getUuid()));
     }
 
     return data.build();
index 9d20353d4f898c03b0261458449295714501691e..da0b55884aaa8b46aa2394f3466e261897e338fe 100644 (file)
@@ -25,6 +25,7 @@ import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.db.DbClient;
 import org.sonar.db.DbSession;
+import org.sonar.server.organization.DefaultOrganizationProvider;
 import org.sonar.server.user.UserSession;
 import org.sonarqube.ws.Navigation;
 
@@ -34,11 +35,13 @@ public class MarketplaceAction implements NavigationWsAction {
   private final UserSession userSession;
   private final Server server;
   private final DbClient dbClient;
+  private final DefaultOrganizationProvider defaultOrganizationProvider;
 
-  public MarketplaceAction(UserSession userSession, Server server, DbClient dbClient) {
+  public MarketplaceAction(UserSession userSession, Server server, DbClient dbClient, DefaultOrganizationProvider defaultOrganizationProvider) {
     this.userSession = userSession;
     this.server = server;
     this.dbClient = dbClient;
+    this.defaultOrganizationProvider = defaultOrganizationProvider;
   }
 
   @Override
@@ -67,7 +70,7 @@ public class MarketplaceAction implements NavigationWsAction {
 
   private long computeNcloc() {
     try (DbSession dbSession = dbClient.openSession(false)) {
-      return dbClient.liveMeasureDao().sumNclocOfBiggestLongLivingBranch(dbSession);
+      return dbClient.liveMeasureDao().sumNclocOfBiggestLongLivingBranch(dbSession, defaultOrganizationProvider.get().getUuid());
     }
   }
 }
index f13ed128e6de418da1287098db82fc474c1d8010..e64eb8cc79224e577cd12fb1a28969e79cfe544c 100644 (file)
@@ -45,6 +45,7 @@ import org.sonar.db.metric.MetricDto;
 import org.sonar.server.es.EsTester;
 import org.sonar.server.measure.index.ProjectMeasuresIndex;
 import org.sonar.server.measure.index.ProjectMeasuresIndexer;
+import org.sonar.server.organization.DefaultOrganizationProviderImpl;
 import org.sonar.server.property.InternalProperties;
 import org.sonar.server.property.MapInternalProperties;
 import org.sonar.server.tester.UserSessionRule;
@@ -102,7 +103,7 @@ public class TelemetryDaemonTest {
   private PlatformEditionProvider editionProvider = mock(PlatformEditionProvider.class);
 
   private final TelemetryDataLoader dataLoader = new TelemetryDataLoader(server, db.getDbClient(), pluginRepository, new UserIndex(es.client(), system2),
-    new ProjectMeasuresIndex(es.client(), null, system2), editionProvider);
+    new ProjectMeasuresIndex(es.client(), null, system2), editionProvider, new DefaultOrganizationProviderImpl(db.getDbClient()));
   private TelemetryDaemon underTest = new TelemetryDaemon(dataLoader, client, settings.asConfig(), internalProperties, system2);
 
   @After
index ece68f0974244a2f347f320c8b72da5cf97567c7..873e0fc9878cde80852f7e91367dd828bb884309 100644 (file)
@@ -32,6 +32,7 @@ import org.sonar.db.component.ComponentDto;
 import org.sonar.db.metric.MetricDto;
 import org.sonar.server.exceptions.ForbiddenException;
 import org.sonar.server.exceptions.UnauthorizedException;
+import org.sonar.server.organization.DefaultOrganizationProviderImpl;
 import org.sonar.server.tester.UserSessionRule;
 import org.sonar.server.ws.TestRequest;
 import org.sonar.server.ws.WsActionTester;
@@ -57,7 +58,7 @@ public class MarketplaceActionTest {
 
   private Server server = mock(Server.class);
   private DbClient dbClient = db.getDbClient();
-  private MarketplaceAction underTest = new MarketplaceAction(userSessionRule, server, dbClient);
+  private MarketplaceAction underTest = new MarketplaceAction(userSessionRule, server, dbClient, new DefaultOrganizationProviderImpl(dbClient));
 
   private WsActionTester ws = new WsActionTester(underTest);