diff --git a/src/Promitor.Agents.Scraper/AzureMonitorClientFactory.cs b/src/Promitor.Agents.Scraper/AzureMonitorClientFactory.cs index d76430497..a561f2db2 100644 --- a/src/Promitor.Agents.Scraper/AzureMonitorClientFactory.cs +++ b/src/Promitor.Agents.Scraper/AzureMonitorClientFactory.cs @@ -31,14 +31,14 @@ public class AzureMonitorClientFactory /// Options for Azure Monitor integration /// Options for Azure Monitor logging /// Factory to create loggers with - /// Whether to use the new Azure.Monitor.Query package for queries - public IAzureMonitorClient CreateIfNotExists(AzureCloud cloud, string tenantId, string subscriptionId, MetricSinkWriter metricSinkWriter, IAzureScrapingSystemMetricsPublisher azureScrapingSystemMetricsPublisher, IMemoryCache resourceMetricDefinitionMemoryCache, IConfiguration configuration, IOptions azureMonitorIntegrationConfiguration, IOptions azureMonitorLoggingConfiguration, ILoggerFactory loggerFactory, bool useAzureMonitorSdk) + public IAzureMonitorClient CreateIfNotExists(AzureCloud cloud, string tenantId, string subscriptionId, MetricSinkWriter metricSinkWriter, IAzureScrapingSystemMetricsPublisher azureScrapingSystemMetricsPublisher, IMemoryCache resourceMetricDefinitionMemoryCache, IConfiguration configuration, IOptions azureMonitorIntegrationConfiguration, IOptions azureMonitorLoggingConfiguration, ILoggerFactory loggerFactory) { if (_azureMonitorClients.TryGetValue(subscriptionId, out var value)) { return value; } - + + var useAzureMonitorSdk = azureMonitorIntegrationConfiguration.Value.UseAzureMonitorSdk; IAzureMonitorClient azureMonitorClient; if (useAzureMonitorSdk) { azureMonitorClient = CreateNewAzureMonitorQueryClient(cloud, tenantId, subscriptionId, metricSinkWriter, azureScrapingSystemMetricsPublisher, resourceMetricDefinitionMemoryCache, configuration, azureMonitorIntegrationConfiguration, azureMonitorLoggingConfiguration, loggerFactory); diff --git a/src/Promitor.Agents.Scraper/Docs/Open-Api.xml b/src/Promitor.Agents.Scraper/Docs/Open-Api.xml index 08f26d6c2..7299b25fa 100644 --- a/src/Promitor.Agents.Scraper/Docs/Open-Api.xml +++ b/src/Promitor.Agents.Scraper/Docs/Open-Api.xml @@ -4,7 +4,7 @@ Promitor.Agents.Scraper - + Provides an Azure Monitor client @@ -18,7 +18,6 @@ Options for Azure Monitor integration Options for Azure Monitor logging Factory to create loggers with - Whether to use the new Azure.Monitor.Query package for queries diff --git a/src/Promitor.Agents.Scraper/Scheduling/ResourcesScrapingJob.cs b/src/Promitor.Agents.Scraper/Scheduling/ResourcesScrapingJob.cs index ce6ce8dc8..658c47466 100644 --- a/src/Promitor.Agents.Scraper/Scheduling/ResourcesScrapingJob.cs +++ b/src/Promitor.Agents.Scraper/Scheduling/ResourcesScrapingJob.cs @@ -277,10 +277,10 @@ private async Task ScrapeMetric(ScrapeDefinition scrap ? scrapeDefinition.Resource.SubscriptionId : _metricsDeclaration.AzureMetadata.SubscriptionId; var azureEnvironent = _metricsDeclaration.AzureMetadata.Cloud.GetAzureEnvironment(); - Logger.LogInformation("Parsed SDK Config {UseAzureMonitorSdk}", _metricsDeclaration.UseAzureMonitorSdk); + Logger.LogInformation("Parsed SDK Config {UseAzureMonitorSdk}", _azureMonitorIntegrationConfiguration.Value.UseAzureMonitorSdk); var azureMonitorClient = _azureMonitorClientFactory.CreateIfNotExists(_metricsDeclaration.AzureMetadata.Cloud, _metricsDeclaration.AzureMetadata.TenantId, resourceSubscriptionId, _metricSinkWriter, _azureScrapingSystemMetricsPublisher, _resourceMetricDefinitionMemoryCache, _configuration, - _azureMonitorIntegrationConfiguration, _azureMonitorLoggingConfiguration, _loggerFactory, _metricsDeclaration.UseAzureMonitorSdk); + _azureMonitorIntegrationConfiguration, _azureMonitorLoggingConfiguration, _loggerFactory); var tokenCredential = AzureAuthenticationFactory.GetTokenCredential(azureEnvironent.ManagementEndpoint, _metricsDeclaration.AzureMetadata.TenantId, AzureAuthenticationFactory.GetConfiguredAzureAuthentication(_configuration), new Uri(_metricsDeclaration.AzureMetadata.Cloud.GetAzureEnvironment().AuthenticationEndpoint)); diff --git a/src/Promitor.Core.Scraping/Configuration/Model/MetricsDeclaration.cs b/src/Promitor.Core.Scraping/Configuration/Model/MetricsDeclaration.cs index 5566e5af7..3c820975f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Model/MetricsDeclaration.cs +++ b/src/Promitor.Core.Scraping/Configuration/Model/MetricsDeclaration.cs @@ -5,7 +5,6 @@ namespace Promitor.Core.Scraping.Configuration.Model { public class MetricsDeclaration { - public bool UseAzureMonitorSdk { get; set; } = true; public AzureMetadata AzureMetadata { get; set; } public MetricDefaults MetricDefaults { get; set; } = new MetricDefaults(); public List Metrics { get; set; } = new List(); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs index 57759c1ad..5dd648d04 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs @@ -20,8 +20,6 @@ public V1Deserializer(IDeserializer azureMetadataDeserializer, Map(definition => definition.Version) .IsRequired() .MapUsing(GetVersion); - Map(definition => definition.UseAzureMonitorSdk) - .WithDefault(true); Map(definition => definition.AzureMetadata) .IsRequired() .MapUsingDeserializer(azureMetadataDeserializer); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs index 0d139e719..4c4e80082 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs @@ -9,7 +9,6 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model public class MetricsDeclarationV1 { public string Version { get; set; } = SpecVersion.v1.ToString(); - public bool UseAzureMonitorSdk { get; set; } = true; public AzureMetadataV1 AzureMetadata { get; set; } public MetricDefaultsV1 MetricDefaults { get; set; } public IReadOnlyCollection Metrics { get; set; } diff --git a/src/Promitor.Integrations.AzureMonitor/Configuration/AzureMonitorIntegrationConfiguration.cs b/src/Promitor.Integrations.AzureMonitor/Configuration/AzureMonitorIntegrationConfiguration.cs index 52daf0f65..577f15979 100644 --- a/src/Promitor.Integrations.AzureMonitor/Configuration/AzureMonitorIntegrationConfiguration.cs +++ b/src/Promitor.Integrations.AzureMonitor/Configuration/AzureMonitorIntegrationConfiguration.cs @@ -3,5 +3,6 @@ public class AzureMonitorIntegrationConfiguration { public AzureMonitorHistoryConfiguration History { get; set; } = new(); + public bool UseAzureMonitorSdk { get; set; } = true; } } \ No newline at end of file diff --git a/src/Promitor.Integrations.AzureMonitor/LegacyAzureMonitorClient.cs b/src/Promitor.Integrations.AzureMonitor/LegacyAzureMonitorClient.cs index 7cedee566..0a541a60a 100644 --- a/src/Promitor.Integrations.AzureMonitor/LegacyAzureMonitorClient.cs +++ b/src/Promitor.Integrations.AzureMonitor/LegacyAzureMonitorClient.cs @@ -61,7 +61,7 @@ public LegacyAzureMonitorClient(AzureEnvironment azureCloud, string tenantId, st _resourceMetricDefinitionMemoryCache = resourceMetricDefinitionMemoryCache; _azureMonitorIntegrationConfiguration = azureMonitorIntegrationConfiguration; _logger = loggerFactory.CreateLogger(); - _logger.LogInformation("Using legacy scraper"); + _logger.LogWarning("Will use deprecated Azure Management Libraries for Metric Scraping"); _authenticatedAzureSubscription = CreateLegacyAzureClient(azureCloud, tenantId, subscriptionId, azureAuthenticationInfo, loggerFactory, metricSinkWriter, azureScrapingSystemMetricsPublisher, azureMonitorLoggingConfiguration); } diff --git a/src/Promitor.Tests.Unit/Configuration/RuntimeConfigurationUnitTest.cs b/src/Promitor.Tests.Unit/Configuration/RuntimeConfigurationUnitTest.cs index f100abcf0..0fb5a064e 100644 --- a/src/Promitor.Tests.Unit/Configuration/RuntimeConfigurationUnitTest.cs +++ b/src/Promitor.Tests.Unit/Configuration/RuntimeConfigurationUnitTest.cs @@ -96,6 +96,43 @@ public async Task RuntimeConfiguration_HasStartingFromInHoursConfiguredForAzureM Assert.Equal(expectedStartingFromInHours, runtimeConfiguration.AzureMonitor.Integration.History.StartingFromInHours); } + [Fact] + public async Task RuntimeConfiguration_HasNoNewSdkFlagForAzureMonitorIntegration_DefaultsToTrue() + { + // Arrange + var configuration = await RuntimeConfigurationGenerator.WithServerConfiguration() + .WithAzureMonitorIntegration(useAzureMonitorSdk: null) + .GenerateAsync(); + + // Act + var runtimeConfiguration = configuration.Get(); + + // Assert + Assert.NotNull(runtimeConfiguration); + Assert.NotNull(runtimeConfiguration.AzureMonitor); + Assert.NotNull(runtimeConfiguration.AzureMonitor.Integration); + Assert.True(runtimeConfiguration.AzureMonitor.Integration.UseAzureMonitorSdk); + } + + [Fact] + public async Task RuntimeConfiguration_OverrideNewSdkFlagForAzureMonitorIntegration_BecomesFalse() + { + // Arrange + var configuration = await RuntimeConfigurationGenerator.WithServerConfiguration() + .WithAzureMonitorIntegration(useAzureMonitorSdk: false) + .GenerateAsync(); + + // Act + var runtimeConfiguration = configuration.Get(); + + // Assert + Assert.NotNull(runtimeConfiguration); + Assert.NotNull(runtimeConfiguration.AzureMonitor); + Assert.NotNull(runtimeConfiguration.AzureMonitor.Integration); + Assert.False(runtimeConfiguration.AzureMonitor.Integration.UseAzureMonitorSdk); + } + + [Theory] [InlineData(true)] [InlineData(false)] diff --git a/src/Promitor.Tests.Unit/Generators/Config/RuntimeConfigurationGenerator.cs b/src/Promitor.Tests.Unit/Generators/Config/RuntimeConfigurationGenerator.cs index cbcab7220..0c4751a2b 100644 --- a/src/Promitor.Tests.Unit/Generators/Config/RuntimeConfigurationGenerator.cs +++ b/src/Promitor.Tests.Unit/Generators/Config/RuntimeConfigurationGenerator.cs @@ -235,7 +235,7 @@ public RuntimeConfigurationGenerator WithAzureMonitorLogging(bool isEnabled = tr return this; } - public RuntimeConfigurationGenerator WithAzureMonitorIntegration(int? startingFromInHours = 100) + public RuntimeConfigurationGenerator WithAzureMonitorIntegration(int? startingFromInHours = 100, bool? useAzureMonitorSdk = true) { _runtimeConfiguration.AzureMonitor ??= new AzureMonitorConfiguration(); _runtimeConfiguration.AzureMonitor.Integration ??= new AzureMonitorIntegrationConfiguration(); @@ -247,6 +247,11 @@ public RuntimeConfigurationGenerator WithAzureMonitorIntegration(int? startingFr _runtimeConfiguration.AzureMonitor.Integration.History.StartingFromInHours = startingFromInHours.Value; } + if (useAzureMonitorSdk != null) + { + _runtimeConfiguration.AzureMonitor.Integration.UseAzureMonitorSdk = useAzureMonitorSdk.Value; + } + return this; } @@ -340,6 +345,7 @@ public async Task GenerateAsync() if (_runtimeConfiguration?.AzureMonitor.Integration?.History != null) { configurationBuilder.AppendLine(" integration:"); + configurationBuilder.AppendLine($" useAzureMonitorSdk: {_runtimeConfiguration?.AzureMonitor.Integration.UseAzureMonitorSdk}"); configurationBuilder.AppendLine(" history:"); configurationBuilder.AppendLine($" startingFromInHours: {_runtimeConfiguration?.AzureMonitor.Integration.History.StartingFromInHours}"); } diff --git a/src/Promitor.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs b/src/Promitor.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs index 01ed0f55f..3eee06a70 100644 --- a/src/Promitor.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs +++ b/src/Promitor.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs @@ -187,30 +187,5 @@ public void Deserialize_Metric_SetsMetricsNull() // Assert Assert.Null(declaration.Metrics); } - - [Fact] - public void Deserialize_NoSDKFlag_DefaultsToTrue() - { - // Arrange - var node = YamlUtils.CreateYamlNode( -@"azureMetadata: - tenantId: '123'"); - var builder = _deserializer.Deserialize(node, _errorReporter.Object); - - Assert.True(builder.UseAzureMonitorSdk); - } - - [Fact] - public void Deserialize_SdkSpecified_SetsCorrectFlag() - { - // Arrange - var yamlNode = YamlUtils.CreateYamlNode("useAzureMonitorSdk: false"); - - // Act - var builder = _deserializer.Deserialize(yamlNode, _errorReporter.Object); - - // Assert - Assert.False(builder.UseAzureMonitorSdk); - } } }