From cd40a38f951a1355c086b99017401b93bd203558 Mon Sep 17 00:00:00 2001 From: lukasz-jarocki-sonarsource Date: Fri, 6 Sep 2024 08:47:33 +0200 Subject: SONAR-22891 added new telemetry metric --- .../metrics/TelemetryMetricsLoaderIT.java | 2 +- .../telemetry/metrics/TelemetryMetricsMapper.java | 23 +++++++++++++++++----- .../metrics/TelemetryMetricsMapperTest.java | 20 +++++++++++++++++++ .../sonar/telemetry/metrics/TestTelemetryBean.java | 2 +- 4 files changed, 40 insertions(+), 7 deletions(-) (limited to 'server/sonar-telemetry/src') diff --git a/server/sonar-telemetry/src/it/java/org/sonar/telemetry/metrics/TelemetryMetricsLoaderIT.java b/server/sonar-telemetry/src/it/java/org/sonar/telemetry/metrics/TelemetryMetricsLoaderIT.java index 6dc2f649365..67e2ea872e8 100644 --- a/server/sonar-telemetry/src/it/java/org/sonar/telemetry/metrics/TelemetryMetricsLoaderIT.java +++ b/server/sonar-telemetry/src/it/java/org/sonar/telemetry/metrics/TelemetryMetricsLoaderIT.java @@ -270,7 +270,7 @@ class TelemetryMetricsLoaderIT { } @Override - public Map getUuidValues() { + public Map getValues() { return Stream.of(keys) .collect(Collectors.toMap( key -> key, diff --git a/server/sonar-telemetry/src/main/java/org/sonar/telemetry/metrics/TelemetryMetricsMapper.java b/server/sonar-telemetry/src/main/java/org/sonar/telemetry/metrics/TelemetryMetricsMapper.java index e3379e4772f..d282608d9c2 100644 --- a/server/sonar-telemetry/src/main/java/org/sonar/telemetry/metrics/TelemetryMetricsMapper.java +++ b/server/sonar-telemetry/src/main/java/org/sonar/telemetry/metrics/TelemetryMetricsMapper.java @@ -52,7 +52,20 @@ public class TelemetryMetricsMapper { private static Set mapInstallationMetric(TelemetryDataProvider provider) { Optional optionalValue = provider.getValue(); - if (provider.getGranularity() == Granularity.ADHOC && optionalValue.isEmpty()) { + + Granularity granularity = provider.getGranularity(); + + if (granularity == Granularity.ADHOC && !provider.getValues().isEmpty()) { + return provider.getValues().entrySet().stream() + .map(entry -> new InstallationMetric( + provider.getMetricKey() + "." + entry.getKey(), + entry.getValue(), + provider.getType(), + granularity + )).collect(Collectors.toSet()); + } + + if (granularity == Granularity.ADHOC && optionalValue.isEmpty()) { return Collections.emptySet(); } @@ -60,12 +73,12 @@ public class TelemetryMetricsMapper { provider.getMetricKey(), optionalValue.orElse(null), provider.getType(), - provider.getGranularity() + granularity )); } private static Set mapUserMetric(TelemetryDataProvider provider) { - return provider.getUuidValues().entrySet().stream() + return provider.getValues().entrySet().stream() .map(entry -> new UserMetric( provider.getMetricKey(), entry.getValue(), @@ -76,7 +89,7 @@ public class TelemetryMetricsMapper { } private static Set mapProjectMetric(TelemetryDataProvider provider) { - return provider.getUuidValues().entrySet().stream() + return provider.getValues().entrySet().stream() .map(entry -> new ProjectMetric( provider.getMetricKey(), entry.getValue(), @@ -87,7 +100,7 @@ public class TelemetryMetricsMapper { } private static Set mapLanguageMetric(TelemetryDataProvider provider) { - return provider.getUuidValues().entrySet().stream() + return provider.getValues().entrySet().stream() .map(entry -> new LanguageMetric( provider.getMetricKey(), entry.getValue(), diff --git a/server/sonar-telemetry/src/test/java/org/sonar/telemetry/metrics/TelemetryMetricsMapperTest.java b/server/sonar-telemetry/src/test/java/org/sonar/telemetry/metrics/TelemetryMetricsMapperTest.java index d2fa9f9533c..d822623d167 100644 --- a/server/sonar-telemetry/src/test/java/org/sonar/telemetry/metrics/TelemetryMetricsMapperTest.java +++ b/server/sonar-telemetry/src/test/java/org/sonar/telemetry/metrics/TelemetryMetricsMapperTest.java @@ -53,6 +53,26 @@ class TelemetryMetricsMapperTest { ); } + @Test + void mapFromDataProvider_whenInstallationProviderWithMultiValue() { + TelemetryDataProvider provider = new TestTelemetryBean(Dimension.INSTALLATION) { + @Override + public Granularity getGranularity() { + return Granularity.ADHOC; + } + }; + + Set metrics = TelemetryMetricsMapper.mapFromDataProvider(provider); + List userMetrics = retrieveList(metrics); + + assertThat(userMetrics) + .extracting(InstallationMetric::getKey, InstallationMetric::getType, InstallationMetric::getValue, InstallationMetric::getGranularity) + .containsExactlyInAnyOrder( + tuple("telemetry-bean-a.key-1", TelemetryDataType.STRING, "value-1", Granularity.ADHOC), + tuple("telemetry-bean-a.key-2", TelemetryDataType.STRING, "value-2", Granularity.ADHOC) + ); + } + @Test void mapFromDataProvider_whenUserProvider() { TelemetryDataProvider provider = new TestTelemetryBean(Dimension.USER); diff --git a/server/sonar-telemetry/src/test/java/org/sonar/telemetry/metrics/TestTelemetryBean.java b/server/sonar-telemetry/src/test/java/org/sonar/telemetry/metrics/TestTelemetryBean.java index 7aa64e464dc..f4c4c844d85 100644 --- a/server/sonar-telemetry/src/test/java/org/sonar/telemetry/metrics/TestTelemetryBean.java +++ b/server/sonar-telemetry/src/test/java/org/sonar/telemetry/metrics/TestTelemetryBean.java @@ -66,7 +66,7 @@ public class TestTelemetryBean implements TelemetryDataProvider { } @Override - public Map getUuidValues() { + public Map getValues() { return METRIC_UUID_VALUES; } -- cgit v1.2.3