From 1d725877ee3bf0bf003a74c62d2a8e5556b7e534 Mon Sep 17 00:00:00 2001 From: heyams Date: Mon, 2 Oct 2023 17:38:58 -0700 Subject: [PATCH 01/19] Enable statsbeat --- .../exporter/AzureMonitorExporterBuilder.java | 33 ++++++++++++++---- .../StatsbeatConnectionString.java | 2 +- .../statsbeat/StatsbeatModule.java | 24 ++++++++----- .../implementation/utils/PropertyHelper.java | 34 +++++++++++++++++++ 4 files changed, 77 insertions(+), 16 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index 0dabb769b6d8..2f0bdac56718 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -27,6 +27,7 @@ import com.azure.monitor.opentelemetry.exporter.implementation.SpanDataMapper; import com.azure.monitor.opentelemetry.exporter.implementation.builders.AbstractTelemetryBuilder; import com.azure.monitor.opentelemetry.exporter.implementation.configuration.ConnectionString; +import com.azure.monitor.opentelemetry.exporter.implementation.configuration.StatsbeatConnectionString; import com.azure.monitor.opentelemetry.exporter.implementation.heartbeat.HeartbeatExporter; import com.azure.monitor.opentelemetry.exporter.implementation.localstorage.LocalStorageStats; import com.azure.monitor.opentelemetry.exporter.implementation.localstorage.LocalStorageTelemetryPipelineListener; @@ -34,6 +35,9 @@ import com.azure.monitor.opentelemetry.exporter.implementation.pipeline.TelemetryItemExporter; import com.azure.monitor.opentelemetry.exporter.implementation.pipeline.TelemetryPipeline; import com.azure.monitor.opentelemetry.exporter.implementation.pipeline.TelemetryPipelineListener; +import com.azure.monitor.opentelemetry.exporter.implementation.statsbeat.Feature; +import com.azure.monitor.opentelemetry.exporter.implementation.statsbeat.StatsbeatModule; +import com.azure.monitor.opentelemetry.exporter.implementation.utils.PropertyHelper; import com.azure.monitor.opentelemetry.exporter.implementation.utils.ResourceParser; import com.azure.monitor.opentelemetry.exporter.implementation.utils.TempDirs; import com.azure.monitor.opentelemetry.exporter.implementation.utils.VersionGenerator; @@ -49,14 +53,10 @@ import io.opentelemetry.sdk.trace.export.SpanExporter; import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.BiConsumer; +import static java.util.concurrent.TimeUnit.DAYS; import static java.util.concurrent.TimeUnit.MINUTES; /** @@ -351,10 +351,31 @@ private SpanExporter buildTraceExporter(ConfigProperties configProperties) { private MetricExporter buildMetricExporter(ConfigProperties configProperties) { HeartbeatExporter.start( MINUTES.toSeconds(15), createDefaultsPopulator(configProperties), builtTelemetryItemExporter::send); + if (connectionString != null) { + StatsbeatModule statsbeatModule = new StatsbeatModule(PropertyHelper::lazyUpdateVmRpIntegration, true); + statsbeatModule.start( + builtTelemetryItemExporter, + this::getStatsbeatConnectionString, + connectionString::getInstrumentationKey, + false, + MINUTES.toSeconds(15), + DAYS.toSeconds(1), + false, + initStatsbeatFeatures()); + } return new AzureMonitorMetricExporter( new MetricDataMapper(createDefaultsPopulator(configProperties), true), builtTelemetryItemExporter); } + private Set initStatsbeatFeatures() { + // TODO - starting tracking native image usage based on a system property or env var to indicate it's from the native image path + return Collections.emptySet(); + } + + private StatsbeatConnectionString getStatsbeatConnectionString() { + return StatsbeatConnectionString.create(connectionString, null, null); + } + private LogRecordExporter buildLogRecordExporter(ConfigProperties configProperties) { return new AzureMonitorLogRecordExporter( new LogDataMapper(true, false, createDefaultsPopulator(configProperties)), builtTelemetryItemExporter); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/configuration/StatsbeatConnectionString.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/configuration/StatsbeatConnectionString.java index db5c5b56021d..e79289dbfb1e 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/configuration/StatsbeatConnectionString.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/configuration/StatsbeatConnectionString.java @@ -91,7 +91,7 @@ public final class StatsbeatConnectionString { public static StatsbeatConnectionString create( ConnectionString connectionString, @Nullable String instrumentationKey, - String ingestionEndpoint) { + @Nullable String ingestionEndpoint) { if (instrumentationKey == null || instrumentationKey.isEmpty()) { InstrumentationKeyEndpointPair pair = diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java index a1f12e706c4c..3a71c33ba682 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java @@ -37,19 +37,23 @@ public class StatsbeatModule { private final FeatureStatsbeat instrumentationStatsbeat; private final NonessentialStatsbeat nonessentialStatsbeat; private final AzureMetadataService azureMetadataService; + private final boolean standalone; private final AtomicBoolean started = new AtomicBoolean(); private final AtomicBoolean shutdown = new AtomicBoolean(); - public StatsbeatModule(Consumer vmMetadataServiceCallback) { + public StatsbeatModule(Consumer vmMetadataServiceCallback, boolean standalone) { customDimensions = new CustomDimensions(); - networkStatsbeat = new NetworkStatsbeat(customDimensions); attachStatsbeat = new AttachStatsbeat(customDimensions); featureStatsbeat = new FeatureStatsbeat(customDimensions, FeatureType.FEATURE); instrumentationStatsbeat = new FeatureStatsbeat(customDimensions, FeatureType.INSTRUMENTATION); - nonessentialStatsbeat = new NonessentialStatsbeat(customDimensions); azureMetadataService = new AzureMetadataService(attachStatsbeat, customDimensions, vmMetadataServiceCallback); + this.standalone = standalone; + if (!standalone) { + networkStatsbeat = new NetworkStatsbeat(customDimensions); + nonessentialStatsbeat = new NonessentialStatsbeat(customDimensions); + } } public void start( @@ -80,11 +84,13 @@ public void start( updateConnectionString(connectionString.get()); updateInstrumentationKey(instrumentationKey.get()); - scheduledExecutor.scheduleWithFixedDelay( - new StatsbeatSender(networkStatsbeat, telemetryItemExporter), - shortIntervalSeconds, - shortIntervalSeconds, - TimeUnit.SECONDS); + if (!standalone) { + scheduledExecutor.scheduleWithFixedDelay( + new StatsbeatSender(networkStatsbeat, telemetryItemExporter), + shortIntervalSeconds, + shortIntervalSeconds, + TimeUnit.SECONDS); + } scheduledExecutor.scheduleWithFixedDelay( new StatsbeatSender(attachStatsbeat, telemetryItemExporter), Math.min(60, longIntervalSeconds), @@ -110,7 +116,7 @@ public void start( featureStatsbeat.trackConfigurationOptions(featureSet); - if (!disabled) { + if (!disabled && !standalone) { nonessentialStatsbeat.setConnectionString(connectionString.get()); nonessentialStatsbeat.setInstrumentationKey(instrumentationKey.get()); scheduledExecutor.scheduleWithFixedDelay( diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/utils/PropertyHelper.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/utils/PropertyHelper.java index 2908b8b4c4a8..74de0ce2f84d 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/utils/PropertyHelper.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/utils/PropertyHelper.java @@ -3,6 +3,8 @@ package com.azure.monitor.opentelemetry.exporter.implementation.utils; +import com.azure.monitor.opentelemetry.exporter.implementation.statsbeat.MetadataInstanceResponse; +import com.azure.monitor.opentelemetry.exporter.implementation.statsbeat.RpAttachType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -24,6 +26,8 @@ public final class PropertyHelper { public static final String UNKNOWN_VERSION_VALUE = "unknown"; + private static volatile char rpIntegrationChar; + /** * Reads the properties from a properties file. * @@ -86,6 +90,36 @@ public static String getSdkVersionNumber() { return SdkPropertyValues.SDK_VERSION_NUMBER; } + /** Is resource provider (Azure Spring Cloud, AppService, Azure Functions, AKS, VM...). */ + public static boolean isRpIntegration() { + return rpIntegrationChar != 0; + } + + public static void setRpIntegrationChar(char ch) { + rpIntegrationChar = ch; + } + + public static void lazyUpdateVmRpIntegration(MetadataInstanceResponse response) { + rpIntegrationChar = 'v'; + PropertyHelper.setSdkNamePrefix(getRpIntegrationSdkNamePrefix()); + RpAttachType.setRpAttachType(RpAttachType.STANDALONE_AUTO); + } + + public static String getRpIntegrationSdkNamePrefix() { + StringBuilder sdkNamePrefix = new StringBuilder(3); + sdkNamePrefix.append(rpIntegrationChar); + if (SystemInformation.isWindows()) { + sdkNamePrefix.append("w"); + } else if (SystemInformation.isLinux()) { + sdkNamePrefix.append("l"); + } else { + logger.warn("could not detect os: {}", System.getProperty("os.name")); + sdkNamePrefix.append("u"); + } + sdkNamePrefix.append("_"); + return sdkNamePrefix.toString(); + } + private static class SdkPropertyValues { private static final String SDK_VERSION_NUMBER; private static volatile String sdkVersionString; From 3fbbab77c816137cfd7dff5e71d457959fe9c975 Mon Sep 17 00:00:00 2001 From: heyams Date: Mon, 2 Oct 2023 17:41:57 -0700 Subject: [PATCH 02/19] Fix imports --- .../exporter/AzureMonitorExporterBuilder.java | 8 +++++++- .../implementation/statsbeat/StatsbeatModule.java | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index 2f0bdac56718..2247cdf5ee39 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -53,7 +53,13 @@ import io.opentelemetry.sdk.trace.export.SpanExporter; import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.function.BiConsumer; import static java.util.concurrent.TimeUnit.DAYS; diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java index 3a71c33ba682..e4563686d092 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java @@ -11,13 +11,11 @@ import org.slf4j.MDC; import java.util.Set; -import java.util.concurrent.Callable; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; import static com.azure.monitor.opentelemetry.exporter.implementation.utils.AzureMonitorMsgId.FAIL_TO_SEND_STATSBEAT_ERROR; @@ -53,6 +51,9 @@ public StatsbeatModule(Consumer vmMetadataServiceCallb if (!standalone) { networkStatsbeat = new NetworkStatsbeat(customDimensions); nonessentialStatsbeat = new NonessentialStatsbeat(customDimensions); + } else { + networkStatsbeat = null; + nonessentialStatsbeat = null; } } From 109cbf093e14940803ec2dfbb9726d6e972d75e9 Mon Sep 17 00:00:00 2001 From: heyams Date: Mon, 2 Oct 2023 18:15:22 -0700 Subject: [PATCH 03/19] Test using a shorter intervals --- .../exporter/AzureMonitorExporterBuilder.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index 2247cdf5ee39..899fc9a194c1 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -62,8 +62,7 @@ import java.util.Set; import java.util.function.BiConsumer; -import static java.util.concurrent.TimeUnit.DAYS; -import static java.util.concurrent.TimeUnit.MINUTES; +import static java.util.concurrent.TimeUnit.*; /** * This class provides a fluent builder API to configure the OpenTelemetry SDK with Azure Monitor Exporters. @@ -364,8 +363,8 @@ private MetricExporter buildMetricExporter(ConfigProperties configProperties) { this::getStatsbeatConnectionString, connectionString::getInstrumentationKey, false, - MINUTES.toSeconds(15), - DAYS.toSeconds(1), + SECONDS.toSeconds(1), // MINUTES.toSeconds(1), + SECONDS.toSeconds(1), // DAYS.toSeconds(1), false, initStatsbeatFeatures()); } From 90eeefb3c61eacfceded7b74e84828d0736c720d Mon Sep 17 00:00:00 2001 From: heyams Date: Tue, 3 Oct 2023 15:56:21 -0700 Subject: [PATCH 04/19] Update --- .../exporter/AzureMonitorExporterBuilder.java | 4 +- .../pipeline/TelemetryItemExporter.java | 1 - .../statsbeat/CustomDimensions.java | 42 +++++++++---------- .../statsbeat/FeatureStatsbeat.java | 11 +++-- .../statsbeat/NetworkStatsbeat.java | 2 +- .../statsbeat/NonessentialStatsbeat.java | 2 +- .../statsbeat/ResourceProvider.java | 1 + .../statsbeat/StatsbeatModule.java | 10 +++-- .../statsbeat/AttachStatsbeatTest.java | 6 +-- .../statsbeat/AzureMetadataServiceTest.java | 8 ++-- .../statsbeat/CustomDimensionsTest.java | 10 ++--- .../statsbeat/FeatureStatsbeatTest.java | 8 ++-- 12 files changed, 55 insertions(+), 50 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index 899fc9a194c1..a722cfd61e05 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -262,7 +262,7 @@ public SpanExporter buildTraceExporter() { public MetricExporter buildMetricExporter() { internalBuildAndFreeze(); // TODO (trask) how to pass along configuration properties? - return buildMetricExporter(DefaultConfigProperties.createForTest(Collections.emptyMap())); + return buildMetricExporter(DefaultConfigProperties.create(Collections.emptyMap())); } /** @@ -276,7 +276,7 @@ public MetricExporter buildMetricExporter() { public LogRecordExporter buildLogRecordExporter() { internalBuildAndFreeze(); // TODO (trask) how to pass along configuration properties? - return buildLogRecordExporter(DefaultConfigProperties.createForTest(Collections.emptyMap())); + return buildLogRecordExporter(DefaultConfigProperties.create(Collections.emptyMap())); } /** diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/pipeline/TelemetryItemExporter.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/pipeline/TelemetryItemExporter.java index 558b03553606..8705ca7ffe9c 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/pipeline/TelemetryItemExporter.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/pipeline/TelemetryItemExporter.java @@ -137,7 +137,6 @@ public CompletableResultCode shutdown() { CompletableResultCode internalSendByBatch(TelemetryItemBatchKey telemetryItemBatchKey, List telemetryItems) { List byteBuffers; - // Don't send _OTELRESOURCE_ custom metric when OTEL_RESOURCE_ATTRIBUTES env var is empty // Don't send _OTELRESOURCE_ custom metric to Statsbeat yet // insert _OTELRESOURCE_ at the beginning of each batch diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java index e3c54fc67427..2a89732f65f1 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java @@ -5,7 +5,9 @@ import com.azure.monitor.opentelemetry.exporter.implementation.builders.StatsbeatTelemetryBuilder; import com.azure.monitor.opentelemetry.exporter.implementation.utils.PropertyHelper; +import com.azure.monitor.opentelemetry.exporter.implementation.utils.Strings; import com.azure.monitor.opentelemetry.exporter.implementation.utils.SystemInformation; +import com.azure.monitor.opentelemetry.exporter.implementation.utils.VersionGenerator; public class CustomDimensions { @@ -18,36 +20,24 @@ public class CustomDimensions { private final String sdkVersion; // visible for testing - CustomDimensions() { - String qualifiedSdkVersion = PropertyHelper.getQualifiedSdkVersionString(); - - if (qualifiedSdkVersion.startsWith("aw")) { - resourceProvider = ResourceProvider.RP_APPSVC; - operatingSystem = OperatingSystem.OS_WINDOWS; - } else if (qualifiedSdkVersion.startsWith("al")) { + CustomDimensions(boolean standalone) { + if ("java".equals(System.getenv("FUNCTIONS_WORKER_RUNTIME"))) { + resourceProvider = ResourceProvider.RP_FUNCTIONS; + } else if (!Strings.isNullOrEmpty(System.getenv("WEBSITE_SITE_NAME"))) { resourceProvider = ResourceProvider.RP_APPSVC; - operatingSystem = OperatingSystem.OS_LINUX; - } else if (qualifiedSdkVersion.startsWith("kw")) { + } else if (!Strings.isNullOrEmpty(System.getenv("KUBERNETES_SERVICE_HOST"))) { resourceProvider = ResourceProvider.RP_AKS; - operatingSystem = OperatingSystem.OS_WINDOWS; - } else if (qualifiedSdkVersion.startsWith("kl")) { - resourceProvider = ResourceProvider.RP_AKS; - operatingSystem = OperatingSystem.OS_LINUX; - } else if (qualifiedSdkVersion.startsWith("fw")) { - resourceProvider = ResourceProvider.RP_FUNCTIONS; - operatingSystem = OperatingSystem.OS_WINDOWS; - } else if (qualifiedSdkVersion.startsWith("fl")) { - resourceProvider = ResourceProvider.RP_FUNCTIONS; - operatingSystem = OperatingSystem.OS_LINUX; + } else if (!Strings.isNullOrEmpty(System.getenv("APPLICATIONINSIGHTS_SPRINGCLOUD_SERVICE_ID"))) { + resourceProvider = ResourceProvider.RP_SPRING_CLOUD; } else { resourceProvider = ResourceProvider.UNKNOWN; - operatingSystem = initOperatingSystem(); } - sdkVersion = qualifiedSdkVersion.substring(qualifiedSdkVersion.lastIndexOf(':') + 1); + operatingSystem = initOperatingSystem(); + sdkVersion = initSdkVersion(standalone); runtimeVersion = System.getProperty("java.version"); - attachType = RpAttachType.getRpAttachType(); + attachType = standalone ? RpAttachType.MANUAL.name() : RpAttachType.getRpAttachType(); language = "java"; } @@ -86,4 +76,12 @@ private static OperatingSystem initOperatingSystem() { return OperatingSystem.OS_UNKNOWN; } } + + private static String initSdkVersion(boolean standalone) { + if (standalone) { + return VersionGenerator.getSdkVersion(); + } + String qualifiedSdkVersionString = PropertyHelper.getQualifiedSdkVersionString(); + return qualifiedSdkVersionString.substring(qualifiedSdkVersionString.lastIndexOf(':')+1); + } } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeat.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeat.java index 5da37359c1da..b29b25e70ab4 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeat.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeat.java @@ -69,11 +69,14 @@ protected void send(TelemetryItemExporter telemetryItemExporter) { featureType = "1"; } - StatsbeatTelemetryBuilder telemetryBuilder = createStatsbeatTelemetry(FEATURE_METRIC_NAME, 0); - telemetryBuilder.addProperty("feature", featureValue); - telemetryBuilder.addProperty("type", featureType); + // don't send feature/instrumentation statsbeat when it's empty + if (!featureValue.isEmpty()) { + StatsbeatTelemetryBuilder telemetryBuilder = createStatsbeatTelemetry(FEATURE_METRIC_NAME, 0); + telemetryBuilder.addProperty("feature", featureValue); + telemetryBuilder.addProperty("type", featureType); - telemetryItemExporter.send(Collections.singletonList(telemetryBuilder.build())); + telemetryItemExporter.send(Collections.singletonList(telemetryBuilder.build())); + } } void trackConfigurationOptions(Set featureSet) { diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java index f4b9fdf6821c..9034603fa13f 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java @@ -39,7 +39,7 @@ public class NetworkStatsbeat extends BaseStatsbeat { // only used by tests NetworkStatsbeat() { - super(new CustomDimensions()); + super(new CustomDimensions(false)); } NetworkStatsbeat(CustomDimensions customDimensions) { diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java index 1aedbbfcfc8a..ac99285954fd 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java @@ -23,7 +23,7 @@ public class NonessentialStatsbeat extends BaseStatsbeat implements LocalStorage // only used by tests NonessentialStatsbeat() { - super(new CustomDimensions()); + super(new CustomDimensions(false)); } NonessentialStatsbeat(CustomDimensions customDimensions) { diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/ResourceProvider.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/ResourceProvider.java index 3a6fee228665..96fc23f333f3 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/ResourceProvider.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/ResourceProvider.java @@ -8,6 +8,7 @@ enum ResourceProvider { RP_APPSVC("appsvc"), RP_VM("vm"), RP_AKS("aks"), + RP_SPRING_CLOUD("springcloud"), UNKNOWN("unknown"); private final String value; diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java index e4563686d092..37cd831cb7bf 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java @@ -42,7 +42,7 @@ public class StatsbeatModule { private final AtomicBoolean shutdown = new AtomicBoolean(); public StatsbeatModule(Consumer vmMetadataServiceCallback, boolean standalone) { - customDimensions = new CustomDimensions(); + customDimensions = new CustomDimensions(standalone); attachStatsbeat = new AttachStatsbeat(customDimensions); featureStatsbeat = new FeatureStatsbeat(customDimensions, FeatureType.FEATURE); instrumentationStatsbeat = new FeatureStatsbeat(customDimensions, FeatureType.INSTRUMENTATION); @@ -158,7 +158,9 @@ public NonessentialStatsbeat getNonessentialStatsbeat() { private void updateConnectionString(StatsbeatConnectionString connectionString) { if (connectionString != null) { - networkStatsbeat.setConnectionString(connectionString); + if (!standalone) { + networkStatsbeat.setConnectionString(connectionString); + } attachStatsbeat.setConnectionString(connectionString); featureStatsbeat.setConnectionString(connectionString); instrumentationStatsbeat.setConnectionString(connectionString); @@ -167,7 +169,9 @@ private void updateConnectionString(StatsbeatConnectionString connectionString) private void updateInstrumentationKey(String instrumentationKey) { if (instrumentationKey != null && !instrumentationKey.isEmpty()) { - networkStatsbeat.setInstrumentationKey(instrumentationKey); + if (!standalone) { + networkStatsbeat.setInstrumentationKey(instrumentationKey); + } attachStatsbeat.setInstrumentationKey(instrumentationKey); featureStatsbeat.setInstrumentationKey(instrumentationKey); instrumentationStatsbeat.setInstrumentationKey(instrumentationKey); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java index dbb26a041c16..aa8b96e750e6 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java @@ -26,7 +26,7 @@ public class AttachStatsbeatTest { @BeforeEach public void setup() { - attachStatsbeat = new AttachStatsbeat(new CustomDimensions()); + attachStatsbeat = new AttachStatsbeat(new CustomDimensions(false)); } @Test @@ -39,7 +39,7 @@ public void testVirtualMachineResourceProviderId() throws IOException { BufferedSource source = Okio.buffer(Okio.source(in)); String result = source.readUtf8(); source.close(); - CustomDimensions customDimensions = new CustomDimensions(); + CustomDimensions customDimensions = new CustomDimensions(false); AzureMetadataService azureMetadataService = new AzureMetadataService(attachStatsbeat, customDimensions, (response) -> {}); azureMetadataService.updateMetadata(result); @@ -79,7 +79,7 @@ public void testAksResourceProviderId() { @Test public void testUnknownResourceProviderId() { - assertThat(new CustomDimensions().getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); + assertThat(new CustomDimensions(false).getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); assertThat(attachStatsbeat.getResourceProviderId()).isEqualTo("unknown"); } } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java index a7a46fd53e5e..785d5428eecf 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java @@ -27,9 +27,9 @@ public void testParseJsonResponseLinux() throws IOException { String result = source.readUtf8(); source.close(); - AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions()); + AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions(false)); AzureMetadataService azureMetadataService = - new AzureMetadataService(attachStatsbeat, new CustomDimensions(), response -> {}); + new AzureMetadataService(attachStatsbeat, new CustomDimensions(false), response -> {}); azureMetadataService.updateMetadata(result); MetadataInstanceResponse response = attachStatsbeat.getMetadataInstanceResponse(); @@ -50,9 +50,9 @@ public void testParseJsonResponseWindows() throws IOException { String result = source.readUtf8(); source.close(); - AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions()); + AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions(false)); AzureMetadataService azureMetadataService = - new AzureMetadataService(attachStatsbeat, new CustomDimensions(), (response) -> {}); + new AzureMetadataService(attachStatsbeat, new CustomDimensions(false), (response) -> {}); azureMetadataService.updateMetadata(result); MetadataInstanceResponse response = attachStatsbeat.getMetadataInstanceResponse(); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java index e8a4d5a43871..c57dcc2df57b 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java @@ -15,14 +15,14 @@ public class CustomDimensionsTest { @Test public void testResourceProvider() { - CustomDimensions customDimensions = new CustomDimensions(); + CustomDimensions customDimensions = new CustomDimensions(false); assertThat(customDimensions.getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); } @Test public void testOperatingSystem() { - CustomDimensions customDimensions = new CustomDimensions(); + CustomDimensions customDimensions = new CustomDimensions(false); OperatingSystem os = OperatingSystem.OS_UNKNOWN; if (SystemInformation.isWindows()) { @@ -35,7 +35,7 @@ public void testOperatingSystem() { @Test public void testCustomerIkey() { - CustomDimensions customDimensions = new CustomDimensions(); + CustomDimensions customDimensions = new CustomDimensions(false); StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); @@ -45,7 +45,7 @@ public void testCustomerIkey() { @Test public void testVersion() { - CustomDimensions customDimensions = new CustomDimensions(); + CustomDimensions customDimensions = new CustomDimensions(false); StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); @@ -59,7 +59,7 @@ public void testVersion() { @Test public void testRuntimeVersion() { - CustomDimensions customDimensions = new CustomDimensions(); + CustomDimensions customDimensions = new CustomDimensions(false); StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java index 949ad91567eb..97805566f090 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java @@ -65,7 +65,7 @@ public void testSpringSchedulingEnabled() { @Test public void testAddInstrumentationFirstLong() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions(), FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions(false), FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.jdbc"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.tomcat-7.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.http-url-connection"); @@ -83,7 +83,7 @@ public void testAddInstrumentationFirstLong() { @Test public void testAddInstrumentationToSecondLongOnly() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions(), FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions(false), FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.undertow-1.4"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.play-ws-2.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.vertx-kafka-client-3.5"); @@ -101,7 +101,7 @@ public void testAddInstrumentationToSecondLongOnly() { @Test public void testAddInstrumentationToBoth() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions(), FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions(false), FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.undertow-1.4"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.play-ws-2.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.vertx-kafka-client-3.5"); @@ -128,7 +128,7 @@ private static void testFeatureTrackingDisablement(Feature feature) { private static void testFeature(Feature feature, boolean expected) { // given FeatureStatsbeat featureStatsbeat = - new FeatureStatsbeat(new CustomDimensions(), FeatureType.FEATURE); + new FeatureStatsbeat(new CustomDimensions(false), FeatureType.FEATURE); // when if (expected) { From 2945a09d0f1f993a5ae01aa6a15f86bb1a71debb Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 4 Oct 2023 16:08:05 -0700 Subject: [PATCH 05/19] Add end-to-end test --- .../assets.json | 2 +- .../exporter/AzureMonitorExporterBuilder.java | 19 ++++- .../AzureMonitorExportersEndToEndTest.java | 81 ++++++++++++++++++- .../implementation/utils/TestUtils.java | 7 +- 4 files changed, 101 insertions(+), 8 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/assets.json b/sdk/monitor/azure-monitor-opentelemetry-exporter/assets.json index 3e558946941e..5d5f20b9dab7 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/assets.json +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "java", "TagPrefix": "java/monitor/azure-monitor-opentelemetry-exporter", - "Tag": "java/monitor/azure-monitor-opentelemetry-exporter_4051462e7c" + "Tag": "java/monitor/azure-monitor-opentelemetry-exporter_28d6ecbf1a" } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index a722cfd61e05..4b9bcba0bad1 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -76,6 +76,9 @@ public final class AzureMonitorExporterBuilder { private static final String APPLICATIONINSIGHTS_AUTHENTICATION_SCOPE = "https://monitor.azure.com//.default"; + private static final String STATSBEAT_LONG_INTERVAL_SECONDS = "STATSBEAT_LONG_INTERVAL_SECONDS"; + private static final String STATSBEAT_SHORT_INTERVAL_SECONDS = "STATSBEAT_SHORT_INTERVAL_SECONDS"; + private static final Map PROPERTIES = CoreUtils.getProperties("azure-monitor-opentelemetry-exporter.properties"); @@ -363,8 +366,8 @@ private MetricExporter buildMetricExporter(ConfigProperties configProperties) { this::getStatsbeatConnectionString, connectionString::getInstrumentationKey, false, - SECONDS.toSeconds(1), // MINUTES.toSeconds(1), - SECONDS.toSeconds(1), // DAYS.toSeconds(1), + getStatsbeatInterval(STATSBEAT_LONG_INTERVAL_SECONDS, configProperties.getInt(STATSBEAT_LONG_INTERVAL_SECONDS)), + getStatsbeatInterval(STATSBEAT_SHORT_INTERVAL_SECONDS, configProperties.getInt(STATSBEAT_SHORT_INTERVAL_SECONDS)), false, initStatsbeatFeatures()); } @@ -372,6 +375,18 @@ private MetricExporter buildMetricExporter(ConfigProperties configProperties) { new MetricDataMapper(createDefaultsPopulator(configProperties), true), builtTelemetryItemExporter); } + private long getStatsbeatInterval(String key, Integer intervalFromConfig) { + if (intervalFromConfig == null) { + if ("STATSBEAT_LONG_INTERVAL_SECONDS".equals(key)) { + return DAYS.toSeconds(1); // default every 24 hours + } else if ("STATSBEAT_SHORT_INTERVAL_SECONDS".equals(key)) { + return MINUTES.toSeconds(15); // default every 15 mins + } + } + assert intervalFromConfig != null; + return SECONDS.toSeconds(intervalFromConfig); + } + private Set initStatsbeatFeatures() { // TODO - starting tracking native image usage based on a system property or env var to indicate it's from the native image path return Collections.emptySet(); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java index 64d736ee23f5..55884eaebccc 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java @@ -34,9 +34,7 @@ import java.io.ByteArrayOutputStream; import java.net.URL; import java.nio.charset.StandardCharsets; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CountDownLatch; import java.util.zip.GZIPInputStream; @@ -51,6 +49,10 @@ public class AzureMonitorExportersEndToEndTest extends MonitorExporterClientTest "InstrumentationKey=00000000-0000-0000-0000-0FEEDDADBEEF;" + "IngestionEndpoint=https://test.in.applicationinsights.azure.com/;" + "LiveEndpoint=https://test.livediagnostics.monitor.azure.com/"; + + private static final String STATSBEAT_CONNECTION_STRING = "InstrumentationKey=00000000-0000-0000-0000-000000000000;" + + "IngestionEndpoint=https://westus-0.in.applicationinsights.azure.com/;" + + "LiveEndpoint=https://westus.livediagnostics.monitor.azure.com/"; private static final String INSTRUMENTATION_KEY = "00000000-0000-0000-0000-000000000000"; @Test @@ -192,10 +194,65 @@ public void testBuildTraceMetricLogExportersConsecutively() throws Exception { // TODO (trask) also export and validate logs in this test } + @Test + public void testStatsbeat() throws Exception { + // create the OpenTelemetry SDK + CountDownLatch countDownLatch = new CountDownLatch(1); + CustomValidationPolicy customValidationPolicy = new CustomValidationPolicy(countDownLatch); + OpenTelemetrySdk openTelemetry = + TestUtils.createOpenTelemetrySdk( + getHttpPipeline(customValidationPolicy), getStatsbeatConfiguration(), STATSBEAT_CONNECTION_STRING); + + // generate a metric + generateMetric(openTelemetry); + + // close to flush + openTelemetry.close(); + + Thread.sleep(1000); + + // wait for export + countDownLatch.await(10, SECONDS); + assertThat(customValidationPolicy.url) + .isEqualTo(new URL("https://westus-0.in.applicationinsights.azure.com/v2.1/track")); + assertThat(customValidationPolicy.actualTelemetryItems.size()).isEqualTo(4); + + TelemetryItem attachStatsbeat = + customValidationPolicy.actualTelemetryItems.stream() + .filter(item -> item.getName().equals("Statsbeat")) + .filter(item -> { + MetricsData metricsData = (MetricsData) item.getData().getBaseData(); + return metricsData.getMetrics().stream().allMatch(metricDataPoint -> metricDataPoint.getName().equals("Attach")); + }) + .findFirst() + .get(); + validateAttachStatsbeat(attachStatsbeat); + + TelemetryItem featureStatsbeat = + customValidationPolicy.actualTelemetryItems.stream() + .filter(item -> item.getName().equals("Statsbeat")) + .filter(item -> { + MetricsData metricsData = (MetricsData) item.getData().getBaseData(); + return metricsData.getMetrics().stream().allMatch(metricDataPoint -> metricDataPoint.getName().equals("Feature")); + }) + .findFirst() + .get(); + validateFeatureStatsbeat(featureStatsbeat); + } + private static Map getConfiguration() { return Collections.singletonMap("APPLICATIONINSIGHTS_CONNECTION_STRING", CONNECTION_STRING_ENV); } + private static Map getStatsbeatConfiguration() { + Map map = new HashMap<>(3); + map.put("APPLICATIONINSIGHTS_CONNECTION_STRING", CONNECTION_STRING_ENV); + map.put("STATSBEAT_LONG_INTERVAL_SECONDS", "1"); + map.put("STATSBEAT_SHORT_INTERVAL_SECONDS", "1"); + return map; + } + + @SuppressWarnings("try") private static void generateSpan(OpenTelemetry openTelemetry) { Tracer tracer = openTelemetry.getTracer("Sample"); @@ -240,8 +297,24 @@ private static void validateSpan(TelemetryItem telemetryItem) { .containsExactly(entry("color", "red"), entry("name", "apple")); } + private static void validateAttachStatsbeat(TelemetryItem telemetryItem) { + assertThat(telemetryItem.getData().getBaseType()).isEqualTo("MetricData"); + MetricsData actualMetricsData = (MetricsData) telemetryItem.getData().getBaseData(); + assertThat(actualMetricsData.getMetrics().get(0).getName()).isEqualTo("Attach"); + assertThat(actualMetricsData.getProperties()).contains(entry("rp", "unknown"), entry("attach", "MANUAL"), entry("language", "java")); + assertThat(actualMetricsData.getProperties()).containsKeys("attach", "cikey", "language", "os", "rp", "runtimeVersion", "version"); + } + + private static void validateFeatureStatsbeat(TelemetryItem telemetryItem) { + assertThat(telemetryItem.getData().getBaseType()).isEqualTo("MetricData"); + MetricsData actualMetricsData = (MetricsData) telemetryItem.getData().getBaseData(); + assertThat(actualMetricsData.getMetrics().get(0).getName()).isEqualTo("Feature"); + assertThat(actualMetricsData.getProperties()).contains(entry("feature", "4"), entry("type", "0"), entry("language", "java")); + assertThat(actualMetricsData.getProperties()).containsKeys("feature", "cikey", "language", "os", "rp", "runtimeVersion", "version"); + } + private static void validateMetric(TelemetryItem telemetryItem) { - assertThat(telemetryItem.getName()).isEqualTo("Metric"); + System.out.println("connection string: " + telemetryItem.getConnectionString()); assertThat(telemetryItem.getInstrumentationKey()).isEqualTo(INSTRUMENTATION_KEY); assertThat(telemetryItem.getTags()).containsEntry("ai.cloud.role", "unknown_service:java"); assertThat(telemetryItem.getTags()) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/utils/TestUtils.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/utils/TestUtils.java index 0456124699d6..411046135bb4 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/utils/TestUtils.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/utils/TestUtils.java @@ -70,17 +70,22 @@ public static OpenTelemetrySdk createOpenTelemetrySdk(HttpPipeline httpPipeline) public static OpenTelemetrySdk createOpenTelemetrySdk( HttpPipeline httpPipeline, Map configuration) { + return createOpenTelemetrySdk(httpPipeline, configuration, TRACE_CONNECTION_STRING); + } + + public static OpenTelemetrySdk createOpenTelemetrySdk(HttpPipeline httpPipeline, Map configuration, String connectionString) { AutoConfiguredOpenTelemetrySdkBuilder sdkBuilder = AutoConfiguredOpenTelemetrySdk.builder(); new AzureMonitorExporterBuilder() - .connectionString(TRACE_CONNECTION_STRING) + .connectionString(connectionString) .httpPipeline(httpPipeline) .build(sdkBuilder); return sdkBuilder.addPropertiesSupplier(() -> configuration).build().getOpenTelemetrySdk(); } + private TestUtils() { } } From 8af83d87c33ae0af8b8f4e9692f52a3c5709c6be Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 4 Oct 2023 16:16:26 -0700 Subject: [PATCH 06/19] Fix imports --- .../opentelemetry/exporter/AzureMonitorExporterBuilder.java | 4 +++- .../exporter/AzureMonitorExportersEndToEndTest.java | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index 4b9bcba0bad1..904c11c46ef6 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -62,7 +62,9 @@ import java.util.Set; import java.util.function.BiConsumer; -import static java.util.concurrent.TimeUnit.*; +import static java.util.concurrent.TimeUnit.DAYS; +import static java.util.concurrent.TimeUnit.MINUTES; +import static java.util.concurrent.TimeUnit.SECONDS; /** * This class provides a fluent builder API to configure the OpenTelemetry SDK with Azure Monitor Exporters. diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java index 55884eaebccc..9c0702ea2365 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java @@ -314,7 +314,6 @@ private static void validateFeatureStatsbeat(TelemetryItem telemetryItem) { } private static void validateMetric(TelemetryItem telemetryItem) { - System.out.println("connection string: " + telemetryItem.getConnectionString()); assertThat(telemetryItem.getInstrumentationKey()).isEqualTo(INSTRUMENTATION_KEY); assertThat(telemetryItem.getTags()).containsEntry("ai.cloud.role", "unknown_service:java"); assertThat(telemetryItem.getTags()) From 2bd42f85f3702b62426df5321b54f215e5e8052c Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 5 Oct 2023 17:37:19 -0700 Subject: [PATCH 07/19] Fix spotbug --- .../exporter/AzureMonitorExporterBuilder.java | 2 +- .../exporter/AzureMonitorExportersEndToEndTest.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index 904c11c46ef6..c3985bfddfe4 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -390,7 +390,7 @@ private long getStatsbeatInterval(String key, Integer intervalFromConfig) { } private Set initStatsbeatFeatures() { - // TODO - starting tracking native image usage based on a system property or env var to indicate it's from the native image path + // TODO (jean): start tracking native image usage based on a system property or env var to indicate it's from the native image path return Collections.emptySet(); } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java index 9c0702ea2365..33981ce05cfd 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java @@ -50,9 +50,10 @@ public class AzureMonitorExportersEndToEndTest extends MonitorExporterClientTest + "IngestionEndpoint=https://test.in.applicationinsights.azure.com/;" + "LiveEndpoint=https://test.livediagnostics.monitor.azure.com/"; - private static final String STATSBEAT_CONNECTION_STRING = "InstrumentationKey=00000000-0000-0000-0000-000000000000;" + - "IngestionEndpoint=https://westus-0.in.applicationinsights.azure.com/;" + - "LiveEndpoint=https://westus.livediagnostics.monitor.azure.com/"; + private static final String STATSBEAT_CONNECTION_STRING = + "InstrumentationKey=00000000-0000-0000-0000-000000000000;" + + "IngestionEndpoint=https://westus-0.in.applicationinsights.azure.com/;" + + "LiveEndpoint=https://westus.livediagnostics.monitor.azure.com/"; private static final String INSTRUMENTATION_KEY = "00000000-0000-0000-0000-000000000000"; @Test From bff7b01333143b89b5b2ba49b591287918b18990 Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 5 Oct 2023 17:52:48 -0700 Subject: [PATCH 08/19] Fix test --- .../exporter/AzureMonitorExportersEndToEndTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java index 33981ce05cfd..8bc1cb0560ed 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java @@ -310,7 +310,7 @@ private static void validateFeatureStatsbeat(TelemetryItem telemetryItem) { assertThat(telemetryItem.getData().getBaseType()).isEqualTo("MetricData"); MetricsData actualMetricsData = (MetricsData) telemetryItem.getData().getBaseData(); assertThat(actualMetricsData.getMetrics().get(0).getName()).isEqualTo("Feature"); - assertThat(actualMetricsData.getProperties()).contains(entry("feature", "4"), entry("type", "0"), entry("language", "java")); + assertThat(actualMetricsData.getProperties()).contains(entry("type", "0"), entry("language", "java")); assertThat(actualMetricsData.getProperties()).containsKeys("feature", "cikey", "language", "os", "rp", "runtimeVersion", "version"); } From 965fa637f528dedc001ca03d6f8062af0f2c93c7 Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 6 Oct 2023 12:11:38 -0700 Subject: [PATCH 09/19] Update test --- .../exporter/AzureMonitorExportersEndToEndTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java index 8bc1cb0560ed..eca84c55e426 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExportersEndToEndTest.java @@ -302,7 +302,7 @@ private static void validateAttachStatsbeat(TelemetryItem telemetryItem) { assertThat(telemetryItem.getData().getBaseType()).isEqualTo("MetricData"); MetricsData actualMetricsData = (MetricsData) telemetryItem.getData().getBaseData(); assertThat(actualMetricsData.getMetrics().get(0).getName()).isEqualTo("Attach"); - assertThat(actualMetricsData.getProperties()).contains(entry("rp", "unknown"), entry("attach", "MANUAL"), entry("language", "java")); + assertThat(actualMetricsData.getProperties()).contains(entry("rp", "unknown"), entry("attach", "Manual"), entry("language", "java")); assertThat(actualMetricsData.getProperties()).containsKeys("attach", "cikey", "language", "os", "rp", "runtimeVersion", "version"); } From 10220374eb9bc059d0759985922dcd460c6aa851 Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 6 Oct 2023 12:25:49 -0700 Subject: [PATCH 10/19] Fix tests --- .../exporter/implementation/statsbeat/CustomDimensions.java | 2 +- .../exporter/implementation/statsbeat/StatsbeatModule.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java index 2a89732f65f1..e8b0275553c8 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java @@ -37,7 +37,7 @@ public class CustomDimensions { sdkVersion = initSdkVersion(standalone); runtimeVersion = System.getProperty("java.version"); - attachType = standalone ? RpAttachType.MANUAL.name() : RpAttachType.getRpAttachType(); + attachType = RpAttachType.getRpAttachType(); language = "java"; } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java index 37cd831cb7bf..4d780e9d78b2 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java @@ -52,6 +52,7 @@ public StatsbeatModule(Consumer vmMetadataServiceCallb networkStatsbeat = new NetworkStatsbeat(customDimensions); nonessentialStatsbeat = new NonessentialStatsbeat(customDimensions); } else { + RpAttachType.setRpAttachType(RpAttachType.MANUAL); networkStatsbeat = null; nonessentialStatsbeat = null; } From f16a643b5330a6ae9eaac828ca77ef64d4ba6245 Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 6 Oct 2023 12:45:26 -0700 Subject: [PATCH 11/19] Remove standalone flag --- .../exporter/AzureMonitorExporterBuilder.java | 2 +- .../statsbeat/CustomDimensions.java | 10 +++++----- .../statsbeat/NetworkStatsbeat.java | 2 +- .../statsbeat/NonessentialStatsbeat.java | 2 +- .../implementation/statsbeat/RpAttachType.java | 8 ++++++-- .../statsbeat/StatsbeatModule.java | 17 +++++++---------- .../statsbeat/AttachStatsbeatTest.java | 6 +++--- .../statsbeat/AzureMetadataServiceTest.java | 8 ++++---- .../statsbeat/CustomDimensionsTest.java | 10 +++++----- .../statsbeat/FeatureStatsbeatTest.java | 8 ++++---- 10 files changed, 37 insertions(+), 36 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index c3985bfddfe4..f1eaa23f0ec7 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -362,7 +362,7 @@ private MetricExporter buildMetricExporter(ConfigProperties configProperties) { HeartbeatExporter.start( MINUTES.toSeconds(15), createDefaultsPopulator(configProperties), builtTelemetryItemExporter::send); if (connectionString != null) { - StatsbeatModule statsbeatModule = new StatsbeatModule(PropertyHelper::lazyUpdateVmRpIntegration, true); + StatsbeatModule statsbeatModule = new StatsbeatModule(PropertyHelper::lazyUpdateVmRpIntegration); statsbeatModule.start( builtTelemetryItemExporter, this::getStatsbeatConnectionString, diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java index e8b0275553c8..494ffd75ae8a 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java @@ -20,7 +20,7 @@ public class CustomDimensions { private final String sdkVersion; // visible for testing - CustomDimensions(boolean standalone) { + CustomDimensions() { if ("java".equals(System.getenv("FUNCTIONS_WORKER_RUNTIME"))) { resourceProvider = ResourceProvider.RP_FUNCTIONS; } else if (!Strings.isNullOrEmpty(System.getenv("WEBSITE_SITE_NAME"))) { @@ -34,10 +34,10 @@ public class CustomDimensions { } operatingSystem = initOperatingSystem(); - sdkVersion = initSdkVersion(standalone); + sdkVersion = initSdkVersion(); runtimeVersion = System.getProperty("java.version"); - attachType = RpAttachType.getRpAttachType(); + attachType = RpAttachType.getRpAttachTypeString(); language = "java"; } @@ -77,8 +77,8 @@ private static OperatingSystem initOperatingSystem() { } } - private static String initSdkVersion(boolean standalone) { - if (standalone) { + private static String initSdkVersion() { + if (RpAttachType.getRpAttachType() == RpAttachType.MANUAL) { return VersionGenerator.getSdkVersion(); } String qualifiedSdkVersionString = PropertyHelper.getQualifiedSdkVersionString(); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java index cba7aa7f8944..40b1ee212350 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java @@ -39,7 +39,7 @@ public class NetworkStatsbeat extends BaseStatsbeat { // only used by tests NetworkStatsbeat() { - super(new CustomDimensions(false)); + super(new CustomDimensions); } NetworkStatsbeat(CustomDimensions customDimensions) { diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java index e8683031c550..a7413428f5c2 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java @@ -23,7 +23,7 @@ public class NonessentialStatsbeat extends BaseStatsbeat implements LocalStorage // only used by tests NonessentialStatsbeat() { - super(new CustomDimensions(false)); + super(new CustomDimensions); } NonessentialStatsbeat(CustomDimensions customDimensions) { diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/RpAttachType.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/RpAttachType.java index 4e3340dfa9c7..fd1d7498efcb 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/RpAttachType.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/RpAttachType.java @@ -9,7 +9,7 @@ public enum RpAttachType { STANDALONE_AUTO("StandaloneAuto"), // RP attach is enabled via a custom JAVA_OPTS or on premise resources INTEGRATED_AUTO("IntegratedAuto"); // RP attach is on by default - private static volatile RpAttachType attachType; + private static volatile RpAttachType attachType = MANUAL; private final String label; private RpAttachType(String label) { @@ -20,7 +20,11 @@ public static void setRpAttachType(RpAttachType type) { attachType = type; } - public static String getRpAttachType() { + public static RpAttachType getRpAttachType() { + return attachType; + } + + public static String getRpAttachTypeString() { return attachType != null ? attachType.label : null; } } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java index 4d780e9d78b2..e81b00e199bb 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java @@ -35,20 +35,17 @@ public class StatsbeatModule { private final FeatureStatsbeat instrumentationStatsbeat; private final NonessentialStatsbeat nonessentialStatsbeat; private final AzureMetadataService azureMetadataService; - private final boolean standalone; - private final AtomicBoolean started = new AtomicBoolean(); private final AtomicBoolean shutdown = new AtomicBoolean(); - public StatsbeatModule(Consumer vmMetadataServiceCallback, boolean standalone) { - customDimensions = new CustomDimensions(standalone); + public StatsbeatModule(Consumer vmMetadataServiceCallback) { + customDimensions = new CustomDimensions(); attachStatsbeat = new AttachStatsbeat(customDimensions); featureStatsbeat = new FeatureStatsbeat(customDimensions, FeatureType.FEATURE); instrumentationStatsbeat = new FeatureStatsbeat(customDimensions, FeatureType.INSTRUMENTATION); azureMetadataService = new AzureMetadataService(attachStatsbeat, customDimensions, vmMetadataServiceCallback); - this.standalone = standalone; - if (!standalone) { + if (RpAttachType.getRpAttachType() == RpAttachType.MANUAL) { networkStatsbeat = new NetworkStatsbeat(customDimensions); nonessentialStatsbeat = new NonessentialStatsbeat(customDimensions); } else { @@ -86,7 +83,7 @@ public void start( updateConnectionString(connectionString.get()); updateInstrumentationKey(instrumentationKey.get()); - if (!standalone) { + if (RpAttachType.getRpAttachType() != RpAttachType.MANUAL) { scheduledExecutor.scheduleWithFixedDelay( new StatsbeatSender(networkStatsbeat, telemetryItemExporter), shortIntervalSeconds, @@ -118,7 +115,7 @@ public void start( featureStatsbeat.trackConfigurationOptions(featureSet); - if (!disabled && !standalone) { + if (!disabled && RpAttachType.getRpAttachType() != RpAttachType.MANUAL) { nonessentialStatsbeat.setConnectionString(connectionString.get()); nonessentialStatsbeat.setInstrumentationKey(instrumentationKey.get()); scheduledExecutor.scheduleWithFixedDelay( @@ -159,7 +156,7 @@ public NonessentialStatsbeat getNonessentialStatsbeat() { private void updateConnectionString(StatsbeatConnectionString connectionString) { if (connectionString != null) { - if (!standalone) { + if (RpAttachType.getRpAttachType() != RpAttachType.MANUAL) { networkStatsbeat.setConnectionString(connectionString); } attachStatsbeat.setConnectionString(connectionString); @@ -170,7 +167,7 @@ private void updateConnectionString(StatsbeatConnectionString connectionString) private void updateInstrumentationKey(String instrumentationKey) { if (instrumentationKey != null && !instrumentationKey.isEmpty()) { - if (!standalone) { + if (RpAttachType.getRpAttachType() != RpAttachType.MANUAL) { networkStatsbeat.setInstrumentationKey(instrumentationKey); } attachStatsbeat.setInstrumentationKey(instrumentationKey); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java index aa8b96e750e6..0ec7ee158ff9 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java @@ -26,7 +26,7 @@ public class AttachStatsbeatTest { @BeforeEach public void setup() { - attachStatsbeat = new AttachStatsbeat(new CustomDimensions(false)); + attachStatsbeat = new AttachStatsbeat(new CustomDimensions); } @Test @@ -39,7 +39,7 @@ public void testVirtualMachineResourceProviderId() throws IOException { BufferedSource source = Okio.buffer(Okio.source(in)); String result = source.readUtf8(); source.close(); - CustomDimensions customDimensions = new CustomDimensions(false); + CustomDimensions customDimensions = new CustomDimensions; AzureMetadataService azureMetadataService = new AzureMetadataService(attachStatsbeat, customDimensions, (response) -> {}); azureMetadataService.updateMetadata(result); @@ -79,7 +79,7 @@ public void testAksResourceProviderId() { @Test public void testUnknownResourceProviderId() { - assertThat(new CustomDimensions(false).getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); + assertThat(new CustomDimensions.getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); assertThat(attachStatsbeat.getResourceProviderId()).isEqualTo("unknown"); } } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java index 785d5428eecf..b0b03d29ee5c 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java @@ -27,9 +27,9 @@ public void testParseJsonResponseLinux() throws IOException { String result = source.readUtf8(); source.close(); - AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions(false)); + AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions); AzureMetadataService azureMetadataService = - new AzureMetadataService(attachStatsbeat, new CustomDimensions(false), response -> {}); + new AzureMetadataService(attachStatsbeat, new CustomDimensions, response -> {}); azureMetadataService.updateMetadata(result); MetadataInstanceResponse response = attachStatsbeat.getMetadataInstanceResponse(); @@ -50,9 +50,9 @@ public void testParseJsonResponseWindows() throws IOException { String result = source.readUtf8(); source.close(); - AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions(false)); + AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions); AzureMetadataService azureMetadataService = - new AzureMetadataService(attachStatsbeat, new CustomDimensions(false), (response) -> {}); + new AzureMetadataService(attachStatsbeat, new CustomDimensions, (response) -> {}); azureMetadataService.updateMetadata(result); MetadataInstanceResponse response = attachStatsbeat.getMetadataInstanceResponse(); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java index c57dcc2df57b..a1ed3e9fc29a 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java @@ -15,14 +15,14 @@ public class CustomDimensionsTest { @Test public void testResourceProvider() { - CustomDimensions customDimensions = new CustomDimensions(false); + CustomDimensions customDimensions = new CustomDimensions; assertThat(customDimensions.getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); } @Test public void testOperatingSystem() { - CustomDimensions customDimensions = new CustomDimensions(false); + CustomDimensions customDimensions = new CustomDimensions; OperatingSystem os = OperatingSystem.OS_UNKNOWN; if (SystemInformation.isWindows()) { @@ -35,7 +35,7 @@ public void testOperatingSystem() { @Test public void testCustomerIkey() { - CustomDimensions customDimensions = new CustomDimensions(false); + CustomDimensions customDimensions = new CustomDimensions; StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); @@ -45,7 +45,7 @@ public void testCustomerIkey() { @Test public void testVersion() { - CustomDimensions customDimensions = new CustomDimensions(false); + CustomDimensions customDimensions = new CustomDimensions; StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); @@ -59,7 +59,7 @@ public void testVersion() { @Test public void testRuntimeVersion() { - CustomDimensions customDimensions = new CustomDimensions(false); + CustomDimensions customDimensions = new CustomDimensions; StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java index 97805566f090..10f90d70bf58 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java @@ -65,7 +65,7 @@ public void testSpringSchedulingEnabled() { @Test public void testAddInstrumentationFirstLong() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions(false), FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions, FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.jdbc"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.tomcat-7.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.http-url-connection"); @@ -83,7 +83,7 @@ public void testAddInstrumentationFirstLong() { @Test public void testAddInstrumentationToSecondLongOnly() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions(false), FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions, FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.undertow-1.4"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.play-ws-2.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.vertx-kafka-client-3.5"); @@ -101,7 +101,7 @@ public void testAddInstrumentationToSecondLongOnly() { @Test public void testAddInstrumentationToBoth() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions(false), FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions, FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.undertow-1.4"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.play-ws-2.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.vertx-kafka-client-3.5"); @@ -128,7 +128,7 @@ private static void testFeatureTrackingDisablement(Feature feature) { private static void testFeature(Feature feature, boolean expected) { // given FeatureStatsbeat featureStatsbeat = - new FeatureStatsbeat(new CustomDimensions(false), FeatureType.FEATURE); + new FeatureStatsbeat(new CustomDimensions, FeatureType.FEATURE); // when if (expected) { From 456a1dc77734e8bb814c160e4c407c14efe5fbc2 Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 6 Oct 2023 12:46:26 -0700 Subject: [PATCH 12/19] Fix compilation --- .../implementation/statsbeat/AttachStatsbeatTest.java | 2 +- .../implementation/statsbeat/CustomDimensionsTest.java | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java index 0ec7ee158ff9..0303c815478e 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java @@ -39,7 +39,7 @@ public void testVirtualMachineResourceProviderId() throws IOException { BufferedSource source = Okio.buffer(Okio.source(in)); String result = source.readUtf8(); source.close(); - CustomDimensions customDimensions = new CustomDimensions; + CustomDimensions customDimensions = new CustomDimensions(); AzureMetadataService azureMetadataService = new AzureMetadataService(attachStatsbeat, customDimensions, (response) -> {}); azureMetadataService.updateMetadata(result); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java index a1ed3e9fc29a..e8a4d5a43871 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java @@ -15,14 +15,14 @@ public class CustomDimensionsTest { @Test public void testResourceProvider() { - CustomDimensions customDimensions = new CustomDimensions; + CustomDimensions customDimensions = new CustomDimensions(); assertThat(customDimensions.getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); } @Test public void testOperatingSystem() { - CustomDimensions customDimensions = new CustomDimensions; + CustomDimensions customDimensions = new CustomDimensions(); OperatingSystem os = OperatingSystem.OS_UNKNOWN; if (SystemInformation.isWindows()) { @@ -35,7 +35,7 @@ public void testOperatingSystem() { @Test public void testCustomerIkey() { - CustomDimensions customDimensions = new CustomDimensions; + CustomDimensions customDimensions = new CustomDimensions(); StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); @@ -45,7 +45,7 @@ public void testCustomerIkey() { @Test public void testVersion() { - CustomDimensions customDimensions = new CustomDimensions; + CustomDimensions customDimensions = new CustomDimensions(); StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); @@ -59,7 +59,7 @@ public void testVersion() { @Test public void testRuntimeVersion() { - CustomDimensions customDimensions = new CustomDimensions; + CustomDimensions customDimensions = new CustomDimensions(); StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); From 1085d0855e4e38268b75a493c9f9b5c444d3e3b0 Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 6 Oct 2023 12:48:35 -0700 Subject: [PATCH 13/19] Fix --- .../implementation/statsbeat/NetworkStatsbeat.java | 2 +- .../implementation/statsbeat/NonessentialStatsbeat.java | 2 +- .../implementation/statsbeat/AttachStatsbeatTest.java | 4 ++-- .../statsbeat/AzureMetadataServiceTest.java | 8 ++++---- .../implementation/statsbeat/FeatureStatsbeatTest.java | 8 ++++---- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java index 40b1ee212350..2d4a84e7631c 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NetworkStatsbeat.java @@ -39,7 +39,7 @@ public class NetworkStatsbeat extends BaseStatsbeat { // only used by tests NetworkStatsbeat() { - super(new CustomDimensions); + super(new CustomDimensions()); } NetworkStatsbeat(CustomDimensions customDimensions) { diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java index a7413428f5c2..1922578fdcc3 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/NonessentialStatsbeat.java @@ -23,7 +23,7 @@ public class NonessentialStatsbeat extends BaseStatsbeat implements LocalStorage // only used by tests NonessentialStatsbeat() { - super(new CustomDimensions); + super(new CustomDimensions()); } NonessentialStatsbeat(CustomDimensions customDimensions) { diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java index 0303c815478e..dbb26a041c16 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AttachStatsbeatTest.java @@ -26,7 +26,7 @@ public class AttachStatsbeatTest { @BeforeEach public void setup() { - attachStatsbeat = new AttachStatsbeat(new CustomDimensions); + attachStatsbeat = new AttachStatsbeat(new CustomDimensions()); } @Test @@ -79,7 +79,7 @@ public void testAksResourceProviderId() { @Test public void testUnknownResourceProviderId() { - assertThat(new CustomDimensions.getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); + assertThat(new CustomDimensions().getResourceProvider()).isEqualTo(ResourceProvider.UNKNOWN); assertThat(attachStatsbeat.getResourceProviderId()).isEqualTo("unknown"); } } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java index b0b03d29ee5c..a7a46fd53e5e 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataServiceTest.java @@ -27,9 +27,9 @@ public void testParseJsonResponseLinux() throws IOException { String result = source.readUtf8(); source.close(); - AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions); + AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions()); AzureMetadataService azureMetadataService = - new AzureMetadataService(attachStatsbeat, new CustomDimensions, response -> {}); + new AzureMetadataService(attachStatsbeat, new CustomDimensions(), response -> {}); azureMetadataService.updateMetadata(result); MetadataInstanceResponse response = attachStatsbeat.getMetadataInstanceResponse(); @@ -50,9 +50,9 @@ public void testParseJsonResponseWindows() throws IOException { String result = source.readUtf8(); source.close(); - AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions); + AttachStatsbeat attachStatsbeat = new AttachStatsbeat(new CustomDimensions()); AzureMetadataService azureMetadataService = - new AzureMetadataService(attachStatsbeat, new CustomDimensions, (response) -> {}); + new AzureMetadataService(attachStatsbeat, new CustomDimensions(), (response) -> {}); azureMetadataService.updateMetadata(result); MetadataInstanceResponse response = attachStatsbeat.getMetadataInstanceResponse(); diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java index 10f90d70bf58..949ad91567eb 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/FeatureStatsbeatTest.java @@ -65,7 +65,7 @@ public void testSpringSchedulingEnabled() { @Test public void testAddInstrumentationFirstLong() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions, FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions(), FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.jdbc"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.tomcat-7.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.http-url-connection"); @@ -83,7 +83,7 @@ public void testAddInstrumentationFirstLong() { @Test public void testAddInstrumentationToSecondLongOnly() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions, FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions(), FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.undertow-1.4"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.play-ws-2.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.vertx-kafka-client-3.5"); @@ -101,7 +101,7 @@ public void testAddInstrumentationToSecondLongOnly() { @Test public void testAddInstrumentationToBoth() { FeatureStatsbeat instrumentationStatsbeat = - new FeatureStatsbeat(new CustomDimensions, FeatureType.INSTRUMENTATION); + new FeatureStatsbeat(new CustomDimensions(), FeatureType.INSTRUMENTATION); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.undertow-1.4"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.play-ws-2.0"); instrumentationStatsbeat.addInstrumentation("io.opentelemetry.vertx-kafka-client-3.5"); @@ -128,7 +128,7 @@ private static void testFeatureTrackingDisablement(Feature feature) { private static void testFeature(Feature feature, boolean expected) { // given FeatureStatsbeat featureStatsbeat = - new FeatureStatsbeat(new CustomDimensions, FeatureType.FEATURE); + new FeatureStatsbeat(new CustomDimensions(), FeatureType.FEATURE); // when if (expected) { From 0b855a22482629e6555b5893e80bb880680039e9 Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 6 Oct 2023 12:54:30 -0700 Subject: [PATCH 14/19] Fix tests --- .../exporter/implementation/statsbeat/CustomDimensions.java | 3 ++- .../implementation/statsbeat/CustomDimensionsTest.java | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java index 494ffd75ae8a..7fa1f6887c83 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java @@ -77,7 +77,8 @@ private static OperatingSystem initOperatingSystem() { } } - private static String initSdkVersion() { + // package protected - visible for test + static String initSdkVersion() { if (RpAttachType.getRpAttachType() == RpAttachType.MANUAL) { return VersionGenerator.getSdkVersion(); } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java index e8a4d5a43871..3a83b19d602a 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java @@ -50,9 +50,7 @@ public void testVersion() { StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); - String sdkVersion = PropertyHelper.getQualifiedSdkVersionString(); - String version = sdkVersion.substring(sdkVersion.lastIndexOf(':') + 1); - + String version = CustomDimensions.initSdkVersion(); MetricsData data = (MetricsData) telemetryBuilder.build().getData().getBaseData(); assertThat(data.getProperties()).containsEntry("version", version); } From 273d4aa70ee7520c23f62ec6efb42013fddc4fcd Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 6 Oct 2023 12:56:35 -0700 Subject: [PATCH 15/19] Remove setRpAttachType --- .../exporter/implementation/statsbeat/StatsbeatModule.java | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java index e81b00e199bb..e78c93e7aaf3 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/StatsbeatModule.java @@ -49,7 +49,6 @@ public StatsbeatModule(Consumer vmMetadataServiceCallb networkStatsbeat = new NetworkStatsbeat(customDimensions); nonessentialStatsbeat = new NonessentialStatsbeat(customDimensions); } else { - RpAttachType.setRpAttachType(RpAttachType.MANUAL); networkStatsbeat = null; nonessentialStatsbeat = null; } From 2e72fb0bce46125181233a6125fecf831235659d Mon Sep 17 00:00:00 2001 From: heyams Date: Wed, 11 Oct 2023 11:19:09 -0700 Subject: [PATCH 16/19] Use unreleased version of azure-core-test per Srikanta's request --- eng/versioning/version_client.txt | 1 + sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index ead3dea1806e..ee8f94ee2428 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -442,6 +442,7 @@ com.azure.tools:azure-sdk-build-tool;1.0.0;1.1.0-beta.1 # In the pom, the version update tag after the version should name the unreleased package and the dependency version: # unreleased_com.azure:azure-messaging-eventgrid;4.19.0-beta.1 +unreleased_com.azure:azure-core-test;1.21.0 # Released Beta dependencies: Copy the entry from above, prepend "beta_", remove the current # version and set the version to the released beta. Released beta dependencies are only valid diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml b/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml index 37a345553c54..6916aaacbbe3 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml @@ -151,7 +151,7 @@ com.azure azure-core-test - 1.21.0 + 1.21.0 test From 69ce931eee5f7b688eb61e4cf92d4ddbbf3d5682 Mon Sep 17 00:00:00 2001 From: heyams Date: Thu, 12 Oct 2023 17:39:51 -0700 Subject: [PATCH 17/19] Address comments --- .../exporter/AzureMonitorExporterBuilder.java | 20 +++++++------- .../statsbeat/AzureMetadataService.java | 5 +--- .../statsbeat/CustomDimensions.java | 27 +++++-------------- .../statsbeat/ResourceProvider.java | 16 +++++++++++ .../statsbeat/CustomDimensionsTest.java | 3 +-- 5 files changed, 36 insertions(+), 35 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java index f1eaa23f0ec7..6c778151592b 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/AzureMonitorExporterBuilder.java @@ -368,8 +368,8 @@ private MetricExporter buildMetricExporter(ConfigProperties configProperties) { this::getStatsbeatConnectionString, connectionString::getInstrumentationKey, false, - getStatsbeatInterval(STATSBEAT_LONG_INTERVAL_SECONDS, configProperties.getInt(STATSBEAT_LONG_INTERVAL_SECONDS)), - getStatsbeatInterval(STATSBEAT_SHORT_INTERVAL_SECONDS, configProperties.getInt(STATSBEAT_SHORT_INTERVAL_SECONDS)), + getStatsbeaLongInterval(configProperties.getInt(STATSBEAT_LONG_INTERVAL_SECONDS)), + getStatsbeatShortInterval(configProperties.getInt(STATSBEAT_SHORT_INTERVAL_SECONDS)), false, initStatsbeatFeatures()); } @@ -377,15 +377,17 @@ private MetricExporter buildMetricExporter(ConfigProperties configProperties) { new MetricDataMapper(createDefaultsPopulator(configProperties), true), builtTelemetryItemExporter); } - private long getStatsbeatInterval(String key, Integer intervalFromConfig) { + private long getStatsbeaLongInterval(Integer intervalFromConfig) { if (intervalFromConfig == null) { - if ("STATSBEAT_LONG_INTERVAL_SECONDS".equals(key)) { - return DAYS.toSeconds(1); // default every 24 hours - } else if ("STATSBEAT_SHORT_INTERVAL_SECONDS".equals(key)) { - return MINUTES.toSeconds(15); // default every 15 mins - } + return DAYS.toSeconds(1); // default to every 24 hours + } + return SECONDS.toSeconds(intervalFromConfig); + } + + private long getStatsbeatShortInterval(Integer intervalFromConfig) { + if (intervalFromConfig == null) { + return MINUTES.toSeconds(15); // default to every 15 mins } - assert intervalFromConfig != null; return SECONDS.toSeconds(intervalFromConfig); } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataService.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataService.java index f2e5dfa9fc1f..1e0077f4131e 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataService.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/AzureMetadataService.java @@ -8,9 +8,6 @@ import com.azure.core.http.HttpPipelineBuilder; import com.azure.core.http.HttpRequest; import com.azure.core.http.HttpResponse; -import com.azure.core.http.policy.CookiePolicy; -import com.azure.core.http.policy.RetryPolicy; -import com.azure.core.http.policy.UserAgentPolicy; import com.azure.monitor.opentelemetry.exporter.implementation.NoopTracer; import com.azure.monitor.opentelemetry.exporter.implementation.utils.ThreadPoolUtils; import com.fasterxml.jackson.databind.DeserializationFeature; @@ -81,7 +78,7 @@ void updateMetadata(String response) throws IOException { private void updateMetadata(MetadataInstanceResponse metadataInstanceResponse) { vmMetadataServiceCallback.accept(metadataInstanceResponse); attachStatsbeat.updateMetadataInstance(metadataInstanceResponse); - customDimensions.setResourceProvider(ResourceProvider.RP_VM); + customDimensions.setResourceProviderVm(); // osType from the Azure Metadata Service has a higher precedence over the running app’s // operating system. diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java index 7fa1f6887c83..94e0691bd21f 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensions.java @@ -5,7 +5,6 @@ import com.azure.monitor.opentelemetry.exporter.implementation.builders.StatsbeatTelemetryBuilder; import com.azure.monitor.opentelemetry.exporter.implementation.utils.PropertyHelper; -import com.azure.monitor.opentelemetry.exporter.implementation.utils.Strings; import com.azure.monitor.opentelemetry.exporter.implementation.utils.SystemInformation; import com.azure.monitor.opentelemetry.exporter.implementation.utils.VersionGenerator; @@ -21,18 +20,7 @@ public class CustomDimensions { // visible for testing CustomDimensions() { - if ("java".equals(System.getenv("FUNCTIONS_WORKER_RUNTIME"))) { - resourceProvider = ResourceProvider.RP_FUNCTIONS; - } else if (!Strings.isNullOrEmpty(System.getenv("WEBSITE_SITE_NAME"))) { - resourceProvider = ResourceProvider.RP_APPSVC; - } else if (!Strings.isNullOrEmpty(System.getenv("KUBERNETES_SERVICE_HOST"))) { - resourceProvider = ResourceProvider.RP_AKS; - } else if (!Strings.isNullOrEmpty(System.getenv("APPLICATIONINSIGHTS_SPRINGCLOUD_SERVICE_ID"))) { - resourceProvider = ResourceProvider.RP_SPRING_CLOUD; - } else { - resourceProvider = ResourceProvider.UNKNOWN; - } - + resourceProvider = ResourceProvider.initResourceProvider(); operatingSystem = initOperatingSystem(); sdkVersion = initSdkVersion(); runtimeVersion = System.getProperty("java.version"); @@ -41,19 +29,19 @@ public class CustomDimensions { language = "java"; } - public ResourceProvider getResourceProvider() { + ResourceProvider getResourceProvider() { return resourceProvider; } - public OperatingSystem getOperatingSystem() { + OperatingSystem getOperatingSystem() { return operatingSystem; } - public void setResourceProvider(ResourceProvider resourceProvider) { - this.resourceProvider = resourceProvider; + void setResourceProviderVm() { + this.resourceProvider = ResourceProvider.RP_VM; } - public void setOperatingSystem(OperatingSystem operatingSystem) { + void setOperatingSystem(OperatingSystem operatingSystem) { this.operatingSystem = operatingSystem; } @@ -77,8 +65,7 @@ private static OperatingSystem initOperatingSystem() { } } - // package protected - visible for test - static String initSdkVersion() { + private static String initSdkVersion() { if (RpAttachType.getRpAttachType() == RpAttachType.MANUAL) { return VersionGenerator.getSdkVersion(); } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/ResourceProvider.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/ResourceProvider.java index 96fc23f333f3..37b7c2cce6e6 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/ResourceProvider.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/main/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/ResourceProvider.java @@ -3,6 +3,8 @@ package com.azure.monitor.opentelemetry.exporter.implementation.statsbeat; +import com.azure.monitor.opentelemetry.exporter.implementation.utils.Strings; + enum ResourceProvider { RP_FUNCTIONS("functions"), RP_APPSVC("appsvc"), @@ -20,4 +22,18 @@ enum ResourceProvider { String getValue() { return value; } + + static ResourceProvider initResourceProvider() { + if ("java".equals(System.getenv("FUNCTIONS_WORKER_RUNTIME"))) { + return ResourceProvider.RP_FUNCTIONS; + } else if (!Strings.isNullOrEmpty(System.getenv("WEBSITE_SITE_NAME"))) { + return ResourceProvider.RP_APPSVC; + } else if (!Strings.isNullOrEmpty(System.getenv("KUBERNETES_SERVICE_HOST"))) { + return ResourceProvider.RP_AKS; + } else if (!Strings.isNullOrEmpty(System.getenv("APPLICATIONINSIGHTS_SPRINGCLOUD_SERVICE_ID"))) { + return ResourceProvider.RP_SPRING_CLOUD; + } else { + return ResourceProvider.UNKNOWN; + } + } } diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java index 3a83b19d602a..b35e52f3cfe8 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/src/test/java/com/azure/monitor/opentelemetry/exporter/implementation/statsbeat/CustomDimensionsTest.java @@ -50,9 +50,8 @@ public void testVersion() { StatsbeatTelemetryBuilder telemetryBuilder = StatsbeatTelemetryBuilder.create("test", 1); customDimensions.populateProperties(telemetryBuilder, null); - String version = CustomDimensions.initSdkVersion(); MetricsData data = (MetricsData) telemetryBuilder.build().getData().getBaseData(); - assertThat(data.getProperties()).containsEntry("version", version); + assertThat(data.getProperties()).containsKeys("version"); } @Test From 84d82e99432d976b8bba0886c6092069cf84cdf1 Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 13 Oct 2023 10:25:21 -0700 Subject: [PATCH 18/19] Update unreleased_com.azure:azure-core-test version --- eng/versioning/version_client.txt | 2 +- sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index 2db363b72457..d4273813329b 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -443,7 +443,7 @@ com.azure.tools:azure-sdk-build-tool;1.0.0;1.1.0-beta.1 # unreleased_com.azure:azure-core-test;1.22.0-beta.1 unreleased_com.azure:azure-messaging-eventgrid;4.19.0-beta.1 -unreleased_com.azure:azure-core-test;1.21.0 +unreleased_com.azure:azure-core-test;1.22.0-beta.1 # Released Beta dependencies: Copy the entry from above, prepend "beta_", remove the current # version and set the version to the released beta. Released beta dependencies are only valid diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml b/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml index 6916aaacbbe3..d3a5fe1e7b71 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml @@ -151,7 +151,7 @@ com.azure azure-core-test - 1.21.0 + 1.22.0-beta.1 test From 0c98a5d7d3684af6bd5df302f9672e0347558633 Mon Sep 17 00:00:00 2001 From: heyams Date: Fri, 13 Oct 2023 10:36:09 -0700 Subject: [PATCH 19/19] Fix duplicate entry in version_client.txt --- eng/versioning/version_client.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index d4273813329b..afd95058f9fb 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -441,7 +441,6 @@ com.azure.tools:azure-sdk-build-tool;1.0.0;1.1.0-beta.1 # note: The unreleased dependencies will not be manipulated with the automatic PR creation code. # In the pom, the version update tag after the version should name the unreleased package and the dependency version: # -unreleased_com.azure:azure-core-test;1.22.0-beta.1 unreleased_com.azure:azure-messaging-eventgrid;4.19.0-beta.1 unreleased_com.azure:azure-core-test;1.22.0-beta.1