aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralain <108417558+alain-kermis-sonarsource@users.noreply.github.com>2022-09-28 14:29:30 +0200
committersonartech <sonartech@sonarsource.com>2022-09-28 20:04:08 +0000
commit98aa88962583e2e8f59a5dd110aaa980282e6fe5 (patch)
tree05debe672be885aa58a100ace56162c4fc68a89a
parentbb10a3475add71296daadd37480798d7f961e6ec (diff)
downloadsonarqube-98aa88962583e2e8f59a5dd110aaa980282e6fe5.tar.gz
sonarqube-98aa88962583e2e8f59a5dd110aaa980282e6fe5.zip
SONAR-17195 Move unanalyzed language flags to project level for telemetry
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java4
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java4
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java2
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/component/PrBranchAnalyzedLanguageCountByProjectDto.java (renamed from server/sonar-db-dao/src/main/java/org/sonar/db/component/PrAndBranchCountByProjectDto.java)20
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml16
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/component/BranchDaoTest.java19
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryData.java39
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryDataJsonWriter.java5
-rw-r--r--server/sonar-server-common/src/test/java/org/sonar/server/telemetry/TelemetryDataJsonWriterTest.java45
-rw-r--r--server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java34
-rw-r--r--server/sonar-webserver-core/src/test/java/org/sonar/server/telemetry/TelemetryDataLoaderImplTest.java20
11 files changed, 113 insertions, 95 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java b/server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java
index 02a2576417d..14da008f50e 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java
@@ -56,7 +56,7 @@ import org.sonar.db.component.ComponentMapper;
import org.sonar.db.component.ComponentWithModuleUuidDto;
import org.sonar.db.component.FilePathWithHashDto;
import org.sonar.db.component.KeyWithUuidDto;
-import org.sonar.db.component.PrAndBranchCountByProjectDto;
+import org.sonar.db.component.PrBranchAnalyzedLanguageCountByProjectDto;
import org.sonar.db.component.ProjectLinkMapper;
import org.sonar.db.component.ResourceDto;
import org.sonar.db.component.ScrapAnalysisPropertyDto;
@@ -224,7 +224,7 @@ public class MyBatis {
confBuilder.loadAlias("ProjectBadgeToken", ProjectBadgeTokenDto.class);
confBuilder.loadAlias("AnalysisPropertyValuePerProject", AnalysisPropertyValuePerProject.class);
confBuilder.loadAlias("ProjectAlmKeyAndProject", ProjectAlmKeyAndProject.class);
- confBuilder.loadAlias("PrAndBranchCountByProjectDto", PrAndBranchCountByProjectDto.class);
+ confBuilder.loadAlias("PrAndBranchCountByProjectDto", PrBranchAnalyzedLanguageCountByProjectDto.class);
confBuilder.loadAlias("ProjectMapping", ProjectMappingDto.class);
confBuilder.loadAlias("ProjectMeasure", ProjectMeasureDto.class);
confBuilder.loadAlias("PurgeableAnalysis", PurgeableAnalysisDto.class);
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java
index 3ae1a2ce788..38cca4e8201 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDao.java
@@ -101,8 +101,8 @@ public class BranchDao implements Dao {
return mapper(dbSession).selectByProjectUuid(project.getUuid());
}
- public List<PrAndBranchCountByProjectDto> countPrAndBranchByProjectUuid(DbSession dbSession){
- return mapper(dbSession).countPrAndBranchByProjectUuid();
+ public List<PrBranchAnalyzedLanguageCountByProjectDto> countPrBranchAnalyzedLanguageByProjectUuid(DbSession dbSession){
+ return mapper(dbSession).countPrBranchAnalyzedLanguageByProjectUuid();
}
public List<BranchDto> selectByUuids(DbSession session, Collection<String> uuids) {
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java
index 75159c2b668..9f19580941c 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchMapper.java
@@ -47,7 +47,7 @@ public interface BranchMapper {
Collection<BranchDto> selectByProjectUuid(@Param("projectUuid") String projectUuid);
- List<PrAndBranchCountByProjectDto> countPrAndBranchByProjectUuid();
+ List<PrBranchAnalyzedLanguageCountByProjectDto> countPrBranchAnalyzedLanguageByProjectUuid();
List<BranchDto> selectByBranchKeys(@Param("branchKeyByProjectUuid") Map<String, String> branchKeyByProjectUuid);
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/PrAndBranchCountByProjectDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/PrBranchAnalyzedLanguageCountByProjectDto.java
index ef9149bfb8c..c4aa693479d 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/PrAndBranchCountByProjectDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/PrBranchAnalyzedLanguageCountByProjectDto.java
@@ -19,11 +19,13 @@
*/
package org.sonar.db.component;
-public class PrAndBranchCountByProjectDto {
+public class PrBranchAnalyzedLanguageCountByProjectDto {
private String projectUuid = null;
private Long pullRequest = null;
private Long branch = null;
+ private Long unanalyzedCCount = null;
+ private Long unanalyzedCppCount = null;
public String getProjectUuid() {
return projectUuid;
@@ -48,4 +50,20 @@ public class PrAndBranchCountByProjectDto {
public void setBranch(Long branch) {
this.branch = branch;
}
+
+ public Long getUnanalyzedCCount() {
+ return unanalyzedCCount;
+ }
+
+ public void setUnanalyzedCCount(Long unanalyzedCCount) {
+ this.unanalyzedCCount = unanalyzedCCount;
+ }
+
+ public Long getUnanalyzedCppCount() {
+ return unanalyzedCppCount;
+ }
+
+ public void setUnanalyzedCppCount(Long unanalyzedCppCount) {
+ this.unanalyzedCppCount = unanalyzedCppCount;
+ }
}
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml
index 3b7c0abe681..0cdef645451 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/component/BranchMapper.xml
@@ -111,11 +111,19 @@
pb.project_uuid = #{projectUuid, jdbcType=VARCHAR}
</select>
- <select id="countPrAndBranchByProjectUuid" resultType="org.sonar.db.component.PrAndBranchCountByProjectDto">
- select project_uuid as projectUuid,
+ <select id="countPrBranchAnalyzedLanguageByProjectUuid" resultType="org.sonar.db.component.PrBranchAnalyzedLanguageCountByProjectDto">
+ select pb.project_uuid as projectUuid,
sum(case when pb.branch_type = 'PULL_REQUEST' then 1 else 0 end) as pullRequest,
- sum(case when pb.branch_type = 'BRANCH' then 1 else 0 end) as branch
- from project_branches pb
+ sum(case when pb.branch_type = 'BRANCH' then 1 else 0 end) as branch,
+ (
+ select count(1) as counter from live_measures lm
+ inner join metrics m on m.uuid = lm.metric_uuid and m.name = 'unanalyzed_c'
+ where lm.project_uuid = pb.project_uuid) as unanalyzedCCount,
+ (
+ select count(1) as counter from live_measures lm
+ inner join metrics m on m.uuid = lm.metric_uuid and m.name = 'unanalyzed_cpp'
+ where lm.project_uuid = pb.project_uuid) as unanalyzedCppCount
+ from project_branches pb
group by pb.project_uuid
</select>
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/component/BranchDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/component/BranchDaoTest.java
index b7bb8b9bdb8..e58113a3212 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/component/BranchDaoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/component/BranchDaoTest.java
@@ -38,6 +38,7 @@ import org.sonar.api.impl.utils.TestSystem2;
import org.sonar.api.utils.System2;
import org.sonar.db.DbSession;
import org.sonar.db.DbTester;
+import org.sonar.db.metric.MetricDto;
import org.sonar.db.project.ProjectDto;
import org.sonar.db.protobuf.DbProjectBranches;
@@ -562,12 +563,20 @@ public class BranchDaoTest {
ComponentDto project3 = db.components().insertPrivateProject();
db.components().insertProjectBranch(project3, b -> b.setBranchType(BRANCH).setKey("p3-branch-1"));
- assertThat(underTest.countPrAndBranchByProjectUuid(db.getSession()))
- .extracting(PrAndBranchCountByProjectDto::getProjectUuid, PrAndBranchCountByProjectDto::getBranch, PrAndBranchCountByProjectDto::getPullRequest)
+ MetricDto unanalyzedC = db.measures().insertMetric(m -> m.setKey("unanalyzed_c"));
+ MetricDto unanalyzedCpp = db.measures().insertMetric(m -> m.setKey("unanalyzed_cpp"));
+ db.measures().insertLiveMeasure(project1, unanalyzedC);
+ db.measures().insertLiveMeasure(project1, unanalyzedCpp);
+ db.measures().insertLiveMeasure(project2, unanalyzedCpp);
+ db.measures().insertLiveMeasure(project3, unanalyzedC);
+
+ assertThat(underTest.countPrBranchAnalyzedLanguageByProjectUuid(db.getSession()))
+ .extracting(PrBranchAnalyzedLanguageCountByProjectDto::getProjectUuid, PrBranchAnalyzedLanguageCountByProjectDto::getBranch, PrBranchAnalyzedLanguageCountByProjectDto::getPullRequest,
+ PrBranchAnalyzedLanguageCountByProjectDto::getUnanalyzedCCount, PrBranchAnalyzedLanguageCountByProjectDto::getUnanalyzedCppCount)
.containsExactlyInAnyOrder(
- tuple(project1.uuid(), 3L, 3L),
- tuple(project2.uuid(), 1L, 1L),
- tuple(project3.uuid(), 2L, 0L)
+ tuple(project1.uuid(), 3L, 3L, 1L, 1L),
+ tuple(project2.uuid(), 1L, 1L, 0L, 1L),
+ tuple(project3.uuid(), 2L, 0L, 1L, 0L)
);
}
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryData.java b/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryData.java
index 09b2c1ee5a1..d8caa44576c 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryData.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryData.java
@@ -41,8 +41,6 @@ public class TelemetryData {
private final Long installationDate;
private final String installationVersion;
private final boolean inDocker;
- private final Boolean hasUnanalyzedC;
- private final Boolean hasUnanalyzedCpp;
private final List<String> customSecurityConfigs;
private final List<UserTelemetryDto> users;
private final List<Project> projects;
@@ -58,8 +56,6 @@ public class TelemetryData {
installationDate = builder.installationDate;
installationVersion = builder.installationVersion;
inDocker = builder.inDocker;
- hasUnanalyzedC = builder.hasUnanalyzedC;
- hasUnanalyzedCpp = builder.hasUnanalyzedCpp;
customSecurityConfigs = builder.customSecurityConfigs == null ? emptyList() : builder.customSecurityConfigs;
users = builder.users;
projects = builder.projects;
@@ -102,14 +98,6 @@ public class TelemetryData {
return inDocker;
}
- public Optional<Boolean> hasUnanalyzedC() {
- return Optional.ofNullable(hasUnanalyzedC);
- }
-
- public Optional<Boolean> hasUnanalyzedCpp() {
- return Optional.ofNullable(hasUnanalyzedCpp);
- }
-
public List<String> getCustomSecurityConfigs() {
return customSecurityConfigs;
}
@@ -140,8 +128,6 @@ public class TelemetryData {
private Long installationDate;
private String installationVersion;
private boolean inDocker = false;
- private Boolean hasUnanalyzedC;
- private Boolean hasUnanalyzedCpp;
private List<String> customSecurityConfigs;
private List<UserTelemetryDto> users;
private List<Project> projects;
@@ -196,16 +182,6 @@ public class TelemetryData {
return this;
}
- Builder setHasUnanalyzedC(@Nullable Boolean hasUnanalyzedC) {
- this.hasUnanalyzedC = hasUnanalyzedC;
- return this;
- }
-
- Builder setHasUnanalyzedCpp(@Nullable Boolean hasUnanalyzedCpp) {
- this.hasUnanalyzedCpp = hasUnanalyzedCpp;
- return this;
- }
-
Builder setCustomSecurityConfigs(List<String> customSecurityConfigs) {
this.customSecurityConfigs = customSecurityConfigs;
return this;
@@ -288,14 +264,19 @@ public class TelemetryData {
private final String projectUuid;
private final Long branchCount;
private final Long pullRequestCount;
+ private final Boolean hasUnanalyzedC;
+ private final Boolean hasUnanalyzedCpp;
private final String scm;
private final String ci;
private final String devopsPlatform;
- ProjectStatistics(String projectUuid, Long branchCount, Long pullRequestCount, @Nullable String scm, @Nullable String ci, @Nullable String devopsPlatform) {
+ ProjectStatistics(String projectUuid, Long branchCount, Long pullRequestCount, @Nullable Boolean hasUnanalyzedC, @Nullable Boolean hasUnanalyzedCpp,
+ @Nullable String scm, @Nullable String ci, @Nullable String devopsPlatform) {
this.projectUuid = projectUuid;
this.branchCount = branchCount;
this.pullRequestCount = pullRequestCount;
+ this.hasUnanalyzedC = hasUnanalyzedC;
+ this.hasUnanalyzedCpp = hasUnanalyzedCpp;
this.scm = scm;
this.ci = ci;
this.devopsPlatform = devopsPlatform;
@@ -327,5 +308,13 @@ public class TelemetryData {
public String getDevopsPlatform() {
return devopsPlatform;
}
+
+ public Optional<Boolean> hasUnanalyzedC() {
+ return Optional.ofNullable(hasUnanalyzedC);
+ }
+
+ public Optional<Boolean> hasUnanalyzedCpp() {
+ return Optional.ofNullable(hasUnanalyzedCpp);
+ }
}
}
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryDataJsonWriter.java b/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryDataJsonWriter.java
index c6ab6177ff8..8af18b0e16e 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryDataJsonWriter.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/telemetry/TelemetryDataJsonWriter.java
@@ -61,9 +61,6 @@ public class TelemetryDataJsonWriter {
json.endArray();
}
- statistics.hasUnanalyzedC().ifPresent(hasUnanalyzedC -> json.prop("hasUnanalyzedC", hasUnanalyzedC));
- statistics.hasUnanalyzedCpp().ifPresent(hasUnanalyzedCpp -> json.prop("hasUnanalyzedCpp", hasUnanalyzedCpp));
-
if (statistics.getInstallationDate() != null) {
json.prop("installationDate", toUtc(statistics.getInstallationDate()));
}
@@ -132,6 +129,8 @@ public class TelemetryDataJsonWriter {
json.prop("scm", project.getScm());
json.prop("ci", project.getCi());
json.prop("devopsPlatform", project.getDevopsPlatform());
+ project.hasUnanalyzedC().ifPresent(hasUnanalyzedC -> json.prop("hasUnanalyzedC", hasUnanalyzedC));
+ project.hasUnanalyzedCpp().ifPresent(hasUnanalyzedCpp -> json.prop("hasUnanalyzedCpp", hasUnanalyzedCpp));
json.endObject();
});
json.endArray();
diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/telemetry/TelemetryDataJsonWriterTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/telemetry/TelemetryDataJsonWriterTest.java
index 4d6d482f62d..6bc9a0c35fe 100644
--- a/server/sonar-server-common/src/test/java/org/sonar/server/telemetry/TelemetryDataJsonWriterTest.java
+++ b/server/sonar-server-common/src/test/java/org/sonar/server/telemetry/TelemetryDataJsonWriterTest.java
@@ -230,21 +230,6 @@ public class TelemetryDataJsonWriterTest {
}
@Test
- public void writes_has_unanalyzed_languages() {
- TelemetryData data = SOME_TELEMETRY_DATA
- .setHasUnanalyzedC(true)
- .setHasUnanalyzedCpp(false)
- .build();
-
- String json = writeTelemetryData(data);
-
- assertJson(json).isSimilarTo("{" +
- " \"hasUnanalyzedC\":true," +
- " \"hasUnanalyzedCpp\":false," +
- "}");
- }
-
- @Test
public void writes_security_custom_config() {
TelemetryData data = SOME_TELEMETRY_DATA
.setCustomSecurityConfigs(Arrays.asList("php", "java"))
@@ -325,9 +310,9 @@ public class TelemetryDataJsonWriterTest {
}
@Test
- public void writes_all_projects_stats() {
+ public void writes_all_projects_stats_with_analyzed_languages() {
TelemetryData data = SOME_TELEMETRY_DATA
- .setProjectStatistics(getProjectStats())
+ .setProjectStatistics(getProjectStats(true))
.build();
String json = writeTelemetryData(data);
@@ -340,7 +325,9 @@ public class TelemetryDataJsonWriterTest {
" \"pullRequestCount\": 2," +
" \"scm\": \"scm-0\"," +
" \"ci\": \"ci-0\"," +
- " \"devopsPlatform\": \"devops-0\"" +
+ " \"devopsPlatform\": \"devops-0\"," +
+ " \"hasUnanalyzedC\": true," +
+ " \"hasUnanalyzedCpp\": false" +
" }," +
" {" +
" \"projectUuid\": \"uuid-1\"," +
@@ -348,7 +335,9 @@ public class TelemetryDataJsonWriterTest {
" \"pullRequestCount\": 4," +
" \"scm\": \"scm-1\"," +
" \"ci\": \"ci-1\"," +
- " \"devopsPlatform\": \"devops-1\"" +
+ " \"devopsPlatform\": \"devops-1\"," +
+ " \"hasUnanalyzedC\": false," +
+ " \"hasUnanalyzedCpp\": true" +
" }," +
" {" +
" \"projectUuid\": \"uuid-2\"," +
@@ -356,12 +345,24 @@ public class TelemetryDataJsonWriterTest {
" \"pullRequestCount\": 6," +
" \"scm\": \"scm-2\"," +
" \"ci\": \"ci-2\"," +
- " \"devopsPlatform\": \"devops-2\"" +
+ " \"devopsPlatform\": \"devops-2\"," +
+ " \"hasUnanalyzedC\": true," +
+ " \"hasUnanalyzedCpp\": false" +
" }" +
" ]" +
"}");
}
+ @Test
+ public void writes_all_projects_stats_with_unanalyzed_languages() {
+ TelemetryData data = SOME_TELEMETRY_DATA
+ .setProjectStatistics(getProjectStats(false))
+ .build();
+
+ String json = writeTelemetryData(data);
+ assertThat(json).doesNotContain("hasUnanalyzedC", "hasUnanalyzedCpp");
+ }
+
@NotNull
private static List<UserTelemetryDto> getUsers() {
return IntStream.range(0, 3)
@@ -374,8 +375,8 @@ public class TelemetryDataJsonWriterTest {
return IntStream.range(0, 3).mapToObj(i -> new TelemetryData.Project("uuid-" + i, 1L, "lang-" + i, (i + 1L) * 2L)).collect(Collectors.toList());
}
- private List<TelemetryData.ProjectStatistics> getProjectStats() {
- return IntStream.range(0, 3).mapToObj(i -> new TelemetryData.ProjectStatistics("uuid-" + i, (i + 1L) * 2L, (i + 1L) * 2L, "scm-" + i, "ci-" + i, "devops-" + i))
+ private List<TelemetryData.ProjectStatistics> getProjectStats(boolean hasUnanalyzedLanguages) {
+ return IntStream.range(0, 3).mapToObj(i -> new TelemetryData.ProjectStatistics("uuid-" + i, (i + 1L) * 2L, (i + 1L) * 2L, hasUnanalyzedLanguages ? i % 2 == 0 : null, hasUnanalyzedLanguages ? i % 2 != 0 : null, "scm-" + i, "ci-" + i, "devops-" + i))
.collect(Collectors.toList());
}
diff --git a/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java b/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java
index 4c643684752..258e0128442 100644
--- a/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java
+++ b/server/sonar-webserver-core/src/main/java/org/sonar/server/telemetry/TelemetryDataLoaderImpl.java
@@ -43,7 +43,7 @@ import org.sonar.db.DbSession;
import org.sonar.db.alm.setting.ALM;
import org.sonar.db.alm.setting.ProjectAlmKeyAndProject;
import org.sonar.db.component.AnalysisPropertyValuePerProject;
-import org.sonar.db.component.PrAndBranchCountByProjectDto;
+import org.sonar.db.component.PrBranchAnalyzedLanguageCountByProjectDto;
import org.sonar.db.measure.ProjectMeasureDto;
import org.sonar.server.platform.DockerSupport;
import org.sonar.server.property.InternalProperties;
@@ -58,8 +58,6 @@ import static org.sonar.core.config.CorePropertyDefinitions.SONAR_ANALYSIS_DETEC
import static org.sonar.core.platform.EditionProvider.Edition.COMMUNITY;
import static org.sonar.core.platform.EditionProvider.Edition.DATACENTER;
import static org.sonar.core.platform.EditionProvider.Edition.ENTERPRISE;
-import static org.sonar.server.metric.UnanalyzedLanguageMetrics.UNANALYZED_CPP_KEY;
-import static org.sonar.server.metric.UnanalyzedLanguageMetrics.UNANALYZED_C_KEY;
@ServerSide
public class TelemetryDataLoaderImpl implements TelemetryDataLoader {
@@ -112,27 +110,30 @@ public class TelemetryDataLoaderImpl implements TelemetryDataLoader {
data.setPlugins(plugins);
try (DbSession dbSession = dbClient.openSession(false)) {
data.setDatabase(loadDatabaseMetadata(dbSession));
- long numberOfUnanalyzedCMeasures = dbClient.liveMeasureDao().countProjectsHavingMeasure(dbSession, UNANALYZED_C_KEY);
- long numberOfUnanalyzedCppMeasures = dbClient.liveMeasureDao().countProjectsHavingMeasure(dbSession, UNANALYZED_CPP_KEY);
- editionProvider.get()
- .filter(edition -> edition.equals(COMMUNITY))
- .ifPresent(edition -> {
- data.setHasUnanalyzedC(numberOfUnanalyzedCMeasures > 0);
- data.setHasUnanalyzedCpp(numberOfUnanalyzedCppMeasures > 0);
- });
Map<String, String> scmByProject = getAnalysisPropertyByProject(dbSession, SONAR_ANALYSIS_DETECTEDSCM);
Map<String, String> ciByProject = getAnalysisPropertyByProject(dbSession, SONAR_ANALYSIS_DETECTEDCI);
Map<String, ProjectAlmKeyAndProject> almAndUrlByProject = getAlmAndUrlByProject(dbSession);
List<String> projectUuids = dbClient.projectDao().selectAllProjectUuids(dbSession);
- Map<String, PrAndBranchCountByProjectDto> prAndBranchCountByProjects = dbClient.branchDao().countPrAndBranchByProjectUuid(dbSession)
- .stream().collect(Collectors.toMap(PrAndBranchCountByProjectDto::getProjectUuid, Function.identity()));
+ Map<String, PrBranchAnalyzedLanguageCountByProjectDto> prAndBranchCountByProjects = dbClient.branchDao().countPrBranchAnalyzedLanguageByProjectUuid(dbSession)
+ .stream().collect(Collectors.toMap(PrBranchAnalyzedLanguageCountByProjectDto::getProjectUuid, Function.identity()));
+ boolean isCommunityEdition = editionProvider.get().filter(edition -> edition.equals(COMMUNITY)).isPresent();
List<TelemetryData.ProjectStatistics> projectStatistics = new ArrayList<>();
for (String projectUuid : projectUuids) {
- Long branchCount = Optional.ofNullable(prAndBranchCountByProjects.get(projectUuid)).map(PrAndBranchCountByProjectDto::getBranch).orElse(0L);
- Long pullRequestCount = Optional.ofNullable(prAndBranchCountByProjects.get(projectUuid)).map(PrAndBranchCountByProjectDto::getPullRequest).orElse(0L);
+ Optional<PrBranchAnalyzedLanguageCountByProjectDto> counts = ofNullable(prAndBranchCountByProjects.get(projectUuid));
+
+ Long branchCount = counts.map(PrBranchAnalyzedLanguageCountByProjectDto::getBranch).orElse(0L);
+ Long pullRequestCount = counts.map(PrBranchAnalyzedLanguageCountByProjectDto::getPullRequest).orElse(0L);
+
+ Boolean hasUnanalyzedCMeasures = null;
+ Boolean hasUnanalyzedCppMeasures = null;
+ if (isCommunityEdition) {
+ hasUnanalyzedCMeasures = counts.map(PrBranchAnalyzedLanguageCountByProjectDto::getUnanalyzedCCount).orElse(0L) > 0;
+ hasUnanalyzedCppMeasures = counts.map(PrBranchAnalyzedLanguageCountByProjectDto::getUnanalyzedCppCount).orElse(0L) > 0;
+ }
+
String scm = Optional.ofNullable(scmByProject.get(projectUuid)).orElse(UNDETECTED);
String ci = Optional.ofNullable(ciByProject.get(projectUuid)).orElse(UNDETECTED);
String devopsPlatform = null;
@@ -142,7 +143,8 @@ public class TelemetryDataLoaderImpl implements TelemetryDataLoader {
}
devopsPlatform = Optional.ofNullable(devopsPlatform).orElse(UNDETECTED);
- projectStatistics.add(new TelemetryData.ProjectStatistics(projectUuid, branchCount, pullRequestCount, scm, ci, devopsPlatform));
+ projectStatistics.add(
+ new TelemetryData.ProjectStatistics(projectUuid, branchCount, pullRequestCount, hasUnanalyzedCMeasures, hasUnanalyzedCppMeasures, scm, ci, devopsPlatform));
}
data.setProjectStatistics(projectStatistics);
diff --git a/server/sonar-webserver-core/src/test/java/org/sonar/server/telemetry/TelemetryDataLoaderImplTest.java b/server/sonar-webserver-core/src/test/java/org/sonar/server/telemetry/TelemetryDataLoaderImplTest.java
index 1ef601422d5..6af70b31a0b 100644
--- a/server/sonar-webserver-core/src/test/java/org/sonar/server/telemetry/TelemetryDataLoaderImplTest.java
+++ b/server/sonar-webserver-core/src/test/java/org/sonar/server/telemetry/TelemetryDataLoaderImplTest.java
@@ -322,8 +322,9 @@ public class TelemetryDataLoaderImplTest {
TelemetryData data = communityUnderTest.load();
- assertThat(data.hasUnanalyzedC().get()).isTrue();
- assertThat(data.hasUnanalyzedCpp().get()).isTrue();
+ assertThat(data.getProjectStatistics())
+ .extracting(TelemetryData.ProjectStatistics::hasUnanalyzedC, TelemetryData.ProjectStatistics::hasUnanalyzedCpp)
+ .containsExactlyInAnyOrder(tuple(Optional.of(true), Optional.of(true)), tuple(Optional.of(true), Optional.of(false)));
}
@Test
@@ -338,18 +339,9 @@ public class TelemetryDataLoaderImplTest {
TelemetryData data = communityUnderTest.load();
- assertThat(data.hasUnanalyzedC()).isEmpty();
- assertThat(data.hasUnanalyzedCpp()).isEmpty();
- }
-
- @Test
- public void unanalyzed_languages_flags_are_set_to_false_when_no_unanalyzed_languages_and_edition_is_community() {
- when(editionProvider.get()).thenReturn(Optional.of(COMMUNITY));
-
- TelemetryData data = communityUnderTest.load();
-
- assertThat(data.hasUnanalyzedC().get()).isFalse();
- assertThat(data.hasUnanalyzedCpp().get()).isFalse();
+ assertThat(data.getProjectStatistics())
+ .extracting(TelemetryData.ProjectStatistics::hasUnanalyzedC, TelemetryData.ProjectStatistics::hasUnanalyzedCpp)
+ .containsExactlyInAnyOrder(tuple(Optional.empty(), Optional.empty()), tuple(Optional.empty(), Optional.empty()));
}
@Test