diff options
author | Michal Duda <michal.duda@sonarsource.com> | 2021-02-26 15:03:43 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2021-03-04 20:12:49 +0000 |
commit | bd5b4a869dfe128ccbebc86af58c4a4bb77962e1 (patch) | |
tree | 05afc91040043017e2252eaa82d93a0c1a63c950 /server/sonar-server-common | |
parent | d59b2466752eed8e91f178a346b5da9b86e80d3e (diff) | |
download | sonarqube-bd5b4a869dfe128ccbebc86af58c4a4bb77962e1.tar.gz sonarqube-bd5b4a869dfe128ccbebc86af58c4a4bb77962e1.zip |
SONAR-14525 include SCM usage information in telemetry
Diffstat (limited to 'server/sonar-server-common')
3 files changed, 49 insertions, 4 deletions
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 4710e3f9d75..b625d1aead5 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 @@ -43,6 +43,7 @@ public class TelemetryData { private final Map<String, Long> almIntegrationCountByAlm; private final Map<String, Long> nclocByLanguage; private final List<String> externalAuthenticationProviders; + private final Map<String, Long> projectCountByScm; private final EditionProvider.Edition edition; private final String licenseType; private final Long installationDate; @@ -73,6 +74,7 @@ public class TelemetryData { hasUnanalyzedCpp = builder.hasUnanalyzedCpp; customSecurityConfigs = builder.customSecurityConfigs == null ? emptyList() : builder.customSecurityConfigs; externalAuthenticationProviders = builder.externalAuthenticationProviders; + projectCountByScm = builder.projectCountByScm; } public String getServerId() { @@ -155,6 +157,10 @@ public class TelemetryData { return externalAuthenticationProviders; } + public Map<String, Long> getProjectCountByScm() { + return projectCountByScm; + } + static Builder builder() { return new Builder(); } @@ -178,6 +184,8 @@ public class TelemetryData { private Boolean hasUnanalyzedCpp; private List<String> customSecurityConfigs; private List<String> externalAuthenticationProviders; + private Map<String, Long> projectCountByScm; + private Builder() { // enforce static factory method @@ -188,6 +196,11 @@ public class TelemetryData { return this; } + Builder setProjectCountByScm(Map<String, Long> projectCountByScm) { + this.projectCountByScm = projectCountByScm; + return this; + } + Builder setServerId(String serverId) { this.serverId = serverId; return this; @@ -283,6 +296,7 @@ public class TelemetryData { requireNonNull(database); requireNonNull(usingBranches); requireNonNull(externalAuthenticationProviders); + requireNonNull(projectCountByScm); return new TelemetryData(this); } 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 17366c51ebe..e675e1dc101 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 @@ -26,6 +26,8 @@ import static org.sonar.api.measures.CoreMetrics.NCLOC_KEY; public class TelemetryDataJsonWriter { + public static final String COUNT = "count"; + public void writeTelemetryData(JsonWriter json, TelemetryData statistics) { json.beginObject(); json.prop("id", statistics.getServerId()); @@ -55,7 +57,7 @@ public class TelemetryDataJsonWriter { statistics.getProjectCountByLanguage().forEach((language, count) -> { json.beginObject(); json.prop("language", language); - json.prop("count", count); + json.prop(COUNT, count); json.endObject(); }); json.endArray(); @@ -73,7 +75,7 @@ public class TelemetryDataJsonWriter { statistics.getAlmIntegrationCountByAlm().forEach((alm, count) -> { json.beginObject(); json.prop("alm", alm); - json.prop("count", count); + json.prop(COUNT, count); json.endObject(); }); json.endArray(); @@ -93,6 +95,16 @@ public class TelemetryDataJsonWriter { statistics.getExternalAuthenticationProviders().forEach(json::value); json.endArray(); + json.name("projectCountByScm"); + json.beginArray(); + statistics.getProjectCountByScm().forEach((scm, count) -> { + json.beginObject(); + json.prop("scm", scm); + json.prop(COUNT, count); + json.endObject(); + }); + json.endArray(); + if (statistics.getInstallationDate() != null) { json.prop("installationDate", statistics.getInstallationDate()); } 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 141e4b57198..ca3e14f774c 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 @@ -37,6 +37,7 @@ import org.sonar.core.platform.EditionProvider; import org.sonar.core.util.stream.MoreCollectors; import org.sonar.server.measure.index.ProjectMeasuresStatistics; +import static java.util.Arrays.asList; import static java.util.stream.Collectors.joining; import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; import static org.assertj.core.api.Assertions.assertThat; @@ -56,7 +57,8 @@ public class TelemetryDataJsonWriterTest { .setNclocByLanguage(Collections.emptyMap()) .build()) .setNcloc(42L) - .setExternalAuthenticationProviders(Arrays.asList("github", "gitlab")) + .setExternalAuthenticationProviders(asList("github", "gitlab")) + .setProjectCountByScm(Collections.emptyMap()) .setDatabase(new TelemetryData.Database("H2", "11")) .setUsingBranches(true); @@ -216,6 +218,23 @@ public class TelemetryDataJsonWriterTest { } @Test + public void write_project_count_by_scm() { + TelemetryData data = SOME_TELEMETRY_DATA + .setProjectCountByScm(ImmutableMap.of("git", 5L, "svn", 4L, "cvs", 3L, "undetected", 2L)) + .build(); + + String json = writeTelemetryData(data); + + assertJson(json).isSimilarTo("{" + + " \"projectCountByScm\": [" + + "{ \"scm\":\"git\", \"count\":5}," + + "{ \"scm\":\"svn\", \"count\":4}," + + "{ \"scm\":\"cvs\", \"count\":3}," + + "{ \"scm\":\"undetected\", \"count\":2}," + + "]}"); + } + + @Test public void write_project_stats_by_language() { int projectCount = random.nextInt(8909); Map<String, Long> countByLanguage = IntStream.range(0, 1 + random.nextInt(10)) @@ -368,7 +387,7 @@ public class TelemetryDataJsonWriterTest { @DataProvider public static Object[][] allEditions() { return Arrays.stream(EditionProvider.Edition.values()) - .map(t -> new Object[] {t}) + .map(t -> new Object[]{t}) .toArray(Object[][]::new); } |