From 43223e8eb90c9d0263d6f539bffb14bfbfbdf236 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Wed, 7 Aug 2019 17:24:31 +0100 Subject: [PATCH 01/32] Add a v2 serializer - Renaming the v1 serializer to `V1Serializer` to avoid having multiple classes all called `ConfigurationSerializer`. - Added the initial framework for the `V2Serializer`. --- .../Serialization/ConfigurationSerializer.cs | 2 +- .../Serialization/Enum/SpecVersion.cs | 6 +- ...igurationSerializer.cs => V1Serializer.cs} | 4 +- .../Serialization/v2/Core/IDeserializer.cs | 18 ++ .../Serialization/v2/Core/V2Serializer.cs | 84 +++++++++ .../Serialization/v2/Model/AzureMetadataV2.cs | 11 ++ .../v2/Model/MetricDefaultsV2.cs | 6 + .../v2/Model/MetricDefinitionV2.cs | 6 + .../v2/Model/MetricsDeclarationV2.cs | 16 ++ .../Promitor.Scraper.Tests.Unit.csproj | 1 + .../Serialization/YamlUtils.cs | 18 ++ .../v2/Core/V2SerializerTests.cs | 178 ++++++++++++++++++ 12 files changed, 345 insertions(+), 5 deletions(-) rename src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/{ConfigurationSerializer.cs => V1Serializer.cs} (95%) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IDeserializer.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetadataV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/YamlUtils.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs index e399c2ea4..2c15be989 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs @@ -55,7 +55,7 @@ private MetricsDeclaration InterpretYamlStream(YamlStream metricsDeclarationYaml switch (specVersion) { case SpecVersion.v1: - var v1Serializer = new v1.Core.ConfigurationSerializer(_logger); + var v1Serializer = new v1.Core.V1Serializer(_logger); var v1Config = v1Serializer.InterpretYamlStream(rootNode); return _mapper.Map(v1Config); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs index 5954daf9c..44d0007f1 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs @@ -1,8 +1,10 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.Enum { - // ReSharper disable once InconsistentNaming public enum SpecVersion { - v1 + // ReSharper disable InconsistentNaming + v1, + v2 + // ReSharper restore InconsistentNaming } } \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ConfigurationSerializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Serializer.cs similarity index 95% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ConfigurationSerializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Serializer.cs index 0a63206a2..29f0122b1 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ConfigurationSerializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Serializer.cs @@ -6,9 +6,9 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class ConfigurationSerializer + public class V1Serializer { - public ConfigurationSerializer(ILogger logger) + public V1Serializer(ILogger logger) { Logger = logger; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IDeserializer.cs new file mode 100644 index 000000000..c3f62b1b4 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IDeserializer.cs @@ -0,0 +1,18 @@ +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + /// + /// An object that can deserialize a yaml node into an object. + /// + /// The type of object that can be deserialized. + public interface IDeserializer + { + /// + /// Deserializes the specified node. + /// + /// The node to deserialize. + /// The deserialized object. + T Deserialize(YamlNode node); + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs new file mode 100644 index 000000000..1b82756ad --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs @@ -0,0 +1,84 @@ +using System.Collections.Generic; +using Promitor.Core.Scraping.Configuration.Serialization.Enum; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class V2Serializer + { + private readonly IDeserializer _azureMetadataDeserializer; + private readonly IDeserializer _defaultsDeserializer; + private readonly IDeserializer> _metricsDeserializer; + + public V2Serializer(IDeserializer azureMetadataDeserializer, + IDeserializer defaultsDeserializer, + IDeserializer> metricsDeserializer) + { + _azureMetadataDeserializer = azureMetadataDeserializer; + _defaultsDeserializer = defaultsDeserializer; + _metricsDeserializer = metricsDeserializer; + } + + public MetricsDeclarationV2 InterpretYamlStream(YamlMappingNode rootNode) + { + ValidateVersion(rootNode); + + var azureMetadata = DeserializeAzureMetadata(rootNode); + var metricDefaults = DeserializeMetricDefaults(rootNode); + var metrics = DeserializeMetrics(rootNode); + + return new MetricsDeclarationV2 + { + Version = SpecVersion.v2.ToString(), + AzureMetadata = azureMetadata, + MetricDefaults = metricDefaults, + Metrics = metrics + }; + } + + private static void ValidateVersion(YamlMappingNode rootNode) + { + var versionFound = rootNode.Children.TryGetValue("version", out var versionNode); + if (!versionFound) + { + throw new System.Exception("No 'version' element was found in the metrics config"); + } + + if (versionNode.ToString() != SpecVersion.v2.ToString()) + { + throw new System.Exception($"A 'version' element with a value of '{SpecVersion.v2}' was expected but the value '{versionNode}' was found"); + } + } + + private AzureMetadataV2 DeserializeAzureMetadata(YamlMappingNode rootNode) + { + if (rootNode.Children.TryGetValue("azureMetadata", out var azureMetadataNode)) + { + return _azureMetadataDeserializer.Deserialize(azureMetadataNode); + } + + return null; + } + + private MetricDefaultsV2 DeserializeMetricDefaults(YamlMappingNode rootNode) + { + if (rootNode.Children.TryGetValue("metricDefaults", out var defaultsNode)) + { + return _defaultsDeserializer.Deserialize(defaultsNode); + } + + return null; + } + + private List DeserializeMetrics(YamlMappingNode rootNode) + { + if (rootNode.Children.TryGetValue("metrics", out var metricsNode)) + { + return _metricsDeserializer.Deserialize(metricsNode); + } + + return null; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetadataV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetadataV2.cs new file mode 100644 index 000000000..6788f0dc2 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetadataV2.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + public class AzureMetadataV2 + { + public string TenantId { get; set; } + public string SubscriptionId { get; set; } + public string ResourceGroupName { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs new file mode 100644 index 000000000..62da1fcaa --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs @@ -0,0 +1,6 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + public class MetricDefaultsV2 + { + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs new file mode 100644 index 000000000..bf2741bb9 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs @@ -0,0 +1,6 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + public class MetricDefinitionV2 + { + } +} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs new file mode 100644 index 000000000..312032243 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + /// + /// Represents the metrics configuration file. + /// + public class MetricsDeclarationV2 + { + public string Version { get; set; } + public AzureMetadataV2 AzureMetadata { get; set; } + public MetricDefaultsV2 MetricDefaults { get; set; } + public List Metrics { get; set; } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Promitor.Scraper.Tests.Unit.csproj b/src/Promitor.Scraper.Tests.Unit/Promitor.Scraper.Tests.Unit.csproj index 8a0c0defc..0910992bd 100644 --- a/src/Promitor.Scraper.Tests.Unit/Promitor.Scraper.Tests.Unit.csproj +++ b/src/Promitor.Scraper.Tests.Unit/Promitor.Scraper.Tests.Unit.csproj @@ -28,6 +28,7 @@ + diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/YamlUtils.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/YamlUtils.cs new file mode 100644 index 000000000..4e55d2605 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/YamlUtils.cs @@ -0,0 +1,18 @@ +using System.IO; +using System.Linq; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization +{ + public class YamlUtils + { + public static YamlMappingNode CreateYamlNode(string yamlText) + { + var reader = new StringReader(yamlText); + var stream = new YamlStream(); + stream.Load(reader); + + return (YamlMappingNode)stream.Documents.First().RootNode; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs new file mode 100644 index 000000000..495edc42e --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Xunit; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class V2SerializerTests + { + private readonly Mock> _metadataDeserializer; + private readonly Mock> _defaultsDeserializer; + private readonly Mock>> _metricsDeserializer; + private readonly V2Serializer _serializer; + + public V2SerializerTests() + { + _metadataDeserializer = new Mock>(); + _defaultsDeserializer = new Mock>(); + _metricsDeserializer = new Mock>>(); + + _serializer = new V2Serializer( + _metadataDeserializer.Object, _defaultsDeserializer.Object, _metricsDeserializer.Object); + } + + [Fact] + public void InterpretYamlStream_NoVersionSpecified_ThrowsException() + { + // Arrange + var yamlNode = YamlUtils.CreateYamlNode("azureMetadata:"); + + // Act + var exception = Assert.Throws(() => _serializer.InterpretYamlStream(yamlNode)); + + // Assert + Assert.Equal("No 'version' element was found in the metrics config", exception.Message); + } + + [Fact] + public void InterpretYamlStream_VersionSpecified_SetsCorrectVersion() + { + // Arrange + var yamlNode = YamlUtils.CreateYamlNode("version: v2"); + + // Act + var builder = _serializer.InterpretYamlStream(yamlNode); + + // Assert + Assert.Equal("v2", builder.Version); + } + + [Fact] + public void InterpretYamlStream_WrongVersionSpecified_ThrowsException() + { + // Arrange + var yamlNode = YamlUtils.CreateYamlNode("version: v1"); + + // Act + var exception = Assert.Throws(() => _serializer.InterpretYamlStream(yamlNode)); + + // Assert + Assert.Equal("A 'version' element with a value of 'v2' was expected but the value 'v1' was found", exception.Message); + } + + [Fact] + public void InterpretYamlStream_AzureMetadata_UsesMetadataDeserializer() + { + // Arrange + const string config = +@"version: v2 +azureMetadata: + tenantId: 'abc-123'"; + var yamlNode = YamlUtils.CreateYamlNode(config); + var azureMetadata = new AzureMetadataV2(); + _metadataDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(azureMetadata); + + // Act + var declaration = _serializer.InterpretYamlStream(yamlNode); + + // Assert + Assert.Same(azureMetadata, declaration.AzureMetadata); + } + + [Fact] + public void InterpretYamlStream_AzureMetadataNotSupplied_SetsMetadataNull() + { + // Arrange + var yamlNode = YamlUtils.CreateYamlNode("version: v2"); + _metadataDeserializer.Setup( + d => d.Deserialize(It.IsAny())).Returns(new AzureMetadataV2()); + + // Act + var declaration = _serializer.InterpretYamlStream(yamlNode); + + // Assert + Assert.Null(declaration.AzureMetadata); + } + + [Fact] + public void InterpretYamlStream_MetricDefaults_UsesDefaultsDeserializer() + { + // Arrange + const string config = + @"version: v2 +metricDefaults: + aggregation: + interval: '00:05:00'"; + var yamlNode = YamlUtils.CreateYamlNode(config); + var metricDefaults = new MetricDefaultsV2(); + _defaultsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metricDefaults); + + // Act + var declaration = _serializer.InterpretYamlStream(yamlNode); + + // Assert + Assert.Same(metricDefaults, declaration.MetricDefaults); + } + + [Fact] + public void InterpretYamlStream_MetricDefaultsNotSupplied_SetsDefaultsNull() + { + // Arrange + const string config = + @"version: v2"; + var yamlNode = YamlUtils.CreateYamlNode(config); + _defaultsDeserializer.Setup( + d => d.Deserialize(It.IsAny())).Returns(new MetricDefaultsV2()); + + // Act + var declaration = _serializer.InterpretYamlStream(yamlNode); + + // Assert + Assert.Null(declaration.MetricDefaults); + } + + [Fact] + public void InterpretYamlStream_Metrics_UsesMetricsDeserializer() + { + // Arrange + const string config = + @"version: v2 +metrics: +- name: promitor_metrics_total"; + var yamlNode = YamlUtils.CreateYamlNode(config); + var metrics = new List(); + _metricsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metrics); + + // Act + var declaration = _serializer.InterpretYamlStream(yamlNode); + + // Assert + Assert.Same(metrics, declaration.Metrics); + } + + [Fact] + public void InterpretYamlStream_Metric_SetsMetricsNull() + { + // Arrange + const string config = + @"version: v2"; + var yamlNode = YamlUtils.CreateYamlNode(config); + _metricsDeserializer.Setup( + d => d.Deserialize(It.IsAny())).Returns(new List()); + + // Act + var declaration = _serializer.InterpretYamlStream(yamlNode); + + // Assert + Assert.Null(declaration.Metrics); + } + } +} From d0c39529b442f8dc09c485818dfbdf88abad719d Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Wed, 7 Aug 2019 17:24:55 +0100 Subject: [PATCH 02/32] Implement v2 AzureMetadataDeserializer --- .../v2/Core/AzureMetadataDeserializer.cs | 45 ++++++++++++++ .../v2/Core/AzureMetadataDeserializerTests.cs | 59 +++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs new file mode 100644 index 000000000..1a350877a --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs @@ -0,0 +1,45 @@ +using System; +using GuardNet; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class AzureMetadataDeserializer : IDeserializer + { + private const string TenantIdTag = "tenantId"; + private const string SubscriptionIdTag = "subscriptionId"; + private const string ResourceGroupNameTag = "resourceGroupName"; + + public AzureMetadataV2 Deserialize(YamlNode node) + { + Guard.NotNull(node, nameof(node)); + + var mappingNode = node as YamlMappingNode; + if (mappingNode == null) + { + throw new ArgumentException( + $"Expected a YamlMappingNode but received '{node.GetType()}'", nameof(node)); + } + + var metadata = new AzureMetadataV2(); + + if (mappingNode.Children.TryGetValue(TenantIdTag, out var tenantIdNode)) + { + metadata.TenantId = tenantIdNode.ToString(); + } + + if (mappingNode.Children.TryGetValue(SubscriptionIdTag, out var subscriptionIdNode)) + { + metadata.SubscriptionId = subscriptionIdNode.ToString(); + } + + if (mappingNode.Children.TryGetValue(ResourceGroupNameTag, out var resourceGroupNameNode)) + { + metadata.ResourceGroupName = resourceGroupNameNode.ToString(); + } + + return metadata; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs new file mode 100644 index 000000000..fb53d13b0 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs @@ -0,0 +1,59 @@ +using System; +using System.ComponentModel; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class AzureMetadataDeserializerTests + { + private readonly AzureMetadataDeserializer _deserializer; + + public AzureMetadataDeserializerTests() + { + _deserializer = new AzureMetadataDeserializer(); + } + + [Fact] + public void Deserialize_NodeNull_ThrowsException() + { + // Assert + Assert.Throws(() => _deserializer.Deserialize(null)); + } + + [Fact] + public void Deserialize_NodeWrongType_ThrowsException() + { + // Arrange + var node = YamlUtils.CreateYamlNode("version: v1").Children["version"]; + + // Act / Assert + Assert.Throws(() => _deserializer.Deserialize(node)); + } + + [Fact] + public void Deserialize_Metadata_SetsFromYaml() + { + // Arrange + const string tenantId = "c8819874-9e56-4e3f-b1a8-1c0325138f27"; + const string subscriptionId = "0f9d7fea-99e8-4768-8672-06a28514f77e"; + const string resourceGroupName = "promitor"; + + var yamlText = +$@"azureMetadata: + tenantId: '{tenantId}' + subscriptionId: '{subscriptionId}' + resourceGroupName: '{resourceGroupName}'"; + var node = YamlUtils.CreateYamlNode(yamlText).Children["azureMetadata"]; + + // Act + var metadata = _deserializer.Deserialize(node); + + // Assert + Assert.Equal(tenantId, metadata.TenantId); + Assert.Equal(subscriptionId, metadata.SubscriptionId); + Assert.Equal(resourceGroupName, metadata.ResourceGroupName); + } + } +} From 07e23d3b391d7fb4c626c6b0be7e5a321983a2fb Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 10:49:43 +0100 Subject: [PATCH 03/32] Deserialize v2 metricDefaults --- .../v2/Core/MetricDefaultsDeserializer.cs | 49 ++++++++ .../Serialization/v2/Model/AggregationV2.cs | 6 + .../v2/Model/MetricDefaultsV2.cs | 12 ++ .../Serialization/v2/Model/ScrapingV2.cs | 6 + .../Core/MetricDefaultsDeserializerTests.cs | 119 ++++++++++++++++++ 5 files changed, 192 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs new file mode 100644 index 000000000..31728b241 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs @@ -0,0 +1,49 @@ +using System; +using GuardNet; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class MetricDefaultsDeserializer : IDeserializer + { + private const string AggregationTag = "aggregation"; + private const string ScrapingTag = "scraping"; + + private readonly IDeserializer _aggregationDeserializer; + private readonly IDeserializer _scrapingDeserializer; + + public MetricDefaultsDeserializer( + IDeserializer aggregationDeserializer, IDeserializer scrapingDeserializer) + { + _aggregationDeserializer = aggregationDeserializer; + _scrapingDeserializer = scrapingDeserializer; + } + + public MetricDefaultsV2 Deserialize(YamlNode node) + { + Guard.NotNull(node, nameof(node)); + + var mappingNode = node as YamlMappingNode; + if (mappingNode == null) + { + throw new ArgumentException( + $"Expected a YamlMappingNode but received '{node.GetType()}'", nameof(node)); + } + + var defaults = new MetricDefaultsV2(); + + if (mappingNode.Children.TryGetValue(AggregationTag, out var aggregationNode)) + { + defaults.Aggregation = _aggregationDeserializer.Deserialize(aggregationNode); + } + + if (mappingNode.Children.TryGetValue(ScrapingTag, out var scrapingNode)) + { + defaults.Scraping = _scrapingDeserializer.Deserialize(scrapingNode); + } + + return defaults; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs new file mode 100644 index 000000000..1feb2fb74 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs @@ -0,0 +1,6 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + public class AggregationV2 + { + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs index 62da1fcaa..837f2987c 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs @@ -1,6 +1,18 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model { + /// + /// Contains default settings that apply to all metrics. + /// public class MetricDefaultsV2 { + /// + /// The default aggregation settings to use when querying metrics from Azure. + /// + public AggregationV2 Aggregation { get; set; } + + /// + /// The default scraping settings. + /// + public ScrapingV2 Scraping { get; set; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs new file mode 100644 index 000000000..76a481572 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs @@ -0,0 +1,6 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + public class ScrapingV2 + { + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs new file mode 100644 index 000000000..79417a3dc --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs @@ -0,0 +1,119 @@ +using System; +using System.ComponentModel; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Xunit; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class MetricDefaultsDeserializerTests + { + private readonly MetricDefaultsDeserializer _deserializer; + private readonly Mock> _aggregationDeserializer; + private readonly Mock> _scrapingDeserializer; + + public MetricDefaultsDeserializerTests() + { + _aggregationDeserializer = new Mock>(); + _scrapingDeserializer = new Mock>(); + + _deserializer = new MetricDefaultsDeserializer(_aggregationDeserializer.Object, _scrapingDeserializer.Object); + } + + [Fact] + public void Deserialize_NodeNull_ThrowsException() + { + // Act / Assert + Assert.Throws(() => _deserializer.Deserialize(null)); + } + + [Fact] + public void Deserialize_NodeWrongType_ThrowsException() + { + // Arrange + var node = YamlUtils.CreateYamlNode("version: v1").Children["version"]; + + // Act / Assert + Assert.Throws(() => _deserializer.Deserialize(node)); + } + + [Fact] + public void Deserialize_AggregationPresent_UsesAggregationDeserializer() + { + // Arrange + const string yamlText = +@"metricDefaults: + aggregation: + interval: 00:05:00"; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; + + var aggregationNode = node.Children["aggregation"]; + var aggregation = new AggregationV2(); + _aggregationDeserializer.Setup(d => d.Deserialize(aggregationNode)).Returns(aggregation); + + // Act + var defaults = _deserializer.Deserialize(node); + + // Assert + Assert.Same(aggregation, defaults.Aggregation); + } + + [Fact] + public void Deserialize_AggregationNotPresent_DoesNotUseDeserializer() + { + // Arrange + const string yamlText = +@"metricDefaults: + scraping: + schedule: '0 * * ? * *'"; + var node = YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; + + // Act + _deserializer.Deserialize(node); + + // Assert + _aggregationDeserializer.Verify(d => d.Deserialize(It.IsAny()), Times.Never); + } + + [Fact] + public void Deserialize_ScrapingPresent_UsesScrapingDeserializer() + { + // Arrange + const string yamlText = +@"metricDefaults: + scraping: + schedule: '0 * * ? * *'"; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; + + var scrapingNode = node.Children["scraping"]; + var scraping = new ScrapingV2(); + _scrapingDeserializer.Setup(d => d.Deserialize(scrapingNode)).Returns(scraping); + + // Act + var defaults = _deserializer.Deserialize(node); + + // Assert + Assert.Same(scraping, defaults.Scraping); + } + + [Fact] + public void Deserialize_ScrapingNotPresent_DoesNotUseDeserializer() + { + // Arrange + const string yamlText = +@"metricDefaults: + aggregation: + interval: '00:05:00'"; + var node = YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; + + // Act + _deserializer.Deserialize(node); + + // Assert + _scrapingDeserializer.Verify(d => d.Deserialize(It.IsAny()), Times.Never); + } + } +} From 392326fc725ba2f8dcf6132b3f7e9b62d621b9d6 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 11:51:21 +0100 Subject: [PATCH 04/32] Make v2 deserializers inherit from Deserializer - Updated all the v2 deserializers. - Moved IDeserializer next to Deserializer, and adjusted the access levels from internal to public to allow unit testing. - Updated the V2Serializer to inherit from Deserializer. --- .../Serialization/Deserializer.cs | 8 +-- .../Serialization/IDeserializer.cs | 26 ++++++++ .../v1/Core/AggregationDeserializer.cs | 2 +- .../v1/Core/AzureMetadataDeserializer.cs | 2 +- .../AzureMetricConfigurationDeserializer.cs | 2 +- .../v1/Core/MetricAggregationDeserializer.cs | 2 +- .../v1/Core/MetricDefaultsDeserializer.cs | 2 +- .../v1/Core/MetricsDeserializer.cs | 2 +- .../v1/Core/ScrapingDeserializer.cs | 2 +- .../v1/Core/SecretDeserializer.cs | 2 +- .../v2/Core/AzureMetadataDeserializer.cs | 22 +++---- .../Serialization/v2/Core/IDeserializer.cs | 18 ------ .../v2/Core/MetricDefaultsDeserializer.cs | 28 +++------ .../Serialization/v2/Core/V2Serializer.cs | 16 ++--- .../v2/Core/AzureMetadataDeserializerTests.cs | 27 ++------ .../Core/MetricDefaultsDeserializerTests.cs | 37 ++++------- .../v2/Core/V2SerializerTests.cs | 61 ++++++++++--------- 17 files changed, 115 insertions(+), 144 deletions(-) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/IDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IDeserializer.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs index 212a716bd..c48bb0c52 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs @@ -6,20 +6,20 @@ namespace Promitor.Core.Scraping.Configuration.Serialization { - internal abstract class Deserializer + public abstract class Deserializer : IDeserializer { protected ILogger Logger { get; } - internal Deserializer(ILogger logger) + protected Deserializer(ILogger logger) { Guard.NotNull(logger, nameof(logger)); Logger = logger; } - internal abstract TObject Deserialize(YamlMappingNode node); + public abstract TObject Deserialize(YamlMappingNode node); - internal List Deserialize(YamlSequenceNode nodes) + public List Deserialize(YamlSequenceNode nodes) { Guard.NotNull(nodes, nameof(nodes)); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/IDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/IDeserializer.cs new file mode 100644 index 000000000..37ddb2e9f --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/IDeserializer.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization +{ + /// + /// An object that can deserialize a yaml node into an object. + /// + /// The type of object that can be deserialized. + public interface IDeserializer + { + /// + /// Deserializes the specified node. + /// + /// The node to deserialize. + /// The deserialized object. + T Deserialize(YamlMappingNode node); + + /// + /// Deserializes an array of elements. + /// + /// The node to deserialize. + /// The deserialized objects. + List Deserialize(YamlSequenceNode node); + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs index f0f336b07..2978f5e3e 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs @@ -11,7 +11,7 @@ internal AggregationDeserializer(ILogger logger) : base(logger) { } - internal override AggregationV1 Deserialize(YamlMappingNode node) + public override AggregationV1 Deserialize(YamlMappingNode node) { var aggregation = new AggregationV1(); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs index 89a985eff..50663673f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs @@ -11,7 +11,7 @@ internal AzureMetadataDeserializer(ILogger logger) : base(logger) { } - internal override AzureMetadataV1 Deserialize(YamlMappingNode node) + public override AzureMetadataV1 Deserialize(YamlMappingNode node) { Guard.NotNull(node, nameof(node)); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs index 0ff0a180c..510960df5 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs @@ -16,7 +16,7 @@ internal AzureMetricConfigurationDeserializer(ILogger logger) : base(logger) _metricAggregationDeserializer = new MetricAggregationDeserializer(logger); } - internal override AzureMetricConfigurationV1 Deserialize(YamlMappingNode node) + public override AzureMetricConfigurationV1 Deserialize(YamlMappingNode node) { Guard.NotNull(node, nameof(node)); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs index 306ecca14..db963823f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs @@ -15,7 +15,7 @@ internal MetricAggregationDeserializer(ILogger logger) : base(logger) { } - internal override MetricAggregationV1 Deserialize(YamlMappingNode node) + public override MetricAggregationV1 Deserialize(YamlMappingNode node) { var aggregation = new MetricAggregationV1(); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs index 56bdd0943..0969bd5ae 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs @@ -11,7 +11,7 @@ internal MetricDefaultsDeserializer(ILogger logger) : base(logger) { } - internal override MetricDefaultsV1 Deserialize(YamlMappingNode node) + public override MetricDefaultsV1 Deserialize(YamlMappingNode node) { Guard.NotNull(node, nameof(node)); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricsDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricsDeserializer.cs index 8505cfc3e..fbb0497bb 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricsDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricsDeserializer.cs @@ -13,7 +13,7 @@ internal MetricsDeserializer(ILogger logger) : base(logger) { } - internal override MetricDefinitionV1 Deserialize(YamlMappingNode node) + public override MetricDefinitionV1 Deserialize(YamlMappingNode node) { var rawResourceType = node.Children[new YamlScalarNode("resourceType")]; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs index 98b8538dc..e6fda3bc2 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs @@ -9,7 +9,7 @@ internal ScrapingDeserializer(ILogger logger) : base(logger) { } - internal override Model.ScrapingV1 Deserialize(YamlMappingNode node) + public override Model.ScrapingV1 Deserialize(YamlMappingNode node) { var scraping = new Model.ScrapingV1(); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs index 19bda9eb6..cb4b5bd88 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs @@ -10,7 +10,7 @@ internal SecretDeserializer(ILogger logger) : base(logger) { } - internal override SecretV1 Deserialize(YamlMappingNode node) + public override SecretV1 Deserialize(YamlMappingNode node) { var secret = new SecretV1(); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs index 1a350877a..e782063ed 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs @@ -1,40 +1,36 @@ using System; using GuardNet; +using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using YamlDotNet.RepresentationModel; namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core { - public class AzureMetadataDeserializer : IDeserializer + public class AzureMetadataDeserializer : Deserializer { private const string TenantIdTag = "tenantId"; private const string SubscriptionIdTag = "subscriptionId"; private const string ResourceGroupNameTag = "resourceGroupName"; - public AzureMetadataV2 Deserialize(YamlNode node) + public AzureMetadataDeserializer(ILogger logger) : base(logger) { - Guard.NotNull(node, nameof(node)); - - var mappingNode = node as YamlMappingNode; - if (mappingNode == null) - { - throw new ArgumentException( - $"Expected a YamlMappingNode but received '{node.GetType()}'", nameof(node)); - } + } + public override AzureMetadataV2 Deserialize(YamlMappingNode node) + { var metadata = new AzureMetadataV2(); - if (mappingNode.Children.TryGetValue(TenantIdTag, out var tenantIdNode)) + if (node.Children.TryGetValue(TenantIdTag, out var tenantIdNode)) { metadata.TenantId = tenantIdNode.ToString(); } - if (mappingNode.Children.TryGetValue(SubscriptionIdTag, out var subscriptionIdNode)) + if (node.Children.TryGetValue(SubscriptionIdTag, out var subscriptionIdNode)) { metadata.SubscriptionId = subscriptionIdNode.ToString(); } - if (mappingNode.Children.TryGetValue(ResourceGroupNameTag, out var resourceGroupNameNode)) + if (node.Children.TryGetValue(ResourceGroupNameTag, out var resourceGroupNameNode)) { metadata.ResourceGroupName = resourceGroupNameNode.ToString(); } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IDeserializer.cs deleted file mode 100644 index c3f62b1b4..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IDeserializer.cs +++ /dev/null @@ -1,18 +0,0 @@ -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core -{ - /// - /// An object that can deserialize a yaml node into an object. - /// - /// The type of object that can be deserialized. - public interface IDeserializer - { - /// - /// Deserializes the specified node. - /// - /// The node to deserialize. - /// The deserialized object. - T Deserialize(YamlNode node); - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs index 31728b241..70d995658 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs @@ -1,11 +1,10 @@ -using System; -using GuardNet; +using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using YamlDotNet.RepresentationModel; namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core { - public class MetricDefaultsDeserializer : IDeserializer + public class MetricDefaultsDeserializer : Deserializer { private const string AggregationTag = "aggregation"; private const string ScrapingTag = "scraping"; @@ -14,33 +13,26 @@ public class MetricDefaultsDeserializer : IDeserializer private readonly IDeserializer _scrapingDeserializer; public MetricDefaultsDeserializer( - IDeserializer aggregationDeserializer, IDeserializer scrapingDeserializer) + IDeserializer aggregationDeserializer, + IDeserializer scrapingDeserializer, + ILogger logger) : base(logger) { _aggregationDeserializer = aggregationDeserializer; _scrapingDeserializer = scrapingDeserializer; } - public MetricDefaultsV2 Deserialize(YamlNode node) + public override MetricDefaultsV2 Deserialize(YamlMappingNode node) { - Guard.NotNull(node, nameof(node)); - - var mappingNode = node as YamlMappingNode; - if (mappingNode == null) - { - throw new ArgumentException( - $"Expected a YamlMappingNode but received '{node.GetType()}'", nameof(node)); - } - var defaults = new MetricDefaultsV2(); - if (mappingNode.Children.TryGetValue(AggregationTag, out var aggregationNode)) + if (node.Children.TryGetValue(AggregationTag, out var aggregationNode)) { - defaults.Aggregation = _aggregationDeserializer.Deserialize(aggregationNode); + defaults.Aggregation = _aggregationDeserializer.Deserialize((YamlMappingNode)aggregationNode); } - if (mappingNode.Children.TryGetValue(ScrapingTag, out var scrapingNode)) + if (node.Children.TryGetValue(ScrapingTag, out var scrapingNode)) { - defaults.Scraping = _scrapingDeserializer.Deserialize(scrapingNode); + defaults.Scraping = _scrapingDeserializer.Deserialize((YamlMappingNode)scrapingNode); } return defaults; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs index 1b82756ad..99ce52113 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs @@ -1,26 +1,28 @@ using System.Collections.Generic; +using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Serialization.Enum; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using YamlDotNet.RepresentationModel; namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core { - public class V2Serializer + public class V2Serializer : Deserializer { private readonly IDeserializer _azureMetadataDeserializer; private readonly IDeserializer _defaultsDeserializer; - private readonly IDeserializer> _metricsDeserializer; + private readonly IDeserializer _metricsDeserializer; public V2Serializer(IDeserializer azureMetadataDeserializer, IDeserializer defaultsDeserializer, - IDeserializer> metricsDeserializer) + IDeserializer metricsDeserializer, + ILogger logger) : base(logger) { _azureMetadataDeserializer = azureMetadataDeserializer; _defaultsDeserializer = defaultsDeserializer; _metricsDeserializer = metricsDeserializer; } - public MetricsDeclarationV2 InterpretYamlStream(YamlMappingNode rootNode) + public override MetricsDeclarationV2 Deserialize(YamlMappingNode rootNode) { ValidateVersion(rootNode); @@ -55,7 +57,7 @@ private AzureMetadataV2 DeserializeAzureMetadata(YamlMappingNode rootNode) { if (rootNode.Children.TryGetValue("azureMetadata", out var azureMetadataNode)) { - return _azureMetadataDeserializer.Deserialize(azureMetadataNode); + return _azureMetadataDeserializer.Deserialize((YamlMappingNode)azureMetadataNode); } return null; @@ -65,7 +67,7 @@ private MetricDefaultsV2 DeserializeMetricDefaults(YamlMappingNode rootNode) { if (rootNode.Children.TryGetValue("metricDefaults", out var defaultsNode)) { - return _defaultsDeserializer.Deserialize(defaultsNode); + return _defaultsDeserializer.Deserialize((YamlMappingNode)defaultsNode); } return null; @@ -75,7 +77,7 @@ private List DeserializeMetrics(YamlMappingNode rootNode) { if (rootNode.Children.TryGetValue("metrics", out var metricsNode)) { - return _metricsDeserializer.Deserialize(metricsNode); + return _metricsDeserializer.Deserialize((YamlSequenceNode)metricsNode); } return null; diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs index fb53d13b0..0693c523f 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs @@ -1,7 +1,9 @@ -using System; -using System.ComponentModel; +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; using Xunit; +using YamlDotNet.RepresentationModel; namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core { @@ -12,24 +14,7 @@ public class AzureMetadataDeserializerTests public AzureMetadataDeserializerTests() { - _deserializer = new AzureMetadataDeserializer(); - } - - [Fact] - public void Deserialize_NodeNull_ThrowsException() - { - // Assert - Assert.Throws(() => _deserializer.Deserialize(null)); - } - - [Fact] - public void Deserialize_NodeWrongType_ThrowsException() - { - // Arrange - var node = YamlUtils.CreateYamlNode("version: v1").Children["version"]; - - // Act / Assert - Assert.Throws(() => _deserializer.Deserialize(node)); + _deserializer = new AzureMetadataDeserializer(new Mock().Object); } [Fact] @@ -45,7 +30,7 @@ public void Deserialize_Metadata_SetsFromYaml() tenantId: '{tenantId}' subscriptionId: '{subscriptionId}' resourceGroupName: '{resourceGroupName}'"; - var node = YamlUtils.CreateYamlNode(yamlText).Children["azureMetadata"]; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["azureMetadata"]; // Act var metadata = _deserializer.Deserialize(node); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs index 79417a3dc..6808cf5c8 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs @@ -1,6 +1,7 @@ -using System; -using System.ComponentModel; +using System.ComponentModel; +using Microsoft.Extensions.Logging; using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Xunit; @@ -20,24 +21,8 @@ public MetricDefaultsDeserializerTests() _aggregationDeserializer = new Mock>(); _scrapingDeserializer = new Mock>(); - _deserializer = new MetricDefaultsDeserializer(_aggregationDeserializer.Object, _scrapingDeserializer.Object); - } - - [Fact] - public void Deserialize_NodeNull_ThrowsException() - { - // Act / Assert - Assert.Throws(() => _deserializer.Deserialize(null)); - } - - [Fact] - public void Deserialize_NodeWrongType_ThrowsException() - { - // Arrange - var node = YamlUtils.CreateYamlNode("version: v1").Children["version"]; - - // Act / Assert - Assert.Throws(() => _deserializer.Deserialize(node)); + _deserializer = new MetricDefaultsDeserializer( + _aggregationDeserializer.Object, _scrapingDeserializer.Object, new Mock().Object); } [Fact] @@ -50,7 +35,7 @@ public void Deserialize_AggregationPresent_UsesAggregationDeserializer() interval: 00:05:00"; var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; - var aggregationNode = node.Children["aggregation"]; + var aggregationNode = (YamlMappingNode)node.Children["aggregation"]; var aggregation = new AggregationV2(); _aggregationDeserializer.Setup(d => d.Deserialize(aggregationNode)).Returns(aggregation); @@ -69,13 +54,13 @@ public void Deserialize_AggregationNotPresent_DoesNotUseDeserializer() @"metricDefaults: scraping: schedule: '0 * * ? * *'"; - var node = YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; // Act _deserializer.Deserialize(node); // Assert - _aggregationDeserializer.Verify(d => d.Deserialize(It.IsAny()), Times.Never); + _aggregationDeserializer.Verify(d => d.Deserialize(It.IsAny()), Times.Never); } [Fact] @@ -88,7 +73,7 @@ public void Deserialize_ScrapingPresent_UsesScrapingDeserializer() schedule: '0 * * ? * *'"; var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; - var scrapingNode = node.Children["scraping"]; + var scrapingNode = (YamlMappingNode)node.Children["scraping"]; var scraping = new ScrapingV2(); _scrapingDeserializer.Setup(d => d.Deserialize(scrapingNode)).Returns(scraping); @@ -107,13 +92,13 @@ public void Deserialize_ScrapingNotPresent_DoesNotUseDeserializer() @"metricDefaults: aggregation: interval: '00:05:00'"; - var node = YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; // Act _deserializer.Deserialize(node); // Assert - _scrapingDeserializer.Verify(d => d.Deserialize(It.IsAny()), Times.Never); + _scrapingDeserializer.Verify(d => d.Deserialize(It.IsAny()), Times.Never); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs index 495edc42e..c3a4afcf9 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.IO; -using System.Linq; +using Microsoft.Extensions.Logging; using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Xunit; @@ -16,60 +16,63 @@ public class V2SerializerTests { private readonly Mock> _metadataDeserializer; private readonly Mock> _defaultsDeserializer; - private readonly Mock>> _metricsDeserializer; + private readonly Mock> _metricsDeserializer; private readonly V2Serializer _serializer; public V2SerializerTests() { _metadataDeserializer = new Mock>(); _defaultsDeserializer = new Mock>(); - _metricsDeserializer = new Mock>>(); + _metricsDeserializer = new Mock>(); _serializer = new V2Serializer( - _metadataDeserializer.Object, _defaultsDeserializer.Object, _metricsDeserializer.Object); + _metadataDeserializer.Object, + _defaultsDeserializer.Object, + _metricsDeserializer.Object, + new Mock().Object); } [Fact] - public void InterpretYamlStream_NoVersionSpecified_ThrowsException() + public void Deserialize_NoVersionSpecified_ThrowsException() { // Arrange var yamlNode = YamlUtils.CreateYamlNode("azureMetadata:"); // Act - var exception = Assert.Throws(() => _serializer.InterpretYamlStream(yamlNode)); + var exception = Assert.Throws(() => _serializer.Deserialize(yamlNode)); // Assert Assert.Equal("No 'version' element was found in the metrics config", exception.Message); } [Fact] - public void InterpretYamlStream_VersionSpecified_SetsCorrectVersion() + public void Deserialize_VersionSpecified_SetsCorrectVersion() { // Arrange var yamlNode = YamlUtils.CreateYamlNode("version: v2"); // Act - var builder = _serializer.InterpretYamlStream(yamlNode); + var builder = _serializer.Deserialize(yamlNode); // Assert Assert.Equal("v2", builder.Version); } [Fact] - public void InterpretYamlStream_WrongVersionSpecified_ThrowsException() + public void Deserialize_WrongVersionSpecified_ThrowsException() { // Arrange var yamlNode = YamlUtils.CreateYamlNode("version: v1"); // Act - var exception = Assert.Throws(() => _serializer.InterpretYamlStream(yamlNode)); + var exception = Assert.Throws(() => _serializer.Deserialize(yamlNode)); // Assert Assert.Equal("A 'version' element with a value of 'v2' was expected but the value 'v1' was found", exception.Message); } [Fact] - public void InterpretYamlStream_AzureMetadata_UsesMetadataDeserializer() + public void Deserialize_AzureMetadata_UsesMetadataDeserializer() { // Arrange const string config = @@ -78,32 +81,32 @@ public void InterpretYamlStream_AzureMetadata_UsesMetadataDeserializer() tenantId: 'abc-123'"; var yamlNode = YamlUtils.CreateYamlNode(config); var azureMetadata = new AzureMetadataV2(); - _metadataDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(azureMetadata); + _metadataDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(azureMetadata); // Act - var declaration = _serializer.InterpretYamlStream(yamlNode); + var declaration = _serializer.Deserialize(yamlNode); // Assert Assert.Same(azureMetadata, declaration.AzureMetadata); } [Fact] - public void InterpretYamlStream_AzureMetadataNotSupplied_SetsMetadataNull() + public void Deserialize_AzureMetadataNotSupplied_SetsMetadataNull() { // Arrange var yamlNode = YamlUtils.CreateYamlNode("version: v2"); _metadataDeserializer.Setup( - d => d.Deserialize(It.IsAny())).Returns(new AzureMetadataV2()); + d => d.Deserialize(It.IsAny())).Returns(new AzureMetadataV2()); // Act - var declaration = _serializer.InterpretYamlStream(yamlNode); + var declaration = _serializer.Deserialize(yamlNode); // Assert Assert.Null(declaration.AzureMetadata); } [Fact] - public void InterpretYamlStream_MetricDefaults_UsesDefaultsDeserializer() + public void Deserialize_MetricDefaults_UsesDefaultsDeserializer() { // Arrange const string config = @@ -113,34 +116,34 @@ public void InterpretYamlStream_MetricDefaults_UsesDefaultsDeserializer() interval: '00:05:00'"; var yamlNode = YamlUtils.CreateYamlNode(config); var metricDefaults = new MetricDefaultsV2(); - _defaultsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metricDefaults); + _defaultsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metricDefaults); // Act - var declaration = _serializer.InterpretYamlStream(yamlNode); + var declaration = _serializer.Deserialize(yamlNode); // Assert Assert.Same(metricDefaults, declaration.MetricDefaults); } [Fact] - public void InterpretYamlStream_MetricDefaultsNotSupplied_SetsDefaultsNull() + public void Deserialize_MetricDefaultsNotSupplied_SetsDefaultsNull() { // Arrange const string config = @"version: v2"; var yamlNode = YamlUtils.CreateYamlNode(config); _defaultsDeserializer.Setup( - d => d.Deserialize(It.IsAny())).Returns(new MetricDefaultsV2()); + d => d.Deserialize(It.IsAny())).Returns(new MetricDefaultsV2()); // Act - var declaration = _serializer.InterpretYamlStream(yamlNode); + var declaration = _serializer.Deserialize(yamlNode); // Assert Assert.Null(declaration.MetricDefaults); } [Fact] - public void InterpretYamlStream_Metrics_UsesMetricsDeserializer() + public void Deserialize_Metrics_UsesMetricsDeserializer() { // Arrange const string config = @@ -149,27 +152,27 @@ public void InterpretYamlStream_Metrics_UsesMetricsDeserializer() - name: promitor_metrics_total"; var yamlNode = YamlUtils.CreateYamlNode(config); var metrics = new List(); - _metricsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metrics); + _metricsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metrics); // Act - var declaration = _serializer.InterpretYamlStream(yamlNode); + var declaration = _serializer.Deserialize(yamlNode); // Assert Assert.Same(metrics, declaration.Metrics); } [Fact] - public void InterpretYamlStream_Metric_SetsMetricsNull() + public void Deserialize_Metric_SetsMetricsNull() { // Arrange const string config = @"version: v2"; var yamlNode = YamlUtils.CreateYamlNode(config); _metricsDeserializer.Setup( - d => d.Deserialize(It.IsAny())).Returns(new List()); + d => d.Deserialize(It.IsAny())).Returns(new List()); // Act - var declaration = _serializer.InterpretYamlStream(yamlNode); + var declaration = _serializer.Deserialize(yamlNode); // Assert Assert.Null(declaration.Metrics); From fd30eebada819c33aa4b1521cda09c922ff3bd42 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 11:58:24 +0100 Subject: [PATCH 05/32] Implemented AggregationDeserializer --- .../v2/Core/AggregationDeserializer.cs | 43 +++++++++++++++ .../Serialization/v2/Model/AggregationV2.cs | 11 +++- .../v2/Core/AggregationDeserializerTests.cs | 54 +++++++++++++++++++ 3 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs new file mode 100644 index 000000000..3cd20de3e --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs @@ -0,0 +1,43 @@ +using System; +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class AggregationDeserializer : Deserializer + { + private const string IntervalTag = "interval"; + + private readonly TimeSpan _defaultAggregationInterval = TimeSpan.FromMinutes(5); + + public AggregationDeserializer(ILogger logger) : base(logger) + { + } + + public override AggregationV2 Deserialize(YamlMappingNode node) + { + var aggregation = new AggregationV2(); + + aggregation.Interval = GetAggregationInterval(node); + + return aggregation; + } + + private TimeSpan GetAggregationInterval(YamlMappingNode node) + { + var interval = _defaultAggregationInterval; + if (node.Children.TryGetValue(IntervalTag, out var intervalNode)) + { + interval = TimeSpan.Parse(intervalNode.ToString()); + } + else + { + Logger.LogWarning( + "No default aggregation was configured, falling back to {AggregationInterval}", interval.ToString("g")); + } + + return interval; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs index 1feb2fb74..9b6ed5b65 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs @@ -1,6 +1,15 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +using System; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model { + /// + /// Contains aggregation settings used when querying Azure metrics. + /// public class AggregationV2 { + /// + /// The aggregation interval to use when querying Azure metrics. + /// + public TimeSpan? Interval { get; set; } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs new file mode 100644 index 000000000..b3616a72d --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs @@ -0,0 +1,54 @@ +using System; +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Xunit; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class AggregationDeserializerTests + { + private readonly AggregationDeserializer _deserializer; + + public AggregationDeserializerTests() + { + var logger = new Mock(); + + _deserializer = new AggregationDeserializer(logger.Object); + } + + [Fact] + public void Deserialize_IntervalSupplied_SetsInterval() + { + // Arrange + const string yamlText = +@"aggregation: + interval: 00:07:00"; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["aggregation"]; + + // Act + var aggregation = _deserializer.Deserialize(node); + + // Assert + Assert.Equal(TimeSpan.FromMinutes(7), aggregation.Interval); + } + + [Fact] + public void Deserialize_IntervalNotSupplied_UsesDefault() + { + const string yamlText = +@"aggregation: + someProperty: someValue"; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["aggregation"]; + + // Act + var aggregation = _deserializer.Deserialize(node); + + // Assert + Assert.Equal(TimeSpan.FromMinutes(5), aggregation.Interval); + } + } +} From ac3abbf6a2d47434ee8ca8ad669a5f77fb15602f Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 12:11:53 +0100 Subject: [PATCH 06/32] Implement v2 Scraping deserializer --- .../v2/Core/ScrapingDeserializer.cs | 31 +++++++++++ .../Serialization/v2/Model/ScrapingV2.cs | 7 +++ .../v2/Core/ScrapingDeserializerTests.cs | 52 +++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs new file mode 100644 index 000000000..c611ccd38 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs @@ -0,0 +1,31 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class ScrapingDeserializer : Deserializer + { + private const string ScheduleTag = "schedule"; + + public ScrapingDeserializer(ILogger logger) : base(logger) + { + } + + public override ScrapingV2 Deserialize(YamlMappingNode node) + { + var scraping = new ScrapingV2(); + + if (node.Children.TryGetValue(ScheduleTag, out var scrapingNode)) + { + scraping.Schedule = scrapingNode.ToString(); + } + else + { + Logger.LogError("No default metric scraping schedule was configured!"); + } + + return scraping; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs index 76a481572..08e964c3a 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs @@ -1,6 +1,13 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model { + /// + /// Contains settings about how promitor scrapes Azure metrics. + /// public class ScrapingV2 { + /// + /// A cron expression describing how often scrapes should occur. + /// + public string Schedule { get; set; } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs new file mode 100644 index 000000000..eeb2b5b5f --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs @@ -0,0 +1,52 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Xunit; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class ScrapingDeserializerTests + { + private readonly ScrapingDeserializer _deserializer; + + public ScrapingDeserializerTests() + { + _deserializer = new ScrapingDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_ScheduleSupplied_SetsSchedule() + { + // Arrange + const string yamlText = +@"scraping: + schedule: '0 * * ? * *'"; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["scraping"]; + + // Act + var scraping = _deserializer.Deserialize(node); + + // Assert + Assert.Equal("0 * * ? * *", scraping.Schedule); + } + + [Fact] + public void Deserialize_ScheduleNotSupplied_SetsScheduleNull() + { + // Arrange + const string yamlText = +@"scraping: + otherProperty: otherValue"; + var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["scraping"]; + + // Act + var scraping = _deserializer.Deserialize(node); + + // Assert + Assert.Null(scraping.Schedule); + } + } +} From f733784bdd2a6ab56af99c29b84822a9ee4fdd96 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 14:24:18 +0100 Subject: [PATCH 07/32] Implement v2 MetricDefinition deserialization --- .../Core/IAzureResourceDeserializerFactory.cs | 19 ++ .../v2/Core/MetricDefinitionDeserializer.cs | 118 ++++++++ .../v2/Model/AzureMetricConfigurationV2.cs | 6 + .../v2/Model/AzureResourceDefinitionV2.cs | 10 + .../v2/Model/MetricDefinitionV2.cs | 43 ++- .../Core/MetricDefinitionDeserializerTests.cs | 253 ++++++++++++++++++ 6 files changed, 448 insertions(+), 1 deletion(-) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IAzureResourceDeserializerFactory.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureResourceDefinitionV2.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IAzureResourceDeserializerFactory.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IAzureResourceDeserializerFactory.cs new file mode 100644 index 000000000..ed3c8429b --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IAzureResourceDeserializerFactory.cs @@ -0,0 +1,19 @@ +using Promitor.Core.Scraping.Configuration.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + /// + /// A factory for creating deserializers that can create + /// objects. + /// + public interface IAzureResourceDeserializerFactory + { + /// + /// Gets a deserializer that can deserializer the specified type of resource. + /// + /// The type of resource. + /// The deserializer. + IDeserializer GetDeserializerFor(ResourceType resourceType); + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs new file mode 100644 index 000000000..9d484dcac --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs @@ -0,0 +1,118 @@ +using System.Collections.Generic; +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class MetricDefinitionDeserializer : Deserializer + { + private const string NameTag = "name"; + private const string DescriptionTag = "description"; + private const string ResourceTypeTag = "resourceType"; + private const string LabelsTag = "labels"; + private const string AzureMetricConfigurationTag = "azureMetricConfiguration"; + private const string ScrapingTag = "scraping"; + private const string MetricsTag = "metrics"; + + private readonly IDeserializer _azureMetricConfigurationDeserializer; + private readonly IDeserializer _scrapingDeserializer; + private readonly IAzureResourceDeserializerFactory _azureResourceDeserializerFactory; + + public MetricDefinitionDeserializer(IDeserializer azureMetricConfigurationDeserializer, + IDeserializer scrapingDeserializer, + IAzureResourceDeserializerFactory azureResourceDeserializerFactory, + ILogger logger) : base(logger) + { + _azureMetricConfigurationDeserializer = azureMetricConfigurationDeserializer; + _scrapingDeserializer = scrapingDeserializer; + _azureResourceDeserializerFactory = azureResourceDeserializerFactory; + } + + public override MetricDefinitionV2 Deserialize(YamlMappingNode node) + { + var metricDefinition = new MetricDefinitionV2 + { + Name = GetString(node, NameTag), + Description = GetString(node, DescriptionTag), + ResourceType = GetEnum(node, ResourceTypeTag), + Labels = GetDictionary(node, LabelsTag) + }; + + DeserializeAzureMetricConfiguration(node, metricDefinition); + DeserializeScraping(node, metricDefinition); + DeserializeMetrics(node, metricDefinition); + + return metricDefinition; + } + + private void DeserializeAzureMetricConfiguration(YamlMappingNode node, MetricDefinitionV2 metricDefinition) + { + if (node.Children.TryGetValue(AzureMetricConfigurationTag, out var configurationNode)) + { + metricDefinition.AzureMetricConfiguration = + _azureMetricConfigurationDeserializer.Deserialize((YamlMappingNode) configurationNode); + } + } + + private void DeserializeScraping(YamlMappingNode node, MetricDefinitionV2 metricDefinition) + { + if (node.Children.TryGetValue(ScrapingTag, out var scrapingNode)) + { + metricDefinition.Scraping = _scrapingDeserializer.Deserialize((YamlMappingNode)scrapingNode); + } + } + + private void DeserializeMetrics(YamlMappingNode node, MetricDefinitionV2 metricDefinition) + { + if (metricDefinition.ResourceType != ResourceType.NotSpecified && + node.Children.TryGetValue(MetricsTag, out var metricsNode)) + { + var resourceDeserializer = _azureResourceDeserializerFactory.GetDeserializerFor(metricDefinition.ResourceType); + metricDefinition.Resources = resourceDeserializer.Deserialize((YamlSequenceNode)metricsNode); + } + } + + private static string GetString(YamlMappingNode node, string propertyName) + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + return propertyNode.ToString(); + } + + return null; + } + + private static T GetEnum(YamlMappingNode node, string propertyName) + where T : struct + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + if (System.Enum.TryParse(propertyNode.ToString(), out var enumResult)) + { + return enumResult; + } + } + + return default(T); + } + + private static Dictionary GetDictionary(YamlMappingNode node, string propertyName) + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + var result = new Dictionary(); + + foreach (var (key, value) in ((YamlMappingNode)propertyNode).Children) + { + result[key.ToString()] = value.ToString(); + } + + return result; + } + + return null; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs new file mode 100644 index 000000000..23434870a --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs @@ -0,0 +1,6 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + public class AzureMetricConfigurationV2 + { + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureResourceDefinitionV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureResourceDefinitionV2.cs new file mode 100644 index 000000000..d93117382 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureResourceDefinitionV2.cs @@ -0,0 +1,10 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + /// + /// Represents an Azure resource that can be scraped. + /// + public class AzureResourceDefinitionV2 + { + public string ResourceGroupName { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs index bf2741bb9..5a578e708 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs @@ -1,6 +1,47 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +using System.Collections.Generic; +using Promitor.Core.Scraping.Configuration.Model; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model { + /// + /// Contains the definition for a prometheus metric, along with the resources + /// that should be scraped to supply the metric. + /// public class MetricDefinitionV2 { + /// + /// The name of the prometheus metric. + /// + public string Name { get; set; } + + /// + /// The description of the prometheus metric. + /// + public string Description { get; set; } + + /// + /// The type of resources that are scraped to populate this metric. + /// + public ResourceType ResourceType { get; set; } + + /// + /// Any prometheus labels that should be added to the metric. + /// + public Dictionary Labels { get; set; } + + /// + /// Contains the configuration used when querying Azure metrics. + /// + public AzureMetricConfigurationV2 AzureMetricConfiguration { get; set; } + + /// + /// Allows a custom scraping schedule to be specified for the metric. + /// + public ScrapingV2 Scraping { get; set; } + + /// + /// The resources to be scraped. + /// + public List Resources { get; set; } } } \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs new file mode 100644 index 000000000..b759f9eac --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs @@ -0,0 +1,253 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Model; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Xunit; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class MetricDefinitionDeserializerTests + { + private readonly Mock> _azureMetricConfigurationDeserializer; + private readonly Mock> _scrapingDeserializer; + private readonly Mock _resourceDeserializerFactory; + + private readonly MetricDefinitionDeserializer _deserializer; + + public MetricDefinitionDeserializerTests() + { + _azureMetricConfigurationDeserializer = new Mock>(); + _scrapingDeserializer = new Mock>(); + _resourceDeserializerFactory = new Mock(); + + _deserializer = new MetricDefinitionDeserializer( + _azureMetricConfigurationDeserializer.Object, + _scrapingDeserializer.Object, + _resourceDeserializerFactory.Object, + new Mock().Object); + } + + [Fact] + public void Deserialize_NameSupplied_SetsName() + { + AssertPropertySet( + "name: promitor_test_metric", + "promitor_test_metric", + d => d.Name); + } + + [Fact] + public void Deserialize_NameNotSupplied_Null() + { + AssertPropertyNull("description: 'Test metric'", d => d.Name); + } + + [Fact] + public void Deserialize_DescriptionSupplied_SetsDescription() + { + AssertPropertySet( + "description: 'This is a test metric'", + "This is a test metric", + d => d.Description); + } + + [Fact] + public void Deserialize_DescriptionNotSupplied_Null() + { + AssertPropertyNull("name: metric", d => d.Description); + } + + [Fact] + public void Deserialize_ResourceTypeSupplied_SetsResourceType() + { + AssertPropertySet( + "resourceType: ServiceBusQueue", + ResourceType.ServiceBusQueue, + d => d.ResourceType); + } + + [Fact] + public void Deserialize_ResourceTypeNotSupplied_Defaults() + { + AssertPropertySet( + "name: promitor_test_metric", + ResourceType.NotSpecified, + d => d.ResourceType); + } + + [Fact] + public void Deserialize_LabelsSupplied_SetsLabels() + { + const string yamlText = +@"labels: + app: promitor + env: test"; + + AssertPropertySet( + yamlText, + new Dictionary{{"app", "promitor"}, {"env", "test"}}, + d => d.Labels); + } + + [Fact] + public void Deserialize_LabelsNotSupplied_Null() + { + AssertPropertyNull("name: promitor_test_metric", d => d.Labels); + } + + [Fact] + public void Deserialize_AzureMetricConfigurationSupplied_UsesDeserializer() + { + // Arrange + const string yamlText = +@"azureMetricConfiguration: + metricName: ActiveMessages"; + var node = YamlUtils.CreateYamlNode(yamlText); + var configurationNode = (YamlMappingNode) node.Children["azureMetricConfiguration"]; + var configuration = new AzureMetricConfigurationV2(); + + _azureMetricConfigurationDeserializer.Setup(d => d.Deserialize(configurationNode)).Returns(configuration); + + // Act + var definition = _deserializer.Deserialize(node); + + // Assert + Assert.Same(configuration, definition.AzureMetricConfiguration); + } + + [Fact] + public void Deserialize_AzureMetricConfigurationNotSupplied_Null() + { + // Arrange + const string yamlText = @"name: promitor_test_metric"; + var node = YamlUtils.CreateYamlNode(yamlText); + + _azureMetricConfigurationDeserializer.Setup( + d => d.Deserialize(It.IsAny())).Returns(new AzureMetricConfigurationV2()); + + // Act + var definition = _deserializer.Deserialize(node); + + // Assert + Assert.Null(definition.AzureMetricConfiguration); + } + + [Fact] + public void Deserialize_ScrapingSupplied_UsesDeserializer() + { + // Arrange + const string yamlText = +@"scraping: + interval: '00:05:00'"; + var node = YamlUtils.CreateYamlNode(yamlText); + var scrapingNode = (YamlMappingNode)node.Children["scraping"]; + var scraping = new ScrapingV2(); + + _scrapingDeserializer.Setup(d => d.Deserialize(scrapingNode)).Returns(scraping); + + // Act + var definition = _deserializer.Deserialize(node); + + // Assert + Assert.Same(scraping, definition.Scraping); + } + + [Fact] + public void Deserialize_ScrapingNotSupplied_Null() + { + // Arrange + const string yamlText = "name: promitor_test_metric"; + var node = YamlUtils.CreateYamlNode(yamlText); + + _scrapingDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(new ScrapingV2()); + + // Act + var definition = _deserializer.Deserialize(node); + + // Assert + Assert.Null(definition.Scraping); + } + + [Fact] + public void Deserialize_ResourcesSupplied_UsesDeserializer() + { + // Arrange + const string yamlText = +@"resourceType: Generic +metrics: +- resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging +- resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging-2"; + var node = YamlUtils.CreateYamlNode(yamlText); + + var resourceDeserializer = new Mock>(); + _resourceDeserializerFactory.Setup( + f => f.GetDeserializerFor(ResourceType.Generic)).Returns(resourceDeserializer.Object); + + var resources = new List(); + resourceDeserializer.Setup( + d => d.Deserialize((YamlSequenceNode) node.Children["metrics"])).Returns(resources); + + // Act + var definition = _deserializer.Deserialize(node); + + // Assert + Assert.Same(resources, definition.Resources); + } + + [Fact] + public void Deserialize_ResourcesWithUnspecifiedResourceType_Null() + { + // Arrange + const string yamlText = +@"metrics: +- resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging +- resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging-2"; + var node = YamlUtils.CreateYamlNode(yamlText); + + var resourceDeserializer = new Mock>(); + _resourceDeserializerFactory.Setup( + f => f.GetDeserializerFor(It.IsAny())).Returns(resourceDeserializer.Object); + + var resources = new List(); + resourceDeserializer.Setup( + d => d.Deserialize((YamlSequenceNode)node.Children["metrics"])).Returns(resources); + + // Act + var definition = _deserializer.Deserialize(node); + + // Assert + Assert.Null(definition.Resources); + } + + private void AssertPropertySet(string yamlText, T expected, Func propertyAccessor) + { + // Arrange + var node = YamlUtils.CreateYamlNode(yamlText); + + // Act + var definition = _deserializer.Deserialize(node); + + // Assert + Assert.Equal(expected, propertyAccessor(definition)); + } + + private void AssertPropertyNull(string yamlText, Func propertyAccessor) + { + // Arrange + var node = YamlUtils.CreateYamlNode(yamlText); + + // Act + var definition = _deserializer.Deserialize(node); + + // Assert + Assert.Null(propertyAccessor(definition)); + } + } +} From 829fe45604cfee8f412ac01237550f5e151c0f8b Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 14:38:16 +0100 Subject: [PATCH 08/32] Pull utility methods to Deserializer object I've pulled a few utility methods up to the Deserializer object, and updated the v2 subclasses to use them. --- .../Serialization/Deserializer.cs | 60 +++++++++++++++++++ .../v2/Core/AzureMetadataDeserializer.cs | 21 ++----- .../v2/Core/MetricDefinitionDeserializer.cs | 44 +------------- .../v2/Core/ScrapingDeserializer.cs | 9 ++- 4 files changed, 69 insertions(+), 65 deletions(-) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs index c48bb0c52..bcb61307d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs @@ -37,5 +37,65 @@ public List Deserialize(YamlSequenceNode nodes) return deserializedObjects; } + + /// + /// Gets the string value of the specified yaml property. + /// + /// The node containing the property. + /// The name of the property. + /// The string value of the property. + protected static string GetString(YamlMappingNode node, string propertyName) + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + return propertyNode.ToString(); + } + + return null; + } + + /// + /// Gets the value of the specified yaml property converted to an enum. + /// + /// The type of enum to return. + /// The node containing the property. + /// The property name. + /// The enum value, or default(T) if the property doesn't exist. + protected static T GetEnum(YamlMappingNode node, string propertyName) + where T : struct + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + if (System.Enum.TryParse(propertyNode.ToString(), out var enumResult)) + { + return enumResult; + } + } + + return default(T); + } + + /// + /// Gets the contents of the specified property as a dictionary. + /// + /// The node containing the property. + /// The name of the property. + /// The child items of the property as a dictionary. + protected static Dictionary GetDictionary(YamlMappingNode node, string propertyName) + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + var result = new Dictionary(); + + foreach (var (key, value) in ((YamlMappingNode)propertyNode).Children) + { + result[key.ToString()] = value.ToString(); + } + + return result; + } + + return null; + } } } \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs index e782063ed..cd7ec7b44 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs @@ -1,6 +1,4 @@ -using System; -using GuardNet; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using YamlDotNet.RepresentationModel; @@ -20,20 +18,9 @@ public override AzureMetadataV2 Deserialize(YamlMappingNode node) { var metadata = new AzureMetadataV2(); - if (node.Children.TryGetValue(TenantIdTag, out var tenantIdNode)) - { - metadata.TenantId = tenantIdNode.ToString(); - } - - if (node.Children.TryGetValue(SubscriptionIdTag, out var subscriptionIdNode)) - { - metadata.SubscriptionId = subscriptionIdNode.ToString(); - } - - if (node.Children.TryGetValue(ResourceGroupNameTag, out var resourceGroupNameNode)) - { - metadata.ResourceGroupName = resourceGroupNameNode.ToString(); - } + metadata.TenantId = GetString(node, TenantIdTag); + metadata.SubscriptionId = GetString(node, SubscriptionIdTag); + metadata.ResourceGroupName = GetString(node, ResourceGroupNameTag); return metadata; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs index 9d484dcac..efe43c9d7 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using YamlDotNet.RepresentationModel; @@ -73,46 +72,5 @@ private void DeserializeMetrics(YamlMappingNode node, MetricDefinitionV2 metricD metricDefinition.Resources = resourceDeserializer.Deserialize((YamlSequenceNode)metricsNode); } } - - private static string GetString(YamlMappingNode node, string propertyName) - { - if (node.Children.TryGetValue(propertyName, out var propertyNode)) - { - return propertyNode.ToString(); - } - - return null; - } - - private static T GetEnum(YamlMappingNode node, string propertyName) - where T : struct - { - if (node.Children.TryGetValue(propertyName, out var propertyNode)) - { - if (System.Enum.TryParse(propertyNode.ToString(), out var enumResult)) - { - return enumResult; - } - } - - return default(T); - } - - private static Dictionary GetDictionary(YamlMappingNode node, string propertyName) - { - if (node.Children.TryGetValue(propertyName, out var propertyNode)) - { - var result = new Dictionary(); - - foreach (var (key, value) in ((YamlMappingNode)propertyNode).Children) - { - result[key.ToString()] = value.ToString(); - } - - return result; - } - - return null; - } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs index c611ccd38..c422fa482 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs @@ -16,12 +16,11 @@ public override ScrapingV2 Deserialize(YamlMappingNode node) { var scraping = new ScrapingV2(); - if (node.Children.TryGetValue(ScheduleTag, out var scrapingNode)) - { - scraping.Schedule = scrapingNode.ToString(); - } - else + scraping.Schedule = GetString(node, ScheduleTag); + + if (scraping.Schedule == null) { + // TODO: this will log an error if this deserializer is reused to deserialize the scraping settings for a metric instead of the global scraping settings. Need to fix that! Logger.LogError("No default metric scraping schedule was configured!"); } From e58e97d2882cfbf8429d85e5e8db1fc485f58d67 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 15:29:25 +0100 Subject: [PATCH 09/32] Refactor common deserialization assertions Most of the tests were checking that a property had been set, or that it was null. As a result I've pulled those two assertions out to a helper class, and refactored the tests to use that helper. --- .../v2/Core/AggregationDeserializerTests.cs | 26 +++-- .../v2/Core/AzureMetadataDeserializerTests.cs | 94 +++++++++++++--- .../Core/MetricDefinitionDeserializerTests.cs | 48 +++------ .../v2/Core/ScrapingDeserializerTests.cs | 25 ++--- .../v2/DeserializerTestHelpers.cs | 101 ++++++++++++++++++ 5 files changed, 219 insertions(+), 75 deletions(-) create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs index b3616a72d..f53f70c30 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs @@ -27,13 +27,12 @@ public void Deserialize_IntervalSupplied_SetsInterval() const string yamlText = @"aggregation: interval: 00:07:00"; - var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["aggregation"]; - - // Act - var aggregation = _deserializer.Deserialize(node); - - // Assert - Assert.Equal(TimeSpan.FromMinutes(7), aggregation.Interval); + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + yamlText, + "aggregation", + TimeSpan.FromMinutes(7), + a => a.Interval); } [Fact] @@ -42,13 +41,12 @@ public void Deserialize_IntervalNotSupplied_UsesDefault() const string yamlText = @"aggregation: someProperty: someValue"; - var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["aggregation"]; - - // Act - var aggregation = _deserializer.Deserialize(node); - - // Assert - Assert.Equal(TimeSpan.FromMinutes(5), aggregation.Interval); + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + yamlText, + "aggregation", + TimeSpan.FromMinutes(5), + a => a.Interval); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs index 0693c523f..49f05f394 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs @@ -3,7 +3,6 @@ using Moq; using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; using Xunit; -using YamlDotNet.RepresentationModel; namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core { @@ -18,27 +17,96 @@ public AzureMetadataDeserializerTests() } [Fact] - public void Deserialize_Metadata_SetsFromYaml() + public void Deserialize_TenantIdSupplied_SetsTenantId() { - // Arrange const string tenantId = "c8819874-9e56-4e3f-b1a8-1c0325138f27"; + + var yamlText = +$@"azureMetadata: + tenantId: '{tenantId}'"; + + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + yamlText, + "azureMetadata", + tenantId, + a => a.TenantId); + } + + [Fact] + public void Deserialize_TenantIdNotSupplied_Null() + { + const string yamlText = +@"azureMetadata: + subscriptionId: '0f9d7fea-99e8-4768-8672-06a28514f77e'"; + + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + yamlText, + "azureMetadata", + a => a.TenantId); + } + + [Fact] + public void Deserialize_SubscriptionIdSupplied_SetsSubscriptionId() + { const string subscriptionId = "0f9d7fea-99e8-4768-8672-06a28514f77e"; - const string resourceGroupName = "promitor"; var yamlText = $@"azureMetadata: - tenantId: '{tenantId}' - subscriptionId: '{subscriptionId}' + subscriptionId: '{subscriptionId}'"; + + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + yamlText, + "azureMetadata", + subscriptionId, + a => a.SubscriptionId); + } + + [Fact] + public void Deserialize_SubscriptionIdNotSupplied_Null() + { + const string yamlText = +@"azureMetadata: + tenantId: 'c8819874-9e56-4e3f-b1a8-1c0325138f27'"; + + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + yamlText, + "azureMetadata", + a => a.SubscriptionId); + } + + [Fact] + public void Deserialize_ResourceGroupNameSupplied_SetsResourceGroupName() + { + const string resourceGroupName = "promitor-group"; + + var yamlText = +$@"azureMetadata: resourceGroupName: '{resourceGroupName}'"; - var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["azureMetadata"]; - // Act - var metadata = _deserializer.Deserialize(node); + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + yamlText, + "azureMetadata", + resourceGroupName, + a => a.ResourceGroupName); + } + + [Fact] + public void Deserialize_ResourceGroupNameNotSupplied_Null() + { + const string yamlText = +@"azureMetadata: + tenantId: 'c8819874-9e56-4e3f-b1a8-1c0325138f27'"; - // Assert - Assert.Equal(tenantId, metadata.TenantId); - Assert.Equal(subscriptionId, metadata.SubscriptionId); - Assert.Equal(resourceGroupName, metadata.ResourceGroupName); + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + yamlText, + "azureMetadata", + a => a.ResourceGroupName); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs index b759f9eac..1760de38c 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.ComponentModel; using Microsoft.Extensions.Logging; using Moq; @@ -37,7 +36,8 @@ public MetricDefinitionDeserializerTests() [Fact] public void Deserialize_NameSupplied_SetsName() { - AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( + _deserializer, "name: promitor_test_metric", "promitor_test_metric", d => d.Name); @@ -46,13 +46,14 @@ public void Deserialize_NameSupplied_SetsName() [Fact] public void Deserialize_NameNotSupplied_Null() { - AssertPropertyNull("description: 'Test metric'", d => d.Name); + DeserializerTestHelpers.AssertPropertyNull(_deserializer, "description: 'Test metric'", d => d.Name); } [Fact] public void Deserialize_DescriptionSupplied_SetsDescription() { - AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( + _deserializer, "description: 'This is a test metric'", "This is a test metric", d => d.Description); @@ -61,13 +62,14 @@ public void Deserialize_DescriptionSupplied_SetsDescription() [Fact] public void Deserialize_DescriptionNotSupplied_Null() { - AssertPropertyNull("name: metric", d => d.Description); + DeserializerTestHelpers.AssertPropertyNull(_deserializer, "name: metric", d => d.Description); } [Fact] public void Deserialize_ResourceTypeSupplied_SetsResourceType() { - AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( + _deserializer, "resourceType: ServiceBusQueue", ResourceType.ServiceBusQueue, d => d.ResourceType); @@ -76,7 +78,8 @@ public void Deserialize_ResourceTypeSupplied_SetsResourceType() [Fact] public void Deserialize_ResourceTypeNotSupplied_Defaults() { - AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( + _deserializer, "name: promitor_test_metric", ResourceType.NotSpecified, d => d.ResourceType); @@ -90,7 +93,8 @@ public void Deserialize_LabelsSupplied_SetsLabels() app: promitor env: test"; - AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( + _deserializer, yamlText, new Dictionary{{"app", "promitor"}, {"env", "test"}}, d => d.Labels); @@ -99,7 +103,7 @@ public void Deserialize_LabelsSupplied_SetsLabels() [Fact] public void Deserialize_LabelsNotSupplied_Null() { - AssertPropertyNull("name: promitor_test_metric", d => d.Labels); + DeserializerTestHelpers.AssertPropertyNull(_deserializer, "name: promitor_test_metric", d => d.Labels); } [Fact] @@ -225,29 +229,5 @@ public void Deserialize_ResourcesWithUnspecifiedResourceType_Null() // Assert Assert.Null(definition.Resources); } - - private void AssertPropertySet(string yamlText, T expected, Func propertyAccessor) - { - // Arrange - var node = YamlUtils.CreateYamlNode(yamlText); - - // Act - var definition = _deserializer.Deserialize(node); - - // Assert - Assert.Equal(expected, propertyAccessor(definition)); - } - - private void AssertPropertyNull(string yamlText, Func propertyAccessor) - { - // Arrange - var node = YamlUtils.CreateYamlNode(yamlText); - - // Act - var definition = _deserializer.Deserialize(node); - - // Assert - Assert.Null(propertyAccessor(definition)); - } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs index eeb2b5b5f..ee0187883 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs @@ -20,33 +20,30 @@ public ScrapingDeserializerTests() [Fact] public void Deserialize_ScheduleSupplied_SetsSchedule() { - // Arrange const string yamlText = @"scraping: schedule: '0 * * ? * *'"; - var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["scraping"]; - // Act - var scraping = _deserializer.Deserialize(node); - - // Assert - Assert.Equal("0 * * ? * *", scraping.Schedule); + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + yamlText, + "scraping", + "0 * * ? * *", + s => s.Schedule); } [Fact] public void Deserialize_ScheduleNotSupplied_SetsScheduleNull() { - // Arrange const string yamlText = @"scraping: otherProperty: otherValue"; - var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["scraping"]; - - // Act - var scraping = _deserializer.Deserialize(node); - // Assert - Assert.Null(scraping.Schedule); + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + yamlText, + "scraping", + s => s.Schedule); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs new file mode 100644 index 000000000..7bada25fb --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs @@ -0,0 +1,101 @@ +using System; +using Promitor.Core.Scraping.Configuration.Serialization; +using Xunit; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2 +{ + public static class DeserializerTestHelpers + { + /// + /// Deserializes the yaml using the deserializer, and asserts that the + /// specified property has been set. + /// + /// The type of object being deserialized. + /// The property type. + /// The deserializer. + /// The yaml to deserialize. + /// The expected result. + /// The property to check. + public static void AssertPropertySet( + IDeserializer deserializer, string yamlText, TResult expected, Func propertyAccessor) + { + // Arrange + var node = YamlUtils.CreateYamlNode(yamlText); + + // Act + var definition = deserializer.Deserialize(node); + + // Assert + Assert.Equal(expected, propertyAccessor(definition)); + } + + /// + /// Deserializes the yaml using the deserializer, and asserts that the + /// specified property underneath the specified yaml element has been set. + /// + /// The type of object being deserialized. + /// The property type. + /// The deserializer. + /// The yaml to deserialize. + /// The element to find the properties under. + /// The expected result. + /// The property to check. + public static void AssertPropertySet( + IDeserializer deserializer, string yamlText, string yamlElement, TResult expected, Func propertyAccessor) + { + // Arrange + var node = YamlUtils.CreateYamlNode(yamlText).Children[yamlElement]; + + // Act + var definition = deserializer.Deserialize((YamlMappingNode)node); + + // Assert + Assert.Equal(expected, propertyAccessor(definition)); + } + + /// + /// Deserializes the yaml and verifies that the specified property is null. + /// + /// The type of object being deserialized. + /// The type of the property. + /// The deserializer. + /// The yaml to deserialize. + /// The property to check. + public static void AssertPropertyNull( + IDeserializer deserializer, string yamlText, Func propertyAccessor) + { + // Arrange + var node = YamlUtils.CreateYamlNode(yamlText); + + // Act + var definition = deserializer.Deserialize(node); + + // Assert + Assert.Null(propertyAccessor(definition)); + } + + /// + /// Deserializes the yaml and verifies that the specified property nested + /// under the specified yaml element is null. + /// + /// The type of object being deserialized. + /// The type of the property. + /// The deserializer. + /// The yaml to deserialize. + /// The property to check. + /// The element to look for the property under. + public static void AssertPropertyNull( + IDeserializer deserializer, string yamlText, string yamlElement, Func propertyAccessor) + { + // Arrange + var node = YamlUtils.CreateYamlNode(yamlText).Children[yamlElement]; + + // Act + var definition = deserializer.Deserialize((YamlMappingNode)node); + + // Assert + Assert.Null(propertyAccessor(definition)); + } + } +} From 913519e549f4d05f6267ee4a2040a699956bf24e Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 15:58:26 +0100 Subject: [PATCH 10/32] Implement v2 container instance deserializer - Added the deserializer. - Added some extra assertions to `DeserializerTestHelpers` to help with the situation where a deserializer returns a base type, but we want to assert against another type. --- .../ContainerInstanceResourceV2.cs | 7 +++ .../ContainerInstanceDeserializer.cs | 26 ++++++++ .../v2/DeserializerTestHelpers.cs | 48 +++++++++++++++ .../ContainerInstanceDeserializerTests.cs | 59 +++++++++++++++++++ 4 files changed, 140 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerInstanceResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerInstanceResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerInstanceResourceV2.cs new file mode 100644 index 000000000..88d00a31e --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerInstanceResourceV2.cs @@ -0,0 +1,7 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class ContainerInstanceResourceV2 : AzureResourceDefinitionV2 + { + public string ContainerGroup { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs new file mode 100644 index 000000000..135b03f85 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class ContainerInstanceDeserializer : Deserializer + { + private const string ResourceGroupNameTag = "resourceGroupName"; + private const string ContainerGroupTag = "containerGroup"; + + public ContainerInstanceDeserializer(ILogger logger) : base(logger) + { + } + + public override AzureResourceDefinitionV2 Deserialize(YamlMappingNode node) + { + return new ContainerInstanceResourceV2 + { + ResourceGroupName = GetString(node, ResourceGroupNameTag), + ContainerGroup = GetString(node, ContainerGroupTag) + }; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs index 7bada25fb..913f79ea7 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs @@ -29,6 +29,31 @@ public static void AssertPropertySet( // Assert Assert.Equal(expected, propertyAccessor(definition)); } + + /// + /// Deserializes the yaml and asserts that the specified property has been set. + /// Use this overload where the deserializer actually returns a subclass of . + /// + /// + /// + /// + /// + /// + /// + /// + public static void AssertPropertySet( + IDeserializer deserializer, string yamlText, TResult expected, Func propertyAccessor) + where TObject: TBaseObject + { + // Arrange + var node = YamlUtils.CreateYamlNode(yamlText); + + // Act + var definition = deserializer.Deserialize(node); + + // Assert + Assert.Equal(expected, propertyAccessor((TObject)definition)); + } /// /// Deserializes the yaml using the deserializer, and asserts that the @@ -75,6 +100,29 @@ public static void AssertPropertyNull( Assert.Null(propertyAccessor(definition)); } + /// + /// Deserializes the yaml and verifies that the specified property is null. + /// + /// The type of object being deserialized. + /// The type of the property. + /// The type that the deserializer returns. + /// The deserializer. + /// The yaml to deserialize. + /// The property to check. + public static void AssertPropertyNull( + IDeserializer deserializer, string yamlText, Func propertyAccessor) + where TObject: TBaseObject + { + // Arrange + var node = YamlUtils.CreateYamlNode(yamlText); + + // Act + var definition = deserializer.Deserialize(node); + + // Assert + Assert.Null(propertyAccessor((TObject)definition)); + } + /// /// Deserializes the yaml and verifies that the specified property nested /// under the specified yaml element is null. diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs new file mode 100644 index 000000000..ebe94cb3f --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs @@ -0,0 +1,59 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + [Category("Unit")] + public class ContainerInstanceDeserializerTests + { + private readonly ContainerInstanceDeserializer _deserializer; + + public ContainerInstanceDeserializerTests() + { + _deserializer = new ContainerInstanceDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_ResourceGroupNameSupplied_SetsResourceGroupName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "resourceGroupName: promitor-resource-group", + "promitor-resource-group", + c => c.ResourceGroupName); + } + + [Fact] + public void Deserialize_ResourceGroupNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "containerGroup: promitor-group", + c => c.ResourceGroupName); + } + + [Fact] + public void Deserialize_ContainerGroupSupplied_SetsContainerGroup() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "containerGroup: promitor-group", + "promitor-group", + c => c.ContainerGroup); + } + + [Fact] + public void Deserialize_ContainerGroupNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-resource-group", + c => c.ContainerGroup); + } + } +} From 59db9a7668483eb8741f1937ffb95e9912f00a6d Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 16:25:56 +0100 Subject: [PATCH 11/32] Implement v2 container registry deserializer - Implemented the container registry deserializer. - Created a base class for azure resource deserializers to make sure ResourceGroupName is always deserialized. - Created a base class for the resource deserializer tests. --- .../ContainerRegistryResourceV2.cs | 7 +++ .../ContainerInstanceDeserializer.cs | 6 +-- .../ContainerRegistryDeserializer.cs | 24 ++++++++++ .../v2/Providers/ResourceDeserializer.cs | 36 +++++++++++++++ .../ContainerInstanceDeserializerTests.cs | 21 ++------- .../ContainerRegistryDeserializerTests.cs | 46 +++++++++++++++++++ .../Providers/ResourceDeserializerTestBase.cs | 34 ++++++++++++++ 7 files changed, 153 insertions(+), 21 deletions(-) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerRegistryResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerRegistryDeserializer.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ResourceDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ResourceDeserializerTestBase.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerRegistryResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerRegistryResourceV2.cs new file mode 100644 index 000000000..7d5441b25 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerRegistryResourceV2.cs @@ -0,0 +1,7 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class ContainerRegistryResourceV2 : AzureResourceDefinitionV2 + { + public string RegistryName { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs index 135b03f85..7f7c33f7f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs @@ -5,20 +5,18 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers { - public class ContainerInstanceDeserializer : Deserializer + public class ContainerInstanceDeserializer : ResourceDeserializer { - private const string ResourceGroupNameTag = "resourceGroupName"; private const string ContainerGroupTag = "containerGroup"; public ContainerInstanceDeserializer(ILogger logger) : base(logger) { } - public override AzureResourceDefinitionV2 Deserialize(YamlMappingNode node) + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) { return new ContainerInstanceResourceV2 { - ResourceGroupName = GetString(node, ResourceGroupNameTag), ContainerGroup = GetString(node, ContainerGroupTag) }; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerRegistryDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerRegistryDeserializer.cs new file mode 100644 index 000000000..1b403b743 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerRegistryDeserializer.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class ContainerRegistryDeserializer : ResourceDeserializer + { + private const string RegistryNameTag = "registryName"; + + public ContainerRegistryDeserializer(ILogger logger) : base(logger) + { + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new ContainerRegistryResourceV2 + { + RegistryName = GetString(node, RegistryNameTag) + }; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ResourceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ResourceDeserializer.cs new file mode 100644 index 000000000..7639d33b6 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ResourceDeserializer.cs @@ -0,0 +1,36 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + /// + /// A base class for azure resource deserializers that makes sure that any shared + /// properties are deserialized correctly for all resources. + /// + public abstract class ResourceDeserializer : Deserializer + { + private const string ResourceGroupNameTag = "resourceGroupName"; + + protected ResourceDeserializer(ILogger logger) : base(logger) + { + } + + public override AzureResourceDefinitionV2 Deserialize(YamlMappingNode node) + { + var resource = DeserializeResource(node); + + resource.ResourceGroupName = GetString(node, ResourceGroupNameTag); + + return resource; + } + + /// + /// Implement on subclasses to return the correct type of + /// object with all its custom properties populated. + /// + /// The yaml node. + /// The deserialized object. + protected abstract AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node); + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs index ebe94cb3f..5e527e93d 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs @@ -1,6 +1,7 @@ using System.ComponentModel; using Microsoft.Extensions.Logging; using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; @@ -9,7 +10,7 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers { [Category("Unit")] - public class ContainerInstanceDeserializerTests + public class ContainerInstanceDeserializerTests : ResourceDeserializerTestBase { private readonly ContainerInstanceDeserializer _deserializer; @@ -18,23 +19,9 @@ public ContainerInstanceDeserializerTests() _deserializer = new ContainerInstanceDeserializer(new Mock().Object); } - [Fact] - public void Deserialize_ResourceGroupNameSupplied_SetsResourceGroupName() + protected override IDeserializer CreateDeserializer() { - DeserializerTestHelpers.AssertPropertySet( - _deserializer, - "resourceGroupName: promitor-resource-group", - "promitor-resource-group", - c => c.ResourceGroupName); - } - - [Fact] - public void Deserialize_ResourceGroupNameNotSupplied_Null() - { - DeserializerTestHelpers.AssertPropertyNull( - _deserializer, - "containerGroup: promitor-group", - c => c.ResourceGroupName); + return new ContainerInstanceDeserializer(new Mock().Object); } [Fact] diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs new file mode 100644 index 000000000..222fec3bd --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs @@ -0,0 +1,46 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + [Category("Unit")] + public class ContainerRegistryDeserializerTests : ResourceDeserializerTestBase + { + private readonly ContainerRegistryDeserializer _deserializer; + + public ContainerRegistryDeserializerTests() + { + _deserializer = new ContainerRegistryDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_RegistryNameSupplied_SetsRegistryName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "registryName: promitor-registry", + "promitor-registry", + c => c.RegistryName); + } + + [Fact] + public void Deserialize_RegistryNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + c => c.RegistryName); + } + + protected override IDeserializer CreateDeserializer() + { + return new ContainerRegistryDeserializer(new Mock().Object); + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ResourceDeserializerTestBase.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ResourceDeserializerTestBase.cs new file mode 100644 index 000000000..656adf256 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ResourceDeserializerTestBase.cs @@ -0,0 +1,34 @@ +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + public abstract class ResourceDeserializerTestBase + { + protected abstract IDeserializer CreateDeserializer(); + + [Fact] + public void Deserialize_ResourceGroupNameSupplied_SetsResourceGroupName() + { + var deserializer = CreateDeserializer(); + + DeserializerTestHelpers.AssertPropertySet( + deserializer, + "resourceGroupName: promitor-resource-group", + "promitor-resource-group", + c => c.ResourceGroupName); + } + + [Fact] + public void Deserialize_ResourceGroupNameNotSupplied_Null() + { + var deserializer = CreateDeserializer(); + + DeserializerTestHelpers.AssertPropertyNull( + deserializer, + "someProperty: someValue", + c => c.ResourceGroupName); + } + } +} From 99810c2906140a2a224b41e54df24e50dbdd4708 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 16:38:50 +0100 Subject: [PATCH 12/32] Implement v2 cosmos db deserializer --- .../Model/ResourceTypes/CosmosDbResourceV2.cs | 10 ++++ .../v2/Providers/CosmosDbDeserializer.cs | 24 ++++++++++ .../v2/Providers/CosmosDbDeserializerTests.cs | 46 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/CosmosDbResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/CosmosDbDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/CosmosDbResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/CosmosDbResourceV2.cs new file mode 100644 index 000000000..017cb4aac --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/CosmosDbResourceV2.cs @@ -0,0 +1,10 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class CosmosDbResourceV2 : AzureResourceDefinitionV2 + { + /// + /// The cosmos database name. + /// + public string DbName { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/CosmosDbDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/CosmosDbDeserializer.cs new file mode 100644 index 000000000..526e15dfc --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/CosmosDbDeserializer.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class CosmosDbDeserializer : ResourceDeserializer + { + private const string DatabaseNameTag = "dbName"; + + public CosmosDbDeserializer(ILogger logger) : base(logger) + { + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new CosmosDbResourceV2 + { + DbName = GetString(node, DatabaseNameTag) + }; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs new file mode 100644 index 000000000..4b8f17e5e --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs @@ -0,0 +1,46 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + [Category("Unit")] + public class CosmosDbDeserializerTests : ResourceDeserializerTestBase + { + private readonly CosmosDbDeserializer _deserializer; + + public CosmosDbDeserializerTests() + { + _deserializer = new CosmosDbDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_DbNameSupplied_SetsDbName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "dbName: promitor-cosmos", + "promitor-cosmos", + c => c.DbName); + } + + [Fact] + public void Deserialize_DbNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + c => c.DbName); + } + + protected override IDeserializer CreateDeserializer() + { + return new CosmosDbDeserializer(new Mock().Object); + } + } +} From 7b69e4e18596305e00e2b1a098eca26481060c67 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 16:57:56 +0100 Subject: [PATCH 13/32] Implement v2 generic resource deserializer --- .../Model/ResourceTypes/GenericResourceV2.cs | 15 +++++ .../Providers/GenericResourceDeserializer.cs | 26 ++++++++ .../GenericResourceDeserializerTests.cs | 63 +++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/GenericResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/GenericResourceDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/GenericResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/GenericResourceV2.cs new file mode 100644 index 000000000..b2bfbeef6 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/GenericResourceV2.cs @@ -0,0 +1,15 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class GenericResourceV2 : AzureResourceDefinitionV2 + { + /// + /// The filter for the Azure metric query. + /// + public string Filter { get; set; } + + /// + /// The URI for the resource to get metrics for. + /// + public string ResourceUri { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/GenericResourceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/GenericResourceDeserializer.cs new file mode 100644 index 000000000..20747fd5d --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/GenericResourceDeserializer.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class GenericResourceDeserializer : ResourceDeserializer + { + private const string FilterTag = "filter"; + private const string ResourceUriTag = "resourceUri"; + + public GenericResourceDeserializer(ILogger logger) : base(logger) + { + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new GenericResourceV2 + { + Filter = GetString(node, FilterTag), + ResourceUri = GetString(node, ResourceUriTag) + }; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs new file mode 100644 index 000000000..bd6a5d77e --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs @@ -0,0 +1,63 @@ +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + public class GenericResourceDeserializerTests : ResourceDeserializerTestBase + { + private readonly GenericResourceDeserializer _deserializer; + + public GenericResourceDeserializerTests() + { + _deserializer = new GenericResourceDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_FilterSupplied_SetsFilter() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "filter: EntityName eq 'orders'", + "EntityName eq 'orders'", + r => r.Filter); + } + + [Fact] + public void Deserialize_FilterNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.Filter); + } + + [Fact] + public void Deserialize_ResourceUriSupplied_SetsResourceUri() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging", + "Microsoft.ServiceBus/namespaces/promitor-messaging", + r => r.ResourceUri); + } + + [Fact] + public void Deserialize_ResourceUriNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.ResourceUri); + } + + protected override IDeserializer CreateDeserializer() + { + return new GenericResourceDeserializer(new Mock().Object); + } + } +} From 2a864768d0055e0a3cb88aa18d8bcb311ac45917 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 17:14:08 +0100 Subject: [PATCH 14/32] Implement v2 network interface deserializer --- .../NetworkInterfaceResourceV2.cs | 10 ++++ .../Providers/NetworkInterfaceDeserializer.cs | 24 ++++++++++ .../NetworkInterfaceDeserializerTests.cs | 46 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/NetworkInterfaceResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/NetworkInterfaceDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/NetworkInterfaceResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/NetworkInterfaceResourceV2.cs new file mode 100644 index 000000000..e9944da1a --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/NetworkInterfaceResourceV2.cs @@ -0,0 +1,10 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class NetworkInterfaceResourceV2 : AzureResourceDefinitionV2 + { + /// + /// The name of the network interface to scrape. + /// + public string NetworkInterfaceName { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/NetworkInterfaceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/NetworkInterfaceDeserializer.cs new file mode 100644 index 000000000..7c3f0e581 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/NetworkInterfaceDeserializer.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class NetworkInterfaceDeserializer : ResourceDeserializer + { + private const string NetworkInterfaceNameTag = "networkInterfaceName"; + + public NetworkInterfaceDeserializer(ILogger logger) : base(logger) + { + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new NetworkInterfaceResourceV2 + { + NetworkInterfaceName = GetString(node, NetworkInterfaceNameTag) + }; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs new file mode 100644 index 000000000..622d68c39 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs @@ -0,0 +1,46 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + [Category("Unit")] + public class NetworkInterfaceDeserializerTests : ResourceDeserializerTestBase + { + private readonly NetworkInterfaceDeserializer _deserializer; + + public NetworkInterfaceDeserializerTests() + { + _deserializer = new NetworkInterfaceDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_NetworkInterfaceNameSupplied_SetsNetworkInterfaceName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "networkInterfaceName: promitor-nic", + "promitor-nic", + r => r.NetworkInterfaceName); + } + + [Fact] + public void Deserialize_NetworkInterfaceNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.NetworkInterfaceName); + } + + protected override IDeserializer CreateDeserializer() + { + return new NetworkInterfaceDeserializer(new Mock().Object); + } + } +} From f22f4ae8d718d1eb57c7bbdab42c327d8808927e Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 8 Aug 2019 17:24:52 +0100 Subject: [PATCH 15/32] Implement v2 postgre deserializer --- .../ResourceTypes/PostgreSqlResourceV2.cs | 10 +++++ .../v2/Providers/PostgreSqlDeserializer.cs | 24 ++++++++++ .../Providers/PostgreSqlDeserializerTests.cs | 44 +++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/PostgreSqlResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/PostgreSqlDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/PostgreSqlResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/PostgreSqlResourceV2.cs new file mode 100644 index 000000000..929d5d2fc --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/PostgreSqlResourceV2.cs @@ -0,0 +1,10 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class PostgreSqlResourceV2 : AzureResourceDefinitionV2 + { + /// + /// The postgre server name. + /// + public string ServerName { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/PostgreSqlDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/PostgreSqlDeserializer.cs new file mode 100644 index 000000000..97af6ecc2 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/PostgreSqlDeserializer.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class PostgreSqlDeserializer : ResourceDeserializer + { + private const string ServerNameTag = "serverName"; + + public PostgreSqlDeserializer(ILogger logger) : base(logger) + { + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new PostgreSqlResourceV2 + { + ServerName = GetString(node, ServerNameTag) + }; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs new file mode 100644 index 000000000..1199f5013 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs @@ -0,0 +1,44 @@ +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + public class PostgreSqlDeserializerTests : ResourceDeserializerTestBase + { + private readonly PostgreSqlDeserializer _deserializer; + + public PostgreSqlDeserializerTests() + { + _deserializer = new PostgreSqlDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_ServerNameSupplied_SetsServerName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "serverName: promitor-db", + "promitor-db", + r => r.ServerName); + } + + [Fact] + public void Deserialize_ServerNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.ServerName); + } + + protected override IDeserializer CreateDeserializer() + { + return new PostgreSqlDeserializer(new Mock().Object); + } + } +} From daa63439549d2307706c64aed94706692abe2d6a Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 09:50:11 +0100 Subject: [PATCH 16/32] Implement v2 redis cache deserializer --- .../ResourceTypes/RedisCacheResourceV2.cs | 10 ++++ .../v2/Providers/RedisCacheDeserializer.cs | 24 ++++++++++ .../Providers/RedisCacheDeserializerTests.cs | 46 +++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/RedisCacheResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/RedisCacheDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/RedisCacheResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/RedisCacheResourceV2.cs new file mode 100644 index 000000000..e6f53ab55 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/RedisCacheResourceV2.cs @@ -0,0 +1,10 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class RedisCacheResourceV2 : AzureResourceDefinitionV2 + { + /// + /// The name of the redis cache. + /// + public string CacheName { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/RedisCacheDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/RedisCacheDeserializer.cs new file mode 100644 index 000000000..24a12d739 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/RedisCacheDeserializer.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class RedisCacheDeserializer : ResourceDeserializer + { + private const string CacheNameTag = "cacheName"; + + public RedisCacheDeserializer(ILogger logger) : base(logger) + { + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new RedisCacheResourceV2 + { + CacheName = GetString(node, CacheNameTag) + }; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs new file mode 100644 index 000000000..e62a3b1e2 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs @@ -0,0 +1,46 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + [Category("Unit")] + public class RedisCacheDeserializerTests : ResourceDeserializerTestBase + { + private readonly RedisCacheDeserializer _deserializer; + + public RedisCacheDeserializerTests() + { + _deserializer = new RedisCacheDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_CacheNameSupplied_SetsCacheName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "cacheName: promitor-cache", + "promitor-cache", + r => r.CacheName); + } + + [Fact] + public void Deserialize_CacheNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.CacheName); + } + + protected override IDeserializer CreateDeserializer() + { + return new RedisCacheDeserializer(new Mock().Object); + } + } +} From 986ebe946ffc618ca0224e75d9e29971724bf886 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 10:02:18 +0100 Subject: [PATCH 17/32] Implemented v2 service bus queue deserializer --- .../ServiceBusQueueResourceV2.cs | 15 +++++ .../Providers/ServiceBusQueueDeserializer.cs | 26 ++++++++ .../ServiceBusQueueDeserializerTests.cs | 65 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ServiceBusQueueResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ServiceBusQueueDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ServiceBusQueueResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ServiceBusQueueResourceV2.cs new file mode 100644 index 000000000..ea620c216 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ServiceBusQueueResourceV2.cs @@ -0,0 +1,15 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class ServiceBusQueueResourceV2 : AzureResourceDefinitionV2 + { + /// + /// The service bus queue to scrape. + /// + public string QueueName { get; set; } + + /// + /// The service bus namespace. + /// + public string Namespace { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ServiceBusQueueDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ServiceBusQueueDeserializer.cs new file mode 100644 index 000000000..f73380e46 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ServiceBusQueueDeserializer.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class ServiceBusQueueDeserializer : ResourceDeserializer + { + private const string QueueNameTag = "queueName"; + private const string NamespaceTag = "namespace"; + + public ServiceBusQueueDeserializer(ILogger logger) : base(logger) + { + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new ServiceBusQueueResourceV2 + { + QueueName = GetString(node, QueueNameTag), + Namespace = GetString(node, NamespaceTag) + }; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs new file mode 100644 index 000000000..ebbb48f85 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs @@ -0,0 +1,65 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + [Category("Unit")] + public class ServiceBusQueueDeserializerTests : ResourceDeserializerTestBase + { + private readonly ServiceBusQueueDeserializer _deserializer; + + public ServiceBusQueueDeserializerTests() + { + _deserializer = new ServiceBusQueueDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_QueueNameSupplied_SetsQueueName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "queueName: promitor-queue", + "promitor-queue", + r => r.QueueName); + } + + [Fact] + public void Deserialize_QueueNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.QueueName); + } + + [Fact] + public void Deserialize_NamespaceSupplied_SetsNamespace() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "namespace: promitor-sb", + "promitor-sb", + r => r.Namespace); + } + + [Fact] + public void Deserialize_NamespaceNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.Namespace); + } + + protected override IDeserializer CreateDeserializer() + { + return new ServiceBusQueueDeserializer(new Mock().Object); + } + } +} From 6a0034ef32e783579ff0e1e6e3d73be5e293bb07 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 10:12:17 +0100 Subject: [PATCH 18/32] Implement v2 virtual machine deserializer --- .../ResourceTypes/VirtualMachineResourceV2.cs | 10 ++++ .../Providers/VirtualMachineDeserializer.cs | 24 ++++++++++ .../VirtualMachineDeserializerTests.cs | 47 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/VirtualMachineResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/VirtualMachineDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/VirtualMachineResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/VirtualMachineResourceV2.cs new file mode 100644 index 000000000..4f51443e9 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/VirtualMachineResourceV2.cs @@ -0,0 +1,10 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class VirtualMachineResourceV2 : AzureResourceDefinitionV2 + { + /// + /// The name of the virtual machine to get metrics for. + /// + public string VirtualMachineName { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/VirtualMachineDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/VirtualMachineDeserializer.cs new file mode 100644 index 000000000..fcc2128b6 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/VirtualMachineDeserializer.cs @@ -0,0 +1,24 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class VirtualMachineDeserializer : ResourceDeserializer + { + private const string VirtualMachineNameTag = "virtualMachineName"; + + public VirtualMachineDeserializer(ILogger logger) : base(logger) + { + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new VirtualMachineResourceV2 + { + VirtualMachineName = GetString(node, VirtualMachineNameTag) + }; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs new file mode 100644 index 000000000..851dc1531 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs @@ -0,0 +1,47 @@ +using System.ComponentModel; +using Bogus.Extensions; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + [Category("Unit")] + public class VirtualMachineDeserializerTests : ResourceDeserializerTestBase + { + private readonly VirtualMachineDeserializer _deserializer; + + public VirtualMachineDeserializerTests() + { + _deserializer = new VirtualMachineDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_VirtualMachineNameSupplied_SetsName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "virtualMachineName: promitor-vm", + "promitor-vm", + r => r.VirtualMachineName); + } + + [Fact] + public void Deserialize_VirtualMachineNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.VirtualMachineName); + } + + protected override IDeserializer CreateDeserializer() + { + return new VirtualMachineDeserializer(new Mock().Object); + } + } +} From 97aa006422de9527ea425541cc40dc6ab3337deb Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 10:28:18 +0100 Subject: [PATCH 19/32] Implement v2 secret deserializer --- .../v2/Core/SecretDeserializer.cs | 32 +++++++++++ .../Serialization/v2/Model/SecretV2.cs | 17 ++++++ .../v2/Core/SecretDeserializerTests.cs | 57 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/SecretDeserializer.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/SecretV2.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/SecretDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/SecretDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/SecretDeserializer.cs new file mode 100644 index 000000000..eb2b1d9af --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/SecretDeserializer.cs @@ -0,0 +1,32 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class SecretDeserializer : Deserializer + { + private const string RawValueTag = "rawValue"; + private const string EnvironmentVariableTag = "environmentVariable"; + + public SecretDeserializer(ILogger logger) : base(logger) + { + } + + public override SecretV2 Deserialize(YamlMappingNode node) + { + var secret = new SecretV2 + { + RawValue = GetString(node, RawValueTag), + EnvironmentVariable = GetString(node, EnvironmentVariableTag) + }; + + if (!string.IsNullOrEmpty(secret.RawValue) && !string.IsNullOrEmpty(secret.EnvironmentVariable)) + { + Logger.LogWarning("Secret with environment variable '{EnvironmentVariable}' also has a rawValue provided.", secret.EnvironmentVariable); + } + + return secret; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/SecretV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/SecretV2.cs new file mode 100644 index 000000000..ab5bcedb7 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/SecretV2.cs @@ -0,0 +1,17 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + public class SecretV2 + { + /// + /// The value of the secret. If you don't want to put the secret value directly + /// in the metric configuration, use the property + /// instead. + /// + public string RawValue { get; set; } + + /// + /// The name of an environment variable to get the secret value from. + /// + public string EnvironmentVariable { get; set; } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/SecretDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/SecretDeserializerTests.cs new file mode 100644 index 000000000..d03d68d36 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/SecretDeserializerTests.cs @@ -0,0 +1,57 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class SecretDeserializerTests + { + private readonly SecretDeserializer _deserializer; + + public SecretDeserializerTests() + { + _deserializer = new SecretDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_RawValueSupplied_SetsRawValue() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "rawValue: abc123", + "abc123", + s => s.RawValue); + } + + [Fact] + public void Deserialize_RawValueNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "environmentVariable: MY_VARIABLE", + s => s.RawValue); + } + + [Fact] + public void Deserialize_EnvironmentVariableSupplied_SetsEnvironmentVariable() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "environmentVariable: PROMITOR_SECRET", + "PROMITOR_SECRET", + s => s.EnvironmentVariable); + } + + [Fact] + public void Deserialize_EnvironmentVariableNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "rawValue: abc123", + s => s.EnvironmentVariable); + } + } +} From 9ba76d1d77f47a3402cb82e5a64806879cd69992 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 11:14:10 +0100 Subject: [PATCH 20/32] Implement v2 storage queue deserializer --- .../ResourceTypes/StorageQueueResourceV2.cs | 20 ++++ .../v2/Providers/StorageQueueDeserializer.cs | 41 ++++++++ .../StorageQueueDeserializerTests.cs | 97 +++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/StorageQueueResourceV2.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/StorageQueueDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/StorageQueueResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/StorageQueueResourceV2.cs new file mode 100644 index 000000000..671607743 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/StorageQueueResourceV2.cs @@ -0,0 +1,20 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +{ + public class StorageQueueResourceV2 : AzureResourceDefinitionV2 + { + /// + /// The storage queue account name. + /// + public string AccountName { get; set; } + + /// + /// The name of the queue. + /// + public string QueueName { get; set; } + + /// + /// The SAS token for accessing the queue. + /// + public SecretV2 SasToken { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/StorageQueueDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/StorageQueueDeserializer.cs new file mode 100644 index 000000000..c776f3285 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/StorageQueueDeserializer.cs @@ -0,0 +1,41 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +{ + public class StorageQueueDeserializer : ResourceDeserializer + { + private const string AccountNameTag = "accountName"; + private const string QueueNameTag = "queueName"; + private const string SasTokenTag = "sasToken"; + + private readonly IDeserializer _secretDeserializer; + + public StorageQueueDeserializer(IDeserializer secretDeserializer, ILogger logger) : base(logger) + { + _secretDeserializer = secretDeserializer; + } + + protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + { + return new StorageQueueResourceV2 + { + AccountName = GetString(node, AccountNameTag), + QueueName = GetString(node, QueueNameTag), + SasToken = DeserializeSasToken(node) + }; + } + + private SecretV2 DeserializeSasToken(YamlMappingNode node) + { + if (node.Children.TryGetValue(SasTokenTag, out var sasTokenNode)) + { + return _secretDeserializer.Deserialize((YamlMappingNode) sasTokenNode); + } + + return null; + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs new file mode 100644 index 000000000..c07266f2e --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs @@ -0,0 +1,97 @@ +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Xunit; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +{ + public class StorageQueueDeserializerTests : ResourceDeserializerTestBase + { + private readonly Mock> _secretDeserializer; + + private readonly StorageQueueDeserializer _deserializer; + + public StorageQueueDeserializerTests() + { + _secretDeserializer = new Mock>(); + + _deserializer = new StorageQueueDeserializer(_secretDeserializer.Object, new Mock().Object); + } + + [Fact] + public void Deserialize_AccountNameSupplied_SetsAccountName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "accountName: promitor-acct", + "promitor-acct", + r => r.AccountName); + } + + [Fact] + public void Deserialize_AccountNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.AccountName); + } + + [Fact] + public void Deserialize_QueueNameSupplied_SetsQueueName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "queueName: orders", + "orders", + r => r.QueueName); + } + + [Fact] + public void Deserialize_QueueNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.QueueName); + } + + [Fact] + public void Deserialize_SasTokenSupplied_UsesDeserializer() + { + // Arrange + const string yamlText = +@"sasToken: + rawValue: abc123"; + var node = YamlUtils.CreateYamlNode(yamlText); + var sasTokenNode = (YamlMappingNode)node.Children["sasToken"]; + + var secret = new SecretV2(); + _secretDeserializer.Setup(d => d.Deserialize(sasTokenNode)).Returns(secret); + + // Act + var resource = (StorageQueueResourceV2)_deserializer.Deserialize(node); + + // Assert + Assert.Same(secret, resource.SasToken); + } + + [Fact] + public void Deserialize_SasTokenNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + r => r.SasToken); + } + + protected override IDeserializer CreateDeserializer() + { + return new StorageQueueDeserializer(new Mock>().Object, new Mock().Object); + } + } +} From 8cd561b611d2c2f69e2930a22386217a3b3521b6 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 11:34:34 +0100 Subject: [PATCH 21/32] Implement v2 azure metric config deserializer --- .../AzureMetricConfigurationDeserializer.cs | 38 ++++++++++ .../v2/Model/AzureMetricConfigurationV2.cs | 9 +++ .../v2/Model/MetricAggregationV2.cs | 6 ++ ...ureMetricConfigurationDeserializerTests.cs | 73 +++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetricConfigurationDeserializer.cs create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetricConfigurationDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetricConfigurationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetricConfigurationDeserializer.cs new file mode 100644 index 000000000..bf613415c --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetricConfigurationDeserializer.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class AzureMetricConfigurationDeserializer : Deserializer + { + private const string MetricNameTag = "metricName"; + private const string AggregationTag = "aggregation"; + private readonly IDeserializer _aggregationDeserializer; + + public AzureMetricConfigurationDeserializer(IDeserializer aggregationDeserializer, ILogger logger) + : base(logger) + { + _aggregationDeserializer = aggregationDeserializer; + } + + public override AzureMetricConfigurationV2 Deserialize(YamlMappingNode node) + { + return new AzureMetricConfigurationV2 + { + MetricName = GetString(node, MetricNameTag), + Aggregation = DeserializeAggregation(node) + }; + } + + private MetricAggregationV2 DeserializeAggregation(YamlMappingNode node) + { + if (node.Children.TryGetValue(AggregationTag, out var aggregationNode)) + { + return _aggregationDeserializer.Deserialize((YamlMappingNode) aggregationNode); + } + + return null; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs index 23434870a..ebeab8f18 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs @@ -2,5 +2,14 @@ { public class AzureMetricConfigurationV2 { + /// + /// The name of the Azure metric to scrape. + /// + public string MetricName { get; set; } + + /// + /// The settings for how the metric should be aggregated before being returned from Azure. + /// + public MetricAggregationV2 Aggregation { get; set; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs new file mode 100644 index 000000000..37f81a5a5 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs @@ -0,0 +1,6 @@ +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +{ + public class MetricAggregationV2 : AggregationV2 + { + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetricConfigurationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetricConfigurationDeserializerTests.cs new file mode 100644 index 000000000..cd4bdd727 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetricConfigurationDeserializerTests.cs @@ -0,0 +1,73 @@ +using System.ComponentModel; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Xunit; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class AzureMetricConfigurationDeserializerTests + { + private readonly AzureMetricConfigurationDeserializer _deserializer; + private readonly Mock> _aggregationDeserializer; + + public AzureMetricConfigurationDeserializerTests() + { + _aggregationDeserializer = new Mock>(); + + _deserializer = new AzureMetricConfigurationDeserializer(_aggregationDeserializer.Object, new Mock().Object); + } + + [Fact] + public void Deserialize_MetricNameSupplied_SetsMetricName() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "metricName: ActiveMessages", + "ActiveMessages", + a => a.MetricName); + } + + [Fact] + public void Deserialize_MetricNameNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "resourceGroupName: promitor-group", + a => a.MetricName); + } + + [Fact] + public void Deserialize_AggregationSupplied_UsesDeserializer() + { + // Arrange + const string yamlText = +@"aggregation: + type: Average"; + var node = YamlUtils.CreateYamlNode(yamlText); + var aggregationNode = (YamlMappingNode) node.Children["aggregation"]; + + var aggregation = new MetricAggregationV2(); + _aggregationDeserializer.Setup(d => d.Deserialize(aggregationNode)).Returns(aggregation); + + // Act + var config = _deserializer.Deserialize(node); + + // Assert + Assert.Same(aggregation, config.Aggregation); + } + + [Fact] + public void Deserialize_AggregationNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "metricName: ActiveMessages", + c => c.Aggregation); + } + } +} From 2b58e34fd062247cd85bc3afa7cc24c1c501be01 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 12:09:43 +0100 Subject: [PATCH 22/32] Implement v2 metric aggregation deserializer I also added a `GetTimespan()` method to `Deserializer`, and updated the `AggregationDeserializer` to use that. --- .../Serialization/Deserializer.cs | 40 ++++++++++++- .../v2/Core/AggregationDeserializer.cs | 22 ++----- .../v2/Core/MetricAggregationDeserializer.cs | 26 ++++++++ .../v2/Model/MetricAggregationV2.cs | 16 ++++- .../MetricAggregationDeserializerTests.cs | 59 +++++++++++++++++++ 5 files changed, 144 insertions(+), 19 deletions(-) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricAggregationDeserializerTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs index bcb61307d..70d6728c5 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Runtime.Serialization; using GuardNet; using Microsoft.Extensions.Logging; @@ -75,6 +76,27 @@ protected static T GetEnum(YamlMappingNode node, string propertyName) return default(T); } + /// + /// Gets the value of the specified yaml property converted to an enum. + /// + /// The type of enum to return. + /// The node containing the property. + /// The property name. + /// The enum value, or null if the property doesn't exist. + protected static T? GetNullableEnum(YamlMappingNode node, string propertyName) + where T : struct + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + if (System.Enum.TryParse(propertyNode.ToString(), out var enumResult)) + { + return enumResult; + } + } + + return null; + } + /// /// Gets the contents of the specified property as a dictionary. /// @@ -97,5 +119,21 @@ protected static Dictionary GetDictionary(YamlMappingNode node, return null; } + + /// + /// Gets the value of the specified yaml property converted to a . + /// + /// The node containing the property. + /// The name of the property. + /// The value converted to a timespan, or null if the property doesn't exist. + protected static TimeSpan? GetTimespan(YamlMappingNode node, string propertyName) + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + return TimeSpan.Parse(propertyNode.ToString()); + } + + return null; + } } } \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs index 3cd20de3e..e8b7f0752 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs @@ -17,27 +17,17 @@ public AggregationDeserializer(ILogger logger) : base(logger) public override AggregationV2 Deserialize(YamlMappingNode node) { - var aggregation = new AggregationV2(); + var aggregation = new AggregationV2 {Interval = GetTimespan(node, IntervalTag)}; - aggregation.Interval = GetAggregationInterval(node); - - return aggregation; - } - - private TimeSpan GetAggregationInterval(YamlMappingNode node) - { - var interval = _defaultAggregationInterval; - if (node.Children.TryGetValue(IntervalTag, out var intervalNode)) - { - interval = TimeSpan.Parse(intervalNode.ToString()); - } - else + if (aggregation.Interval == null) { + aggregation.Interval = _defaultAggregationInterval; Logger.LogWarning( - "No default aggregation was configured, falling back to {AggregationInterval}", interval.ToString("g")); + "No default aggregation was configured, falling back to {AggregationInterval}", + aggregation.Interval?.ToString("g")); } - return interval; + return aggregation; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs new file mode 100644 index 000000000..cd7d846ce --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs @@ -0,0 +1,26 @@ +using Microsoft.Azure.Management.Monitor.Fluent.Models; +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class MetricAggregationDeserializer : Deserializer + { + private const string TypeTag = "type"; + private const string IntervalTag = "interval"; + + public MetricAggregationDeserializer(ILogger logger) : base(logger) + { + } + + public override MetricAggregationV2 Deserialize(YamlMappingNode node) + { + return new MetricAggregationV2 + { + Type = GetNullableEnum(node, TypeTag), + Interval = GetTimespan(node, IntervalTag) + }; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs index 37f81a5a5..4366fa6ed 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs @@ -1,6 +1,18 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +using System; +using Microsoft.Azure.Management.Monitor.Fluent.Models; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model { - public class MetricAggregationV2 : AggregationV2 + /// + /// Contains aggregation settings for a single metric (vs the global aggregation settings). + /// + public class MetricAggregationV2 { + public AggregationType? Type { get; set; } + + /// + /// The aggregation interval to use when querying Azure metrics. + /// + public TimeSpan? Interval { get; set; } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricAggregationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricAggregationDeserializerTests.cs new file mode 100644 index 000000000..9bb24d4c0 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricAggregationDeserializerTests.cs @@ -0,0 +1,59 @@ +using System; +using System.ComponentModel; +using Microsoft.Azure.Management.Monitor.Fluent.Models; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +{ + [Category("Unit")] + public class MetricAggregationDeserializerTests + { + private readonly MetricAggregationDeserializer _deserializer; + + public MetricAggregationDeserializerTests() + { + _deserializer = new MetricAggregationDeserializer(new Mock().Object); + } + + [Fact] + public void Deserialize_TypeSupplied_SetsType() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "type: Maximum", + AggregationType.Maximum, + a => a.Type); + } + + [Fact] + public void Deserialize_TypeNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "interval: 00:05:00", + a => a.Type); + } + + [Fact] + public void Deserialize_IntervalSupplied_SetsInterval() + { + DeserializerTestHelpers.AssertPropertySet( + _deserializer, + "interval: 00:07:00", + TimeSpan.FromMinutes(7), + a => a.Interval); + } + + [Fact] + public void Deserialize_IntervalNotSupplied_Null() + { + DeserializerTestHelpers.AssertPropertyNull( + _deserializer, + "type: Average", + a => a.Interval); + } + } +} From 2551e580d62b76e9b2475c9b57f59c3a5a2e37a4 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 12:16:01 +0100 Subject: [PATCH 23/32] Remove duplicate enum deserialization method Removed `GetNullableEnum()` and altered `GetEnum()` to return a nullable enum. The rationale for this is that the configuration model should have null properties where nothing was supplied in the yaml. --- .../Serialization/Deserializer.cs | 23 +------------------ .../v2/Core/MetricAggregationDeserializer.cs | 2 +- .../v2/Core/MetricDefinitionDeserializer.cs | 5 ++-- .../v2/Model/MetricDefinitionV2.cs | 2 +- .../Core/MetricDefinitionDeserializerTests.cs | 5 ++-- 5 files changed, 8 insertions(+), 29 deletions(-) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs index 70d6728c5..f72b03b02 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs @@ -55,27 +55,6 @@ protected static string GetString(YamlMappingNode node, string propertyName) return null; } - /// - /// Gets the value of the specified yaml property converted to an enum. - /// - /// The type of enum to return. - /// The node containing the property. - /// The property name. - /// The enum value, or default(T) if the property doesn't exist. - protected static T GetEnum(YamlMappingNode node, string propertyName) - where T : struct - { - if (node.Children.TryGetValue(propertyName, out var propertyNode)) - { - if (System.Enum.TryParse(propertyNode.ToString(), out var enumResult)) - { - return enumResult; - } - } - - return default(T); - } - /// /// Gets the value of the specified yaml property converted to an enum. /// @@ -83,7 +62,7 @@ protected static T GetEnum(YamlMappingNode node, string propertyName) /// The node containing the property. /// The property name. /// The enum value, or null if the property doesn't exist. - protected static T? GetNullableEnum(YamlMappingNode node, string propertyName) + protected static T? GetEnum(YamlMappingNode node, string propertyName) where T : struct { if (node.Children.TryGetValue(propertyName, out var propertyNode)) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs index cd7d846ce..907f8132d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs @@ -18,7 +18,7 @@ public override MetricAggregationV2 Deserialize(YamlMappingNode node) { return new MetricAggregationV2 { - Type = GetNullableEnum(node, TypeTag), + Type = GetEnum(node, TypeTag), Interval = GetTimespan(node, IntervalTag) }; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs index efe43c9d7..2c36aee52 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs @@ -65,10 +65,11 @@ private void DeserializeScraping(YamlMappingNode node, MetricDefinitionV2 metric private void DeserializeMetrics(YamlMappingNode node, MetricDefinitionV2 metricDefinition) { - if (metricDefinition.ResourceType != ResourceType.NotSpecified && + if (metricDefinition.ResourceType != null && + metricDefinition.ResourceType != ResourceType.NotSpecified && node.Children.TryGetValue(MetricsTag, out var metricsNode)) { - var resourceDeserializer = _azureResourceDeserializerFactory.GetDeserializerFor(metricDefinition.ResourceType); + var resourceDeserializer = _azureResourceDeserializerFactory.GetDeserializerFor(metricDefinition.ResourceType.Value); metricDefinition.Resources = resourceDeserializer.Deserialize((YamlSequenceNode)metricsNode); } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs index 5a578e708..7cd6071d2 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs @@ -22,7 +22,7 @@ public class MetricDefinitionV2 /// /// The type of resources that are scraped to populate this metric. /// - public ResourceType ResourceType { get; set; } + public ResourceType? ResourceType { get; set; } /// /// Any prometheus labels that should be added to the metric. diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs index 1760de38c..b043f1c9c 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs @@ -76,12 +76,11 @@ public void Deserialize_ResourceTypeSupplied_SetsResourceType() } [Fact] - public void Deserialize_ResourceTypeNotSupplied_Defaults() + public void Deserialize_ResourceTypeNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "name: promitor_test_metric", - ResourceType.NotSpecified, d => d.ResourceType); } From 40eb45d8f370a9a8b5f8a256937c270710825fef Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 13:14:53 +0100 Subject: [PATCH 24/32] Add v2 serialization integration test - Added a test that creates a v2 model, serializes it, deserializes it using the V2 deserializer, and then verifies it was deserialized correctly. - Implemented the AzureResourceDeserializerFactory. - Fixed a small typo where I had put "metrics" instead of "resources" as a yaml tag name in the MetricDefinitionDeserializer. - Defaulted the version in MetricsDeclarationV2 so you don't need to explicitly specify it when creating a v2 model. --- .../Serialization/ConfigurationSerializer.cs | 17 +- .../Core/AzureResourceDeserializerFactory.cs | 49 +++++ .../v2/Core/MetricDefinitionDeserializer.cs | 4 +- .../v2/Model/MetricsDeclarationV2.cs | 3 +- .../Core/MetricDefinitionDeserializerTests.cs | 8 +- .../Serialization/v2/V2IntegrationTests.cs | 170 ++++++++++++++++++ 6 files changed, 229 insertions(+), 22 deletions(-) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureResourceDeserializerFactory.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs index 2c15be989..032bb55a2 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs @@ -8,6 +8,7 @@ using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization.Enum; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Promitor.Core.Serialization.Yaml; using YamlDotNet.RepresentationModel; @@ -81,21 +82,7 @@ private SpecVersion DetermineDeclarationSpecVersion(YamlMappingNode mappingNode) return (SpecVersion)specVersion; } - public string Serialize(MetricsDeclaration metricsDeclaration) - { - Guard.NotNull(metricsDeclaration, nameof(metricsDeclaration)); - - var serializer = YamlSerialization.CreateSerializer(); - var rawMetricsDeclaration = serializer.Serialize(metricsDeclaration); - return rawMetricsDeclaration; - } - - /// - /// Allows a v1 version of the config to be serialized. - /// - /// A v1 version of the config. - /// The serialized yaml. - public string Serialize(MetricsDeclarationV1 metricsDeclaration) + public string Serialize(object metricsDeclaration) { Guard.NotNull(metricsDeclaration, nameof(metricsDeclaration)); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureResourceDeserializerFactory.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureResourceDeserializerFactory.cs new file mode 100644 index 000000000..69415c1c6 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureResourceDeserializerFactory.cs @@ -0,0 +1,49 @@ +using System; +using Microsoft.Extensions.Logging; +using Promitor.Core.Scraping.Configuration.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +{ + public class AzureResourceDeserializerFactory : IAzureResourceDeserializerFactory + { + private readonly IDeserializer _secretDeserializer; + private readonly ILogger _logger; + + public AzureResourceDeserializerFactory(IDeserializer secretDeserializer, ILogger logger) + { + _secretDeserializer = secretDeserializer; + _logger = logger; + } + + public IDeserializer GetDeserializerFor(ResourceType resourceType) + { + switch (resourceType) + { + case ResourceType.ServiceBusQueue: + return new ServiceBusQueueDeserializer(_logger); + case ResourceType.Generic: + return new GenericResourceDeserializer(_logger); + case ResourceType.StorageQueue: + return new StorageQueueDeserializer(_secretDeserializer, _logger); + case ResourceType.ContainerInstance: + return new ContainerInstanceDeserializer(_logger); + case ResourceType.VirtualMachine: + return new VirtualMachineDeserializer(_logger); + case ResourceType.ContainerRegistry: + return new ContainerRegistryDeserializer(_logger); + case ResourceType.NetworkInterface: + return new NetworkInterfaceDeserializer(_logger); + case ResourceType.CosmosDb: + return new CosmosDbDeserializer(_logger); + case ResourceType.RedisCache: + return new RedisCacheDeserializer(_logger); + case ResourceType.PostgreSql: + return new PostgreSqlDeserializer(_logger); + default: + throw new ArgumentOutOfRangeException($"Resource Type {resourceType} not supported."); + } + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs index 2c36aee52..0cef7b8a8 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs @@ -13,7 +13,7 @@ public class MetricDefinitionDeserializer : Deserializer private const string LabelsTag = "labels"; private const string AzureMetricConfigurationTag = "azureMetricConfiguration"; private const string ScrapingTag = "scraping"; - private const string MetricsTag = "metrics"; + private const string ResourcesTag = "resources"; private readonly IDeserializer _azureMetricConfigurationDeserializer; private readonly IDeserializer _scrapingDeserializer; @@ -67,7 +67,7 @@ private void DeserializeMetrics(YamlMappingNode node, MetricDefinitionV2 metricD { if (metricDefinition.ResourceType != null && metricDefinition.ResourceType != ResourceType.NotSpecified && - node.Children.TryGetValue(MetricsTag, out var metricsNode)) + node.Children.TryGetValue(ResourcesTag, out var metricsNode)) { var resourceDeserializer = _azureResourceDeserializerFactory.GetDeserializerFor(metricDefinition.ResourceType.Value); metricDefinition.Resources = resourceDeserializer.Deserialize((YamlSequenceNode)metricsNode); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs index 312032243..13ed779d1 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs @@ -1,5 +1,6 @@ using System.Collections; using System.Collections.Generic; +using Promitor.Core.Scraping.Configuration.Serialization.Enum; namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model { @@ -8,7 +9,7 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model /// public class MetricsDeclarationV2 { - public string Version { get; set; } + public string Version { get; set; } = SpecVersion.v2.ToString(); public AzureMetadataV2 AzureMetadata { get; set; } public MetricDefaultsV2 MetricDefaults { get; set; } public List Metrics { get; set; } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs index b043f1c9c..3803d44e4 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs @@ -184,7 +184,7 @@ public void Deserialize_ResourcesSupplied_UsesDeserializer() // Arrange const string yamlText = @"resourceType: Generic -metrics: +resources: - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging-2"; var node = YamlUtils.CreateYamlNode(yamlText); @@ -195,7 +195,7 @@ public void Deserialize_ResourcesSupplied_UsesDeserializer() var resources = new List(); resourceDeserializer.Setup( - d => d.Deserialize((YamlSequenceNode) node.Children["metrics"])).Returns(resources); + d => d.Deserialize((YamlSequenceNode) node.Children["resources"])).Returns(resources); // Act var definition = _deserializer.Deserialize(node); @@ -209,7 +209,7 @@ public void Deserialize_ResourcesWithUnspecifiedResourceType_Null() { // Arrange const string yamlText = -@"metrics: +@"resources: - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging-2"; var node = YamlUtils.CreateYamlNode(yamlText); @@ -220,7 +220,7 @@ public void Deserialize_ResourcesWithUnspecifiedResourceType_Null() var resources = new List(); resourceDeserializer.Setup( - d => d.Deserialize((YamlSequenceNode)node.Children["metrics"])).Returns(resources); + d => d.Deserialize((YamlSequenceNode)node.Children["resources"])).Returns(resources); // Act var definition = _deserializer.Deserialize(node); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs new file mode 100644 index 000000000..70f2b1de6 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using Microsoft.Azure.Management.Cdn.Fluent.Models; +using Microsoft.Azure.Management.Monitor.Fluent.Models; +using Microsoft.Extensions.Logging; +using Moq; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Xunit; +using ResourceType = Promitor.Core.Scraping.Configuration.Model.ResourceType; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2 +{ + [Category("Unit")] + public class V2IntegrationTests + { + [Fact] + public void CanDeserializeSerializedModel() + { + // This test creates a v2 model, serializes it to yaml, and then verifies that + // the V2Serializer can deserialize it. + var logger = new Mock(); + var configurationSerializer = new ConfigurationSerializer(logger.Object); + var v2Serializer = new V2Serializer( + new AzureMetadataDeserializer(logger.Object), + new MetricDefaultsDeserializer( + new AggregationDeserializer(logger.Object), + new ScrapingDeserializer(logger.Object), + logger.Object), + new MetricDefinitionDeserializer( + new AzureMetricConfigurationDeserializer( + new MetricAggregationDeserializer(logger.Object), + logger.Object), + new ScrapingDeserializer(logger.Object), + new AzureResourceDeserializerFactory(new SecretDeserializer(logger.Object), logger.Object), + logger.Object), + logger.Object); + + var declaration = new MetricsDeclarationV2 + { + AzureMetadata = new AzureMetadataV2 + { + TenantId = "tenant", + SubscriptionId = "subscription", + ResourceGroupName = "promitor-group" + }, + MetricDefaults = new MetricDefaultsV2 + { + Aggregation = new AggregationV2 + { + Interval = TimeSpan.FromMinutes(7) + }, + Scraping = new ScrapingV2 + { + Schedule = "1 2 3 4 5" + } + }, + Metrics = new List + { + new MetricDefinitionV2 + { + Name = "promitor_demo_generic_queue_size", + Description = "Amount of active messages of the 'orders' queue (determined with Generic provider)", + ResourceType = ResourceType.Generic, + Labels = new Dictionary + { + {"app", "promitor"} + }, + AzureMetricConfiguration = new AzureMetricConfigurationV2 + { + MetricName = "ActiveMessages", + Aggregation = new MetricAggregationV2 + { + Type = AggregationType.Average + } + }, + Resources = new List + { + new GenericResourceV2 + { + ResourceUri = "Microsoft.ServiceBus/namespaces/promitor-messaging", + Filter = "EntityName eq 'orders'" + }, + new GenericResourceV2 + { + ResourceUri = "Microsoft.ServiceBus/namespaces/promitor-messaging", + Filter = "EntityName eq 'accounts'" + } + } + }, + new MetricDefinitionV2 + { + Name = "promitor_demo_servicebusqueue_queue_size", + Description = "Amount of active messages of the 'orders' queue (determined with ServiceBusQueue provider)", + ResourceType = ResourceType.ServiceBusQueue, + AzureMetricConfiguration = new AzureMetricConfigurationV2 + { + MetricName = "ActiveMessages", + Aggregation = new MetricAggregationV2 + { + Type = AggregationType.Average, + Interval = TimeSpan.FromMinutes(15) + } + }, + Scraping = new ScrapingV2 + { + Schedule = "5 4 3 2 1" + }, + Resources = new List + { + new ServiceBusQueueResourceV2 + { + Namespace = "promitor-messaging", + QueueName = "orders", + ResourceGroupName = "promitor-demo-group" + } + } + } + } + }; + + // Act + var yaml = configurationSerializer.Serialize(declaration); + var deserializedModel = v2Serializer.Deserialize(YamlUtils.CreateYamlNode(yaml)); + + // Assert + Assert.NotNull(deserializedModel); + Assert.Equal("tenant", deserializedModel.AzureMetadata.TenantId); + Assert.Equal("subscription", deserializedModel.AzureMetadata.SubscriptionId); + Assert.Equal("promitor-group", deserializedModel.AzureMetadata.ResourceGroupName); + Assert.Equal(TimeSpan.FromMinutes(7), deserializedModel.MetricDefaults.Aggregation.Interval); + Assert.Equal("1 2 3 4 5", deserializedModel.MetricDefaults.Scraping.Schedule); + + // Check first metric + Assert.Equal("promitor_demo_generic_queue_size", deserializedModel.Metrics.ElementAt(0).Name); + Assert.Equal("Amount of active messages of the 'orders' queue (determined with Generic provider)", deserializedModel.Metrics.ElementAt(0).Description); + Assert.Equal(ResourceType.Generic, deserializedModel.Metrics.ElementAt(0).ResourceType); + Assert.Equal(new Dictionary {{"app", "promitor"}}, deserializedModel.Metrics.ElementAt(0).Labels); + Assert.Equal("ActiveMessages", deserializedModel.Metrics.ElementAt(0).AzureMetricConfiguration.MetricName); + Assert.Equal(AggregationType.Average, deserializedModel.Metrics.ElementAt(0).AzureMetricConfiguration.Aggregation.Type); + Assert.Equal(2, deserializedModel.Metrics.ElementAt(0).Resources.Count); + + var genericResource1 = Assert.IsType(deserializedModel.Metrics.ElementAt(0).Resources.ElementAt(0)); + Assert.Equal("Microsoft.ServiceBus/namespaces/promitor-messaging", genericResource1.ResourceUri); + Assert.Equal("EntityName eq 'orders'", genericResource1.Filter); + + var genericResource2 = Assert.IsType(deserializedModel.Metrics.ElementAt(0).Resources.ElementAt(1)); + Assert.Equal("Microsoft.ServiceBus/namespaces/promitor-messaging", genericResource2.ResourceUri); + Assert.Equal("EntityName eq 'accounts'", genericResource2.Filter); + + // Check second metric + Assert.Equal("promitor_demo_servicebusqueue_queue_size", deserializedModel.Metrics.ElementAt(1).Name); + Assert.Equal("Amount of active messages of the 'orders' queue (determined with ServiceBusQueue provider)", deserializedModel.Metrics.ElementAt(1).Description); + Assert.Equal(ResourceType.ServiceBusQueue, deserializedModel.Metrics.ElementAt(1).ResourceType); + Assert.Null(deserializedModel.Metrics.ElementAt(1).Labels); + Assert.Equal(TimeSpan.FromMinutes(15), deserializedModel.Metrics.ElementAt(1).AzureMetricConfiguration.Aggregation.Interval); + Assert.Equal("5 4 3 2 1", deserializedModel.Metrics.ElementAt(1).Scraping.Schedule); + + Assert.Single(deserializedModel.Metrics.ElementAt(1).Resources); + var serviceBusQueueResource = Assert.IsType(deserializedModel.Metrics.ElementAt(1).Resources.ElementAt(0)); + Assert.Equal("promitor-messaging", serviceBusQueueResource.Namespace); + Assert.Equal("orders", serviceBusQueueResource.QueueName); + Assert.Equal("promitor-demo-group", serviceBusQueueResource.ResourceGroupName); + } + } +} From b96fbfb19b39f1ccbde54266acb1dae880a93a74 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 13:21:12 +0100 Subject: [PATCH 25/32] Remove unnecessary type argument on null helpers The `AssertPropertyNull()` methods didn't actually need the property type argument because we can assert null against an object. --- .../Serialization/v2/DeserializerTestHelpers.cs | 15 ++++++--------- .../ContainerInstanceDeserializerTests.cs | 2 +- .../ContainerRegistryDeserializerTests.cs | 2 +- .../v2/Providers/CosmosDbDeserializerTests.cs | 2 +- .../Providers/GenericResourceDeserializerTests.cs | 4 ++-- .../NetworkInterfaceDeserializerTests.cs | 2 +- .../v2/Providers/PostgreSqlDeserializerTests.cs | 2 +- .../v2/Providers/RedisCacheDeserializerTests.cs | 2 +- .../Providers/ServiceBusQueueDeserializerTests.cs | 4 ++-- .../v2/Providers/StorageQueueDeserializerTests.cs | 6 +++--- .../Providers/VirtualMachineDeserializerTests.cs | 2 +- 11 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs index 913f79ea7..b8f767697 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs @@ -83,12 +83,11 @@ public static void AssertPropertySet( /// Deserializes the yaml and verifies that the specified property is null. /// /// The type of object being deserialized. - /// The type of the property. /// The deserializer. /// The yaml to deserialize. /// The property to check. - public static void AssertPropertyNull( - IDeserializer deserializer, string yamlText, Func propertyAccessor) + public static void AssertPropertyNull( + IDeserializer deserializer, string yamlText, Func propertyAccessor) { // Arrange var node = YamlUtils.CreateYamlNode(yamlText); @@ -104,13 +103,12 @@ public static void AssertPropertyNull( /// Deserializes the yaml and verifies that the specified property is null. /// /// The type of object being deserialized. - /// The type of the property. /// The type that the deserializer returns. /// The deserializer. /// The yaml to deserialize. /// The property to check. - public static void AssertPropertyNull( - IDeserializer deserializer, string yamlText, Func propertyAccessor) + public static void AssertPropertyNull( + IDeserializer deserializer, string yamlText, Func propertyAccessor) where TObject: TBaseObject { // Arrange @@ -128,13 +126,12 @@ public static void AssertPropertyNull( /// under the specified yaml element is null. /// /// The type of object being deserialized. - /// The type of the property. /// The deserializer. /// The yaml to deserialize. /// The property to check. /// The element to look for the property under. - public static void AssertPropertyNull( - IDeserializer deserializer, string yamlText, string yamlElement, Func propertyAccessor) + public static void AssertPropertyNull( + IDeserializer deserializer, string yamlText, string yamlElement, Func propertyAccessor) { // Arrange var node = YamlUtils.CreateYamlNode(yamlText).Children[yamlElement]; diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs index 5e527e93d..172a4e7c3 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs @@ -37,7 +37,7 @@ public void Deserialize_ContainerGroupSupplied_SetsContainerGroup() [Fact] public void Deserialize_ContainerGroupNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-resource-group", c => c.ContainerGroup); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs index 222fec3bd..fb46e7d23 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs @@ -32,7 +32,7 @@ public void Deserialize_RegistryNameSupplied_SetsRegistryName() [Fact] public void Deserialize_RegistryNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", c => c.RegistryName); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs index 4b8f17e5e..fd9eb1b9b 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs @@ -32,7 +32,7 @@ public void Deserialize_DbNameSupplied_SetsDbName() [Fact] public void Deserialize_DbNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", c => c.DbName); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs index bd6a5d77e..5d1e20732 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs @@ -30,7 +30,7 @@ public void Deserialize_FilterSupplied_SetsFilter() [Fact] public void Deserialize_FilterNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.Filter); @@ -49,7 +49,7 @@ public void Deserialize_ResourceUriSupplied_SetsResourceUri() [Fact] public void Deserialize_ResourceUriNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.ResourceUri); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs index 622d68c39..96070f7ee 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs @@ -32,7 +32,7 @@ public void Deserialize_NetworkInterfaceNameSupplied_SetsNetworkInterfaceName() [Fact] public void Deserialize_NetworkInterfaceNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.NetworkInterfaceName); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs index 1199f5013..244688633 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs @@ -30,7 +30,7 @@ public void Deserialize_ServerNameSupplied_SetsServerName() [Fact] public void Deserialize_ServerNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.ServerName); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs index e62a3b1e2..ef8828579 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs @@ -32,7 +32,7 @@ public void Deserialize_CacheNameSupplied_SetsCacheName() [Fact] public void Deserialize_CacheNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.CacheName); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs index ebbb48f85..03822095b 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs @@ -32,7 +32,7 @@ public void Deserialize_QueueNameSupplied_SetsQueueName() [Fact] public void Deserialize_QueueNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.QueueName); @@ -51,7 +51,7 @@ public void Deserialize_NamespaceSupplied_SetsNamespace() [Fact] public void Deserialize_NamespaceNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.Namespace); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs index c07266f2e..1048c2c1d 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs @@ -35,7 +35,7 @@ public void Deserialize_AccountNameSupplied_SetsAccountName() [Fact] public void Deserialize_AccountNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.AccountName); @@ -54,7 +54,7 @@ public void Deserialize_QueueNameSupplied_SetsQueueName() [Fact] public void Deserialize_QueueNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.QueueName); @@ -83,7 +83,7 @@ public void Deserialize_SasTokenSupplied_UsesDeserializer() [Fact] public void Deserialize_SasTokenNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.SasToken); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs index 851dc1531..6d2c48f11 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs @@ -33,7 +33,7 @@ public void Deserialize_VirtualMachineNameSupplied_SetsName() [Fact] public void Deserialize_VirtualMachineNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.VirtualMachineName); From 65f31edb756f65743c9e5a36839763d67fb34ccd Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Fri, 9 Aug 2019 13:25:16 +0100 Subject: [PATCH 26/32] Rename v1 and v2 serializers They both handle deserialization, so I've renamed them to `{Version}Deserializer`. I've also rename the `InterpretYamlStream()` method in the v1 deserializer to `Deserialize()` since that's what it does. --- .../Serialization/ConfigurationSerializer.cs | 4 +-- .../{V1Serializer.cs => V1Deserializer.cs} | 6 ++--- .../{V2Serializer.cs => V2Deserializer.cs} | 4 +-- ...ializerTests.cs => V2DeserializerTests.cs} | 26 +++++++++---------- .../Serialization/v2/V2IntegrationTests.cs | 4 +-- 5 files changed, 22 insertions(+), 22 deletions(-) rename src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/{V1Serializer.cs => V1Deserializer.cs} (92%) rename src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/{V2Serializer.cs => V2Deserializer.cs} (95%) rename src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/{V2SerializerTests.cs => V2DeserializerTests.cs} (86%) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs index 032bb55a2..fbe230e30 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs @@ -56,8 +56,8 @@ private MetricsDeclaration InterpretYamlStream(YamlStream metricsDeclarationYaml switch (specVersion) { case SpecVersion.v1: - var v1Serializer = new v1.Core.V1Serializer(_logger); - var v1Config = v1Serializer.InterpretYamlStream(rootNode); + var v1Serializer = new v1.Core.V1Deserializer(_logger); + var v1Config = v1Serializer.Deserialize(rootNode); return _mapper.Map(v1Config); default: diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Serializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs similarity index 92% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Serializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs index 29f0122b1..8bfd87f46 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Serializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs @@ -6,16 +6,16 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class V1Serializer + public class V1Deserializer { - public V1Serializer(ILogger logger) + public V1Deserializer(ILogger logger) { Logger = logger; } public ILogger Logger { get; } - public MetricsDeclarationV1 InterpretYamlStream(YamlMappingNode rootNode) + public MetricsDeclarationV1 Deserialize(YamlMappingNode rootNode) { AzureMetadataV1 azureMetadata = null; if (rootNode.Children.ContainsKey("azureMetadata")) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs similarity index 95% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs index 99ce52113..6567bf61f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Serializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs @@ -6,13 +6,13 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core { - public class V2Serializer : Deserializer + public class V2Deserializer : Deserializer { private readonly IDeserializer _azureMetadataDeserializer; private readonly IDeserializer _defaultsDeserializer; private readonly IDeserializer _metricsDeserializer; - public V2Serializer(IDeserializer azureMetadataDeserializer, + public V2Deserializer(IDeserializer azureMetadataDeserializer, IDeserializer defaultsDeserializer, IDeserializer metricsDeserializer, ILogger logger) : base(logger) diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs similarity index 86% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs index c3a4afcf9..c16d5482a 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2SerializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs @@ -12,20 +12,20 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core { [Category("Unit")] - public class V2SerializerTests + public class V2DeserializerTests { private readonly Mock> _metadataDeserializer; private readonly Mock> _defaultsDeserializer; private readonly Mock> _metricsDeserializer; - private readonly V2Serializer _serializer; + private readonly V2Deserializer _deserializer; - public V2SerializerTests() + public V2DeserializerTests() { _metadataDeserializer = new Mock>(); _defaultsDeserializer = new Mock>(); _metricsDeserializer = new Mock>(); - _serializer = new V2Serializer( + _deserializer = new V2Deserializer( _metadataDeserializer.Object, _defaultsDeserializer.Object, _metricsDeserializer.Object, @@ -39,7 +39,7 @@ public void Deserialize_NoVersionSpecified_ThrowsException() var yamlNode = YamlUtils.CreateYamlNode("azureMetadata:"); // Act - var exception = Assert.Throws(() => _serializer.Deserialize(yamlNode)); + var exception = Assert.Throws(() => _deserializer.Deserialize(yamlNode)); // Assert Assert.Equal("No 'version' element was found in the metrics config", exception.Message); @@ -52,7 +52,7 @@ public void Deserialize_VersionSpecified_SetsCorrectVersion() var yamlNode = YamlUtils.CreateYamlNode("version: v2"); // Act - var builder = _serializer.Deserialize(yamlNode); + var builder = _deserializer.Deserialize(yamlNode); // Assert Assert.Equal("v2", builder.Version); @@ -65,7 +65,7 @@ public void Deserialize_WrongVersionSpecified_ThrowsException() var yamlNode = YamlUtils.CreateYamlNode("version: v1"); // Act - var exception = Assert.Throws(() => _serializer.Deserialize(yamlNode)); + var exception = Assert.Throws(() => _deserializer.Deserialize(yamlNode)); // Assert Assert.Equal("A 'version' element with a value of 'v2' was expected but the value 'v1' was found", exception.Message); @@ -84,7 +84,7 @@ public void Deserialize_AzureMetadata_UsesMetadataDeserializer() _metadataDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(azureMetadata); // Act - var declaration = _serializer.Deserialize(yamlNode); + var declaration = _deserializer.Deserialize(yamlNode); // Assert Assert.Same(azureMetadata, declaration.AzureMetadata); @@ -99,7 +99,7 @@ public void Deserialize_AzureMetadataNotSupplied_SetsMetadataNull() d => d.Deserialize(It.IsAny())).Returns(new AzureMetadataV2()); // Act - var declaration = _serializer.Deserialize(yamlNode); + var declaration = _deserializer.Deserialize(yamlNode); // Assert Assert.Null(declaration.AzureMetadata); @@ -119,7 +119,7 @@ public void Deserialize_MetricDefaults_UsesDefaultsDeserializer() _defaultsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metricDefaults); // Act - var declaration = _serializer.Deserialize(yamlNode); + var declaration = _deserializer.Deserialize(yamlNode); // Assert Assert.Same(metricDefaults, declaration.MetricDefaults); @@ -136,7 +136,7 @@ public void Deserialize_MetricDefaultsNotSupplied_SetsDefaultsNull() d => d.Deserialize(It.IsAny())).Returns(new MetricDefaultsV2()); // Act - var declaration = _serializer.Deserialize(yamlNode); + var declaration = _deserializer.Deserialize(yamlNode); // Assert Assert.Null(declaration.MetricDefaults); @@ -155,7 +155,7 @@ public void Deserialize_Metrics_UsesMetricsDeserializer() _metricsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metrics); // Act - var declaration = _serializer.Deserialize(yamlNode); + var declaration = _deserializer.Deserialize(yamlNode); // Assert Assert.Same(metrics, declaration.Metrics); @@ -172,7 +172,7 @@ public void Deserialize_Metric_SetsMetricsNull() d => d.Deserialize(It.IsAny())).Returns(new List()); // Act - var declaration = _serializer.Deserialize(yamlNode); + var declaration = _deserializer.Deserialize(yamlNode); // Assert Assert.Null(declaration.Metrics); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs index 70f2b1de6..477464369 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs @@ -22,10 +22,10 @@ public class V2IntegrationTests public void CanDeserializeSerializedModel() { // This test creates a v2 model, serializes it to yaml, and then verifies that - // the V2Serializer can deserialize it. + // the V2Deserializer can deserialize it. var logger = new Mock(); var configurationSerializer = new ConfigurationSerializer(logger.Object); - var v2Serializer = new V2Serializer( + var v2Serializer = new V2Deserializer( new AzureMetadataDeserializer(logger.Object), new MetricDefaultsDeserializer( new AggregationDeserializer(logger.Object), From 1190a6187066ceb028620b45969d3ce8ee3c905f Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Sat, 10 Aug 2019 09:43:31 +0100 Subject: [PATCH 27/32] Connect v2 format to application I've hooked the v2 format into the application so that it can actually be used. --- .../Providers/MetricsDeclarationProvider.cs | 5 +- .../Serialization/ConfigurationSerializer.cs | 9 ++- .../v2/Mapping/V2MappingProfile.cs | 53 +++++++++++++ .../IServiceCollectionExtensions.cs | 14 ++++ .../Validation/RuntimeValidator.cs | 7 +- .../Metrics/v1/MetricsDeclarationBuilder.cs | 3 +- ...AzureStorageQueueYamlSerializationTests.cs | 2 +- ...ContainerInstanceYamlSerializationTests.cs | 2 +- ...ContainerRegistryYamlSerializationTests.cs | 2 +- ...ationWithCosmosDbYamlSerializationTests.cs | 2 +- ...hNetworkInterfaceYamlSerializationTests.cs | 2 +- ...ionWithPostgreSqlYamlSerializationTests.cs | 2 +- ...ionWithRedisCacheYamlSerializationTests.cs | 2 +- ...thServiceBusQueueYamlSerializationTests.cs | 2 +- ...ithVirtualMachineYamlSerializationTests.cs | 2 +- .../YamlSerializationTests.cs | 6 ++ .../Mapping/MetricDefinitionV2MappingTests.cs | 39 +++++++++ ...usQueueResourceDefinitionV2MappingTests.cs | 29 +++++++ .../Serialization/v2/V2IntegrationTests.cs | 79 ++++++++++++++++--- .../Stubs/MetricsDeclarationProviderStub.cs | 3 +- 20 files changed, 238 insertions(+), 27 deletions(-) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Mapping/V2MappingProfile.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/ServiceBusQueueResourceDefinitionV2MappingTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs b/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs index e47ef2c66..2f942226d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs +++ b/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs @@ -7,6 +7,7 @@ using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Providers.Interfaces; using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; namespace Promitor.Core.Scraping.Configuration.Providers { @@ -15,9 +16,9 @@ public class MetricsDeclarationProvider : IMetricsDeclarationProvider private readonly ConfigurationSerializer _configurationSerializer; private readonly IConfiguration _configuration; - public MetricsDeclarationProvider(IConfiguration configuration, ILogger logger, IMapper mapper) + public MetricsDeclarationProvider(IConfiguration configuration, ILogger logger, IMapper mapper, IDeserializer v2Deserializer) { - _configurationSerializer = new ConfigurationSerializer(logger, mapper); + _configurationSerializer = new ConfigurationSerializer(logger, mapper, v2Deserializer); _configuration = configuration; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs index fbe230e30..4613768eb 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs @@ -7,7 +7,6 @@ using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Promitor.Core.Serialization.Yaml; using YamlDotNet.RepresentationModel; @@ -18,11 +17,13 @@ public class ConfigurationSerializer { private readonly ILogger _logger; private readonly IMapper _mapper; + private readonly IDeserializer _v2Deserializer; - public ConfigurationSerializer(ILogger logger, IMapper mapper) + public ConfigurationSerializer(ILogger logger, IMapper mapper, IDeserializer v2Deserializer) { _logger = logger; _mapper = mapper; + _v2Deserializer = v2Deserializer; } public MetricsDeclaration Deserialize(string rawMetricsDeclaration) @@ -60,6 +61,10 @@ private MetricsDeclaration InterpretYamlStream(YamlStream metricsDeclarationYaml var v1Config = v1Serializer.Deserialize(rootNode); return _mapper.Map(v1Config); + case SpecVersion.v2: + var v2Config = _v2Deserializer.Deserialize(rootNode); + + return _mapper.Map(v2Config); default: throw new Exception($"Unable to interpret YAML stream for spec version '{specVersion}'"); } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Mapping/V2MappingProfile.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Mapping/V2MappingProfile.cs new file mode 100644 index 000000000..ebaa63ecd --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Mapping/V2MappingProfile.cs @@ -0,0 +1,53 @@ +using AutoMapper; +using Promitor.Core.Scraping.Configuration.Model; +using Promitor.Core.Scraping.Configuration.Model.Metrics; +using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping +{ + public class V2MappingProfile : Profile + { + public V2MappingProfile() + { + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap() + .ForCtorParam("ns", o => o.MapFrom(s => s.Namespace)); + CreateMap(); + CreateMap(); + + CreateMap(); + + CreateMap() + .ForMember(m => m.PrometheusMetricDefinition, o => o.MapFrom(v2 => v2)); + + CreateMap() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include(); + } + } +} diff --git a/src/Promitor.Scraper.Host/Extensions/IServiceCollectionExtensions.cs b/src/Promitor.Scraper.Host/Extensions/IServiceCollectionExtensions.cs index 68b483fbb..e0c0a2498 100644 --- a/src/Promitor.Scraper.Host/Extensions/IServiceCollectionExtensions.cs +++ b/src/Promitor.Scraper.Host/Extensions/IServiceCollectionExtensions.cs @@ -14,6 +14,9 @@ using Promitor.Core.Configuration.Model.Server; using Promitor.Core.Configuration.Model.Telemetry; using Promitor.Core.Configuration.Model.Telemetry.Sinks; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Promitor.Core.Scraping.Factories; using Promitor.Core.Scraping.Prometheus; using Promitor.Core.Scraping.Prometheus.Interfaces; @@ -78,6 +81,17 @@ public static IServiceCollection DefineDependencies(this IServiceCollection serv services.AddTransient(); services.AddTransient(); + services.AddSingleton, V2Deserializer>(); + services.AddSingleton, AzureMetadataDeserializer>(); + services.AddSingleton, MetricDefaultsDeserializer>(); + services.AddSingleton, MetricDefinitionDeserializer>(); + services.AddSingleton, AggregationDeserializer>(); + services.AddSingleton, ScrapingDeserializer>(); + services.AddSingleton, AzureMetricConfigurationDeserializer>(); + services.AddSingleton(); + services.AddSingleton, MetricAggregationDeserializer>(); + services.AddSingleton, SecretDeserializer>(); + return services; } diff --git a/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs b/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs index ec7799869..4de129de2 100644 --- a/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs +++ b/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs @@ -6,6 +6,8 @@ using Microsoft.Extensions.Options; using Promitor.Core.Configuration.Model.Metrics; using Promitor.Core.Scraping.Configuration.Providers; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Promitor.Core.Telemetry.Loggers; using Promitor.Scraper.Host.Validation.Exceptions; using Promitor.Scraper.Host.Validation.Interfaces; @@ -24,11 +26,12 @@ public RuntimeValidator( IOptions metricsConfiguration, ValidationLogger validatorLogger, IConfiguration configuration, - IMapper mapper) + IMapper mapper, + IDeserializer v2Deserializer) { _validationLogger = validatorLogger; - var scrapeConfigurationProvider = new MetricsDeclarationProvider(configuration, _validationLogger, mapper); + var scrapeConfigurationProvider = new MetricsDeclarationProvider(configuration, _validationLogger, mapper, v2Deserializer); _validationSteps = new List { new ConfigurationPathValidationStep(metricsConfiguration, _validationLogger), diff --git a/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs b/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs index b6132114a..3e7c81a4b 100644 --- a/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs +++ b/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs @@ -59,7 +59,8 @@ public string Build(IMapper mapper) Metrics = _metrics }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper); + // TODO: pass in deserializer + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper, null); return configurationSerializer.Serialize(metricsDeclaration); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithAzureStorageQueueYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithAzureStorageQueueYamlSerializationTests.cs index a14e88965..18a49fe9f 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithAzureStorageQueueYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithAzureStorageQueueYamlSerializationTests.cs @@ -36,7 +36,7 @@ public void YamlSerialization_SerializeAndDeserializeValidConfigForAzureStorageQ azureStorageQueueMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerInstanceYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerInstanceYamlSerializationTests.cs index d8fcbb76a..a0e842a5c 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerInstanceYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerInstanceYamlSerializationTests.cs @@ -37,7 +37,7 @@ public void YamlSerialization_SerializeAndDeserializeValidConfigForContainerInst containerInstanceMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerRegistryYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerRegistryYamlSerializationTests.cs index 3347a568d..d9ea0835d 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerRegistryYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerRegistryYamlSerializationTests.cs @@ -37,7 +37,7 @@ public void YamlSerialization_SerializeAndDeserializeValidConfigForContainerRegi containerRegistryMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithCosmosDbYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithCosmosDbYamlSerializationTests.cs index df84c28a7..8ac8b48b1 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithCosmosDbYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithCosmosDbYamlSerializationTests.cs @@ -37,7 +37,7 @@ public void YamlSerialization_SerializeAndDeserializeValidConfigForCosmosDb_Succ cosmosDbMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithNetworkInterfaceYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithNetworkInterfaceYamlSerializationTests.cs index 197c40408..4dc2894d3 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithNetworkInterfaceYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithNetworkInterfaceYamlSerializationTests.cs @@ -37,7 +37,7 @@ public void YamlSerialization_SerializeAndDeserializeValidConfigForNetworkInterf networkInterfaceMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithPostgreSqlYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithPostgreSqlYamlSerializationTests.cs index 5ecd97cf8..1df10214b 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithPostgreSqlYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithPostgreSqlYamlSerializationTests.cs @@ -37,7 +37,7 @@ public void YamlSerialization_SerializeAndDeserializeConfigForPostgreSql_Succeed postgreSqlMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithRedisCacheYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithRedisCacheYamlSerializationTests.cs index f5b353297..7fdd7d116 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithRedisCacheYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithRedisCacheYamlSerializationTests.cs @@ -37,7 +37,7 @@ public void YamlSerialization_SerializeAndDeserializeConfigForRedisCache_Succeed redisCacheMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithServiceBusQueueYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithServiceBusQueueYamlSerializationTests.cs index d2b520fcf..ae7a2de75 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithServiceBusQueueYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithServiceBusQueueYamlSerializationTests.cs @@ -37,7 +37,7 @@ public void YamlSerialization_SerializeAndDeserializeValidConfigForServiceBus_Su serviceBusMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithVirtualMachineYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithVirtualMachineYamlSerializationTests.cs index a74a54523..1cd644bef 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithVirtualMachineYamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithVirtualMachineYamlSerializationTests.cs @@ -37,7 +37,7 @@ public void YamlSerialization_SerializeAndDeserializeValidConfigForVirtualMachin virtualMachineMetricDefinition } }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); // Act var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/YamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/YamlSerializationTests.cs index b2c9fdfc6..ed7ec2e7a 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/YamlSerializationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/YamlSerializationTests.cs @@ -3,10 +3,13 @@ using System.Linq; using AutoMapper; using Bogus; +using Moq; using Promitor.Core.Scraping.Configuration.Model.Metrics; +using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Xunit; namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration @@ -15,11 +18,14 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration public class YamlSerializationTests { protected readonly IMapper Mapper; + protected readonly Mock> V2Deserializer; public YamlSerializationTests() { var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); Mapper = mapperConfiguration.CreateMapper(); + + V2Deserializer = new Mock>(); } protected void AssertMetricDefinition(MetricDefinition deserializedMetricDefinition, MetricDefinitionV1 metricDefinition) diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs new file mode 100644 index 000000000..06795143a --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs @@ -0,0 +1,39 @@ +using System.ComponentModel; +using AutoMapper; +using Promitor.Core.Scraping.Configuration.Model; +using Promitor.Core.Scraping.Configuration.Model.Metrics; +using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Mapping +{ + [Category("Unit")] + public class MetricDefinitionV2MappingTests + { + private readonly IMapper _mapper; + + public MetricDefinitionV2MappingTests() + { + var config = new MapperConfiguration(c => c.AddProfile()); + _mapper = config.CreateMapper(); + } + + [Fact] + public void Map_CanMapPrometheusMetricDefinition() + { + // Arrange + var resource = new MetricDefinitionV2 {Name = "promitor_metric", Description = "Metric description"}; + + // Act + var definition = _mapper.Map(resource); + + // Assert + Assert.NotNull(definition.PrometheusMetricDefinition); + Assert.Equal(resource.Name, definition.PrometheusMetricDefinition.Name); + Assert.Equal(resource.Description, definition.PrometheusMetricDefinition.Description); + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/ServiceBusQueueResourceDefinitionV2MappingTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/ServiceBusQueueResourceDefinitionV2MappingTests.cs new file mode 100644 index 000000000..d5e386cec --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/ServiceBusQueueResourceDefinitionV2MappingTests.cs @@ -0,0 +1,29 @@ +using System.ComponentModel; +using AutoMapper; +using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Mapping +{ + [Category("Unit")] + public class ServiceBusQueueResourceDefinitionV2MappingTests + { + [Fact] + public void Map_CanMapServiceBusQueueResource() + { + // Arrange + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapper = mapperConfiguration.CreateMapper(); + + var v2Resource = new ServiceBusQueueResourceV2 {Namespace = "test-namespace"}; + + // Act + var resource = mapper.Map(v2Resource); + + // Assert + Assert.Equal(v2Resource.Namespace, resource.Namespace); + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs index 477464369..5c6a68b53 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs @@ -2,12 +2,14 @@ using System.Collections.Generic; using System.ComponentModel; using System.Linq; -using Microsoft.Azure.Management.Cdn.Fluent.Models; +using AutoMapper; using Microsoft.Azure.Management.Monitor.Fluent.Models; using Microsoft.Extensions.Logging; using Moq; +using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; using Xunit; @@ -18,14 +20,17 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v2 [Category("Unit")] public class V2IntegrationTests { - [Fact] - public void CanDeserializeSerializedModel() + private readonly V2Deserializer _v2Deserializer; + private readonly ConfigurationSerializer _configurationSerializer; + private readonly MetricsDeclarationV2 _metricsDeclaration; + + public V2IntegrationTests() { - // This test creates a v2 model, serializes it to yaml, and then verifies that - // the V2Deserializer can deserialize it. var logger = new Mock(); - var configurationSerializer = new ConfigurationSerializer(logger.Object); - var v2Serializer = new V2Deserializer( + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapper = mapperConfiguration.CreateMapper(); + + _v2Deserializer = new V2Deserializer( new AzureMetadataDeserializer(logger.Object), new MetricDefaultsDeserializer( new AggregationDeserializer(logger.Object), @@ -39,8 +44,9 @@ public void CanDeserializeSerializedModel() new AzureResourceDeserializerFactory(new SecretDeserializer(logger.Object), logger.Object), logger.Object), logger.Object); + _configurationSerializer = new ConfigurationSerializer(logger.Object, mapper, _v2Deserializer); - var declaration = new MetricsDeclarationV2 + _metricsDeclaration = new MetricsDeclarationV2 { AzureMetadata = new AzureMetadataV2 { @@ -122,10 +128,19 @@ public void CanDeserializeSerializedModel() } } }; + } + + [Fact] + public void CanDeserializeSerializedModel() + { + // This test creates a v2 model, serializes it to yaml, and then verifies that + // the V2Deserializer can deserialize it. + + // Arrange + var yaml = _configurationSerializer.Serialize(_metricsDeclaration); // Act - var yaml = configurationSerializer.Serialize(declaration); - var deserializedModel = v2Serializer.Deserialize(YamlUtils.CreateYamlNode(yaml)); + var deserializedModel = _v2Deserializer.Deserialize(YamlUtils.CreateYamlNode(yaml)); // Assert Assert.NotNull(deserializedModel); @@ -166,5 +181,49 @@ public void CanDeserializeSerializedModel() Assert.Equal("orders", serviceBusQueueResource.QueueName); Assert.Equal("promitor-demo-group", serviceBusQueueResource.ResourceGroupName); } + + [Fact] + public void CanDeserializeToRuntimeModel() + { + // Arrange + var yaml = _configurationSerializer.Serialize(_metricsDeclaration); + + // Act + var runtimeModel = _configurationSerializer.Deserialize(yaml); + + // Assert + Assert.NotNull(runtimeModel); + + var firstMetric = runtimeModel.Metrics.ElementAt(0); + Assert.Equal(ResourceType.Generic, firstMetric.ResourceType); + Assert.Equal("promitor_demo_generic_queue_size", firstMetric.PrometheusMetricDefinition.Name); + Assert.Equal("Amount of active messages of the 'orders' queue (determined with Generic provider)", firstMetric.PrometheusMetricDefinition.Description); + Assert.Collection(firstMetric.Resources, + r => + { + var definition = Assert.IsType(r); + Assert.Equal("EntityName eq 'orders'", definition.Filter); + Assert.Equal("Microsoft.ServiceBus/namespaces/promitor-messaging", definition.ResourceUri); + }, + r => + { + var definition = Assert.IsType(r); + Assert.Equal("EntityName eq 'accounts'", definition.Filter); + Assert.Equal("Microsoft.ServiceBus/namespaces/promitor-messaging", definition.ResourceUri); + }); + + var secondMetric = runtimeModel.Metrics.ElementAt(1); + Assert.Equal(ResourceType.ServiceBusQueue, secondMetric.ResourceType); + Assert.Equal("promitor_demo_servicebusqueue_queue_size", secondMetric.PrometheusMetricDefinition.Name); + Assert.Equal("Amount of active messages of the 'orders' queue (determined with ServiceBusQueue provider)", secondMetric.PrometheusMetricDefinition.Description); + Assert.Collection(secondMetric.Resources, + r => + { + var definition = Assert.IsType(r); + Assert.Equal("promitor-messaging", definition.Namespace); + Assert.Equal("orders", definition.QueueName); + Assert.Equal("promitor-demo-group", definition.ResourceGroupName); + }); + } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs b/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs index 506d168c5..4ecbdad47 100644 --- a/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs +++ b/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs @@ -8,7 +8,8 @@ public class MetricsDeclarationProviderStub : MetricsDeclarationProvider { private readonly string _rawMetricsDeclaration; - public MetricsDeclarationProviderStub(string rawMetricsDeclaration, IMapper mapper) : base(configuration: null, logger: NullLogger.Instance, mapper: mapper) + // TODO: Pass in actual deserializer + public MetricsDeclarationProviderStub(string rawMetricsDeclaration, IMapper mapper) : base(configuration: null, logger: NullLogger.Instance, mapper: mapper, v2Deserializer: null) { _rawMetricsDeclaration = rawMetricsDeclaration; } From 985a15b96d1684908367b7cb5bc9ed4742e292b3 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Wed, 21 Aug 2019 20:46:47 +0100 Subject: [PATCH 28/32] Remove v1 config objects --- .../Serialization/ConfigurationSerializer.cs | 5 - .../Serialization/Enum/SpecVersion.cs | 3 +- .../v1/Core/AggregationDeserializer.cs | 34 ---- .../v1/Core/AzureMetadataDeserializer.cs | 32 --- .../AzureMetricConfigurationDeserializer.cs | 41 ---- .../v1/Core/MetricAggregationDeserializer.cs | 40 ---- .../v1/Core/MetricDefaultsDeserializer.cs | 39 ---- .../v1/Core/MetricDeserializer.cs | 111 ---------- .../v1/Core/MetricsDeserializer.cs | 31 --- .../v1/Core/ScrapingDeserializer.cs | 29 --- .../v1/Core/SecretDeserializer.cs | 32 --- .../Serialization/v1/Core/V1Deserializer.cs | 54 ----- .../v1/Mapping/V1MappingProfile.cs | 58 ------ .../Serialization/v1/Model/AggregationV1.cs | 12 -- .../Serialization/v1/Model/AzureMetadataV1.cs | 9 - .../v1/Model/AzureMetricConfigurationV1.cs | 15 -- .../v1/Model/MetricAggregationV1.cs | 18 -- .../v1/Model/MetricDefaultsV1.cs | 9 - .../v1/Model/Metrics/MetricDefinitionV1.cs | 44 ---- .../ContainerInstanceMetricDefinitionV1.cs | 10 - .../ContainerRegistryMetricDefinitionV1.cs | 10 - .../CosmosDbMetricDefinitionV1.cs | 11 - .../GenericAzureMetricDefinitionV1.cs | 11 - .../NetworkInterfaceMetricDefinitionV1.cs | 10 - .../PostgreSqlMetricDefinitionV1.cs | 10 - .../RedisCacheMetricDefinitionV1.cs | 10 - .../ServiceBusQueueMetricDefinitionV1.cs | 11 - .../StorageQueueMetricDefinitionV1.cs | 12 -- .../VirtualMachineMetricDefinitionV1.cs | 10 - .../v1/Model/Metrics/SecretV1.cs | 8 - .../v1/Model/MetricsDeclarationV1.cs | 17 -- .../Serialization/v1/Model/ScrapingV1.cs | 7 - .../ContainerInstanceMetricDeserializer.cs | 23 --- .../ContainerRegistryMetricDeserializer.cs | 23 --- .../Providers/CosmosDbMetricDeserializer.cs | 24 --- .../GenericAzureMetricDeserializer.cs | 29 --- .../NetworkInterfaceMetricDeserializer.cs | 23 --- .../Providers/PostgreSqlMetricDeserializer.cs | 28 --- .../Providers/RedisCacheMetricDeserializer.cs | 28 --- .../ServiceBusQueueMetricDeserializer.cs | 26 --- .../StorageQueueMetricDeserializer.cs | 38 ---- .../VirtualMachineMetricDeserializer.cs | 23 --- .../Serialization/v2/Core/V2Deserializer.cs | 6 +- .../v2/Model/AzureMetricConfigurationV2.cs | 2 +- .../v2/Model/MetricDefaultsV2.cs | 4 +- .../v2/Model/MetricDefinitionV2.cs | 8 +- .../v2/Model/MetricsDeclarationV2.cs | 2 +- .../Factories/MetricDeserializerFactory.cs | 38 ---- src/Promitor.Scraper.Host/Startup.cs | 4 +- .../Metrics/v1/MetricsDeclarationBuilder.cs | 190 +++++++++++++----- .../Serialization/AutoMapperTests.cs | 4 +- .../Mapping/MetricDefinitionV1MappingTests.cs | 64 ------ ...AzureStorageQueueYamlSerializationTests.cs | 98 --------- ...ContainerInstanceYamlSerializationTests.cs | 88 -------- ...ContainerRegistryYamlSerializationTests.cs | 84 -------- ...ationWithCosmosDbYamlSerializationTests.cs | 84 -------- ...hNetworkInterfaceYamlSerializationTests.cs | 83 -------- ...ionWithPostgreSqlYamlSerializationTests.cs | 84 -------- ...ionWithRedisCacheYamlSerializationTests.cs | 84 -------- ...thServiceBusQueueYamlSerializationTests.cs | 90 --------- ...ithVirtualMachineYamlSerializationTests.cs | 89 -------- .../YamlSerializationTests.cs | 129 ------------ .../v2/Core/V2DeserializerTests.cs | 20 +- .../Mapping/MetricDefinitionV2MappingTests.cs | 3 - .../Stubs/MetricsDeclarationProviderStub.cs | 28 ++- ...alMetricsDeclarationValidationStepTests.cs | 8 +- ...ueMetricsDeclarationValidationStepTests.cs | 4 +- ...ceMetricsDeclarationValidationStepTests.cs | 4 +- ...ryMetricsDeclarationValidationStepTests.cs | 4 +- ...DbMetricsDeclarationValidationStepTests.cs | 6 +- ...icMetricsDeclarationValidationStepTests.cs | 4 +- ...eMetricsDeclarationValidationStepsTests.cs | 4 +- ...qlMetricsDeclarationValidationStepTests.cs | 4 +- ...heMetricsDeclarationValidationStepTests.cs | 4 +- ...ueMetricsDeclarationValidationStepTests.cs | 4 +- ...eMetricsDeclarationValidationStepsTests.cs | 4 +- 76 files changed, 216 insertions(+), 2138 deletions(-) delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricsDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetadataV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetricConfigurationV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefaultsV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/MetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ContainerInstanceMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ContainerRegistryMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/CosmosDbMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/GenericAzureMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/NetworkInterfaceMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/PostgreSqlMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/RedisCacheMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ServiceBusQueueMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/StorageQueueMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/VirtualMachineMetricDefinitionV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/SecretV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ScrapingV1.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericAzureMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineMetricDeserializer.cs delete mode 100644 src/Promitor.Core.Scraping/Factories/MetricDeserializerFactory.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/Mapping/MetricDefinitionV1MappingTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithAzureStorageQueueYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerInstanceYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerRegistryYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithCosmosDbYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithNetworkInterfaceYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithPostgreSqlYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithRedisCacheYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithServiceBusQueueYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithVirtualMachineYamlSerializationTests.cs delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/YamlSerializationTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs index 4613768eb..2e381ae3a 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs @@ -57,11 +57,6 @@ private MetricsDeclaration InterpretYamlStream(YamlStream metricsDeclarationYaml switch (specVersion) { case SpecVersion.v1: - var v1Serializer = new v1.Core.V1Deserializer(_logger); - var v1Config = v1Serializer.Deserialize(rootNode); - - return _mapper.Map(v1Config); - case SpecVersion.v2: var v2Config = _v2Deserializer.Deserialize(rootNode); return _mapper.Map(v2Config); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs index 44d0007f1..b5141047d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs @@ -3,8 +3,7 @@ public enum SpecVersion { // ReSharper disable InconsistentNaming - v1, - v2 + v1 // ReSharper restore InconsistentNaming } } \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs deleted file mode 100644 index 2978f5e3e..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal class AggregationDeserializer : Deserializer - { - internal AggregationDeserializer(ILogger logger) : base(logger) - { - } - - public override AggregationV1 Deserialize(YamlMappingNode node) - { - var aggregation = new AggregationV1(); - - var interval = TimeSpan.FromMinutes(5); - if (node.Children.ContainsKey("interval")) - { - var rawIntervalNode = node.Children[new YamlScalarNode("interval")]; - interval = TimeSpan.Parse(rawIntervalNode.ToString()); - } - else - { - Logger.LogWarning("No default aggregation was configured, falling back to {AggregationInterval}", interval.ToString("g")); - } - - aggregation.Interval = interval; - - return aggregation; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs deleted file mode 100644 index 50663673f..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs +++ /dev/null @@ -1,32 +0,0 @@ -using GuardNet; -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal class AzureMetadataDeserializer : Deserializer - { - internal AzureMetadataDeserializer(ILogger logger) : base(logger) - { - } - - public override AzureMetadataV1 Deserialize(YamlMappingNode node) - { - Guard.NotNull(node, nameof(node)); - - var tenantId = node.Children[new YamlScalarNode("tenantId")]; - var subscriptionId = node.Children[new YamlScalarNode("subscriptionId")]; - var resourceGroupName = node.Children[new YamlScalarNode("resourceGroupName")]; - - var azureMetadata = new AzureMetadataV1 - { - TenantId = tenantId?.ToString(), - SubscriptionId = subscriptionId?.ToString(), - ResourceGroupName = resourceGroupName?.ToString() - }; - - return azureMetadata; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs deleted file mode 100644 index 510960df5..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs +++ /dev/null @@ -1,41 +0,0 @@ -using GuardNet; -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal class AzureMetricConfigurationDeserializer : Deserializer - { - private readonly MetricAggregationDeserializer _metricAggregationDeserializer; - private readonly YamlScalarNode _metricNode = new YamlScalarNode("metricName"); - private readonly YamlScalarNode _aggregationNode = new YamlScalarNode("aggregation"); - - internal AzureMetricConfigurationDeserializer(ILogger logger) : base(logger) - { - _metricAggregationDeserializer = new MetricAggregationDeserializer(logger); - } - - public override AzureMetricConfigurationV1 Deserialize(YamlMappingNode node) - { - Guard.NotNull(node, nameof(node)); - - var metricName = node.Children[_metricNode]; - - MetricAggregationV1 metricAggregation = null; - if (node.Children.ContainsKey(_aggregationNode)) - { - var aggregationNode = (YamlMappingNode) node.Children[_aggregationNode]; - metricAggregation = _metricAggregationDeserializer.Deserialize(aggregationNode); - } - - var azureMetricConfiguration = new AzureMetricConfigurationV1 - { - MetricName = metricName?.ToString(), - Aggregation = metricAggregation - }; - - return azureMetricConfiguration; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs deleted file mode 100644 index db963823f..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using Microsoft.Azure.Management.Monitor.Fluent.Models; -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal class MetricAggregationDeserializer : Deserializer - { - private readonly YamlScalarNode _typeNode = new YamlScalarNode("type"); - private readonly YamlScalarNode _intervalNode = new YamlScalarNode("interval"); - - internal MetricAggregationDeserializer(ILogger logger) : base(logger) - { - } - - public override MetricAggregationV1 Deserialize(YamlMappingNode node) - { - var aggregation = new MetricAggregationV1(); - - if (node.Children.ContainsKey(_intervalNode.Value)) - { - var rawIntervalNode = node.Children[_intervalNode.Value]; - aggregation.Interval = TimeSpan.Parse(rawIntervalNode.ToString()); - } - - if (node.Children.ContainsKey(_typeNode.Value)) - { - var rawTypeNode = node.Children[_typeNode]; - if (System.Enum.TryParse(rawTypeNode?.ToString(), out AggregationType aggregationType)) - { - aggregation.Type = aggregationType; - } - } - - return aggregation; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs deleted file mode 100644 index 0969bd5ae..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs +++ /dev/null @@ -1,39 +0,0 @@ -using GuardNet; -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal class MetricDefaultsDeserializer : Deserializer - { - internal MetricDefaultsDeserializer(ILogger logger) : base(logger) - { - } - - public override MetricDefaultsV1 Deserialize(YamlMappingNode node) - { - Guard.NotNull(node, nameof(node)); - - var metricDefaults = new MetricDefaultsV1(); - - if (node.Children.ContainsKey("aggregation")) - { - var metricDefaultsNode = (YamlMappingNode)node.Children[new YamlScalarNode("aggregation")]; - var metricDefaultsSerializer = new AggregationDeserializer(Logger); - var aggregationBuilder = metricDefaultsSerializer.Deserialize(metricDefaultsNode); - metricDefaults.Aggregation = aggregationBuilder; - } - - if (node.Children.ContainsKey(@"scraping")) - { - var scrapingNode = (YamlMappingNode)node.Children[new YamlScalarNode("scraping")]; - var scrapingDeserializer = new ScrapingDeserializer(Logger); - var scrapingBuilder = scrapingDeserializer.Deserialize(scrapingNode); - metricDefaults.Scraping = scrapingBuilder; - } - - return metricDefaults; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDeserializer.cs deleted file mode 100644 index 6e07ae48b..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDeserializer.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System; -using System.Collections.Generic; -using GuardNet; -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal abstract class MetricDeserializer - { - protected ILogger Logger { get; private set; } - - internal MetricDeserializer WithLogger(ILogger logger) - { - Guard.NotNull(logger, nameof(logger)); - - Logger = logger; - return this; - } - - internal abstract MetricDefinitionV1 Deserialize(YamlMappingNode metricNode); - - protected virtual TMetricDefinition DeserializeMetricDefinition(YamlMappingNode metricNode) - where TMetricDefinition : MetricDefinitionV1, new() - { - Guard.NotNull(metricNode, nameof(metricNode)); - - var name = metricNode.Children[new YamlScalarNode("name")]; - var description = metricNode.Children[new YamlScalarNode("description")]; - - var azureMetricConfigurationNode = (YamlMappingNode)metricNode.Children[new YamlScalarNode("azureMetricConfiguration")]; - - var azureMetricConfigurationDeserializer = new AzureMetricConfigurationDeserializer(Logger); - var azureMetricConfiguration = azureMetricConfigurationDeserializer.Deserialize(azureMetricConfigurationNode); - var metricDefinition = new TMetricDefinition - { - Name = name?.ToString(), - Description = description?.ToString(), - AzureMetricConfiguration = azureMetricConfiguration, - ResourceGroupName = GetResourceGroupName(metricNode) - }; - - DeserializeScraping(metricNode, metricDefinition); - DeserializeCustomLabels(metricNode, metricDefinition); - - return metricDefinition; - } - - private static string GetResourceGroupName(YamlMappingNode metricNode) - { - if (metricNode.Children.TryGetValue("resourceGroupName", out var resourceGroupNode)) - { - return resourceGroupNode.ToString(); - } - - return null; - } - - private static void DeserializeScraping(YamlMappingNode metricNode, TMetricDefinition metricDefinition) where TMetricDefinition : MetricDefinitionV1, new() - { - if (metricNode.Children.ContainsKey(@"scraping") == false) - { - return; - } - - var scrapingNode = (YamlMappingNode)metricNode.Children[new YamlScalarNode(@"scraping")]; - try - { - var scrapingIntervalNode = scrapingNode?.Children[new YamlScalarNode(@"schedule")]; - - if (scrapingIntervalNode != null) - { - metricDefinition.Scraping.Schedule = scrapingIntervalNode.ToString(); - } - } - catch (KeyNotFoundException) - { - // happens when the YAML doesn't have the properties in it which is fine because the object - // will get a default interval of 'null' - } - } - - private static void DeserializeCustomLabels(YamlMappingNode metricNode, TMetricDefinition metricDefinition) where TMetricDefinition : MetricDefinitionV1, new() - { - if (metricNode.Children.ContainsKey(@"labels") == false) - { - return; - } - - var labelNode = (YamlMappingNode)metricNode.Children[new YamlScalarNode(@"labels")]; - foreach (KeyValuePair customLabel in labelNode.Children) - { - var labelName = customLabel.Key.ToString(); - var labelValue = customLabel.Value.ToString(); - - if (metricDefinition.Labels.ContainsKey(labelName)) - { - if (metricDefinition.Labels[labelName] == labelValue) - { - continue; - } - - throw new Exception($"Label '{labelName}' is already defined with value '{metricDefinition.Labels[labelName]}' instead of '{labelValue}'"); - } - - metricDefinition.Labels.Add(labelName, labelValue); - } - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricsDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricsDeserializer.cs deleted file mode 100644 index fbb0497bb..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricsDeserializer.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Factories; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal class MetricsDeserializer : Deserializer - { - internal MetricsDeserializer(ILogger logger) : base(logger) - { - } - - public override MetricDefinitionV1 Deserialize(YamlMappingNode node) - { - var rawResourceType = node.Children[new YamlScalarNode("resourceType")]; - - if (!System.Enum.TryParse(rawResourceType.ToString(), out var resourceType)) - { - throw new ArgumentException($@"Unknown 'resourceType' value in metric configuration: {rawResourceType}"); - } - - return MetricDeserializerFactory - .GetDeserializerFor(resourceType) - .WithLogger(Logger) - .Deserialize(node); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs deleted file mode 100644 index e6fda3bc2..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.Extensions.Logging; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal class ScrapingDeserializer : Deserializer - { - internal ScrapingDeserializer(ILogger logger) : base(logger) - { - } - - public override Model.ScrapingV1 Deserialize(YamlMappingNode node) - { - var scraping = new Model.ScrapingV1(); - - if (node.Children.ContainsKey("schedule")) - { - var rawScheduleNode = node.Children[new YamlScalarNode("schedule")]; - scraping.Schedule = rawScheduleNode.ToString(); - } - else - { - Logger.LogError("No default metric scraping schedule was configured!"); - } - - return scraping; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs deleted file mode 100644 index cb4b5bd88..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - internal class SecretDeserializer : Deserializer - { - internal SecretDeserializer(ILogger logger) : base(logger) - { - } - - public override SecretV1 Deserialize(YamlMappingNode node) - { - var secret = new SecretV1(); - - if (node.Children.ContainsKey("rawValue")) - { - var rawValueNode = node.Children[new YamlScalarNode("rawValue")]; - secret.RawValue = rawValueNode.ToString(); - } - - if (node.Children.ContainsKey("environmentVariable")) - { - var rawEnvironmentVariable = node.Children[new YamlScalarNode("environmentVariable")]; - secret.EnvironmentVariable = rawEnvironmentVariable.ToString(); - } - - return secret; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs deleted file mode 100644 index 8bfd87f46..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Collections.Generic; -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core -{ - public class V1Deserializer - { - public V1Deserializer(ILogger logger) - { - Logger = logger; - } - - public ILogger Logger { get; } - - public MetricsDeclarationV1 Deserialize(YamlMappingNode rootNode) - { - AzureMetadataV1 azureMetadata = null; - if (rootNode.Children.ContainsKey("azureMetadata")) - { - var azureMetadataNode = (YamlMappingNode) rootNode.Children[new YamlScalarNode("azureMetadata")]; - var azureMetadataSerializer = new AzureMetadataDeserializer(Logger); - azureMetadata = azureMetadataSerializer.Deserialize(azureMetadataNode); - } - - MetricDefaultsV1 metricDefaults = null; - if (rootNode.Children.ContainsKey("metricDefaults")) - { - var metricDefaultsNode = (YamlMappingNode) rootNode.Children[new YamlScalarNode("metricDefaults")]; - var metricDefaultsSerializer = new MetricDefaultsDeserializer(Logger); - metricDefaults = metricDefaultsSerializer.Deserialize(metricDefaultsNode); - } - - List metrics = null; - if (rootNode.Children.ContainsKey("metrics")) - { - var metricsNode = (YamlSequenceNode) rootNode.Children[new YamlScalarNode("metrics")]; - var metricsDeserializer = new MetricsDeserializer(Logger); - metrics = metricsDeserializer.Deserialize(metricsNode); - } - - var metricsDeclaration = new MetricsDeclarationV1 - { - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = metrics - }; - - return metricsDeclaration; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs deleted file mode 100644 index e28e4afe2..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Collections.Generic; -using AutoMapper; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping -{ - public class V1MappingProfile : Profile - { - public V1MappingProfile() - { - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap() - .ForCtorParam("ns", o => o.MapFrom(s => s.Namespace)); - CreateMap(); - CreateMap(); - - CreateMap(); - - // MetricDefinitionV1 gets expanded into several properties on MetricDefinition - CreateMap() - .ForMember(m => m.PrometheusMetricDefinition, o => o.MapFrom(v1 => v1)) - .ForMember(m => m.ResourceType, o => o.MapFrom(v1 => v1.ResourceType)) - .ForMember(m => m.Resources, o => o.MapFrom(v1 => new List {v1})); - - CreateMap() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include(); - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs deleted file mode 100644 index 2cfcfaeb6..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model -{ - public class AggregationV1 - { - /// - /// The time period the metric should be aggregated over. - /// - public TimeSpan? Interval { get; set; } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetadataV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetadataV1.cs deleted file mode 100644 index 6431a7788..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetadataV1.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model -{ - public class AzureMetadataV1 - { - public string ResourceGroupName { get; set; } - public string SubscriptionId { get; set; } - public string TenantId { get; set; } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetricConfigurationV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetricConfigurationV1.cs deleted file mode 100644 index 52de2e704..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetricConfigurationV1.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model -{ - public class AzureMetricConfigurationV1 - { - /// - /// Name of the Azure Monitor metric to query - /// - public string MetricName { get; set; } - - /// - /// Configuration on how to aggregate the metric - /// - public MetricAggregationV1 Aggregation { get; set; } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs deleted file mode 100644 index 553d0f4b9..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using Microsoft.Azure.Management.Monitor.Fluent.Models; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model -{ - public class MetricAggregationV1 - { - /// - /// The time period the metric should be aggregated over. - /// - public TimeSpan? Interval { get; set; } - - /// - /// Type of aggregation to query the Azure Monitor metric - /// - public AggregationType Type { get; set; } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefaultsV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefaultsV1.cs deleted file mode 100644 index 972a82af4..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefaultsV1.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model -{ - public class MetricDefaultsV1 - { - public AggregationV1 Aggregation { get; set; } = new AggregationV1(); - - public ScrapingV1 Scraping { get; set; } = new ScrapingV1(); - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/MetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/MetricDefinitionV1.cs deleted file mode 100644 index aa59ac63a..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/MetricDefinitionV1.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics -{ - public abstract class MetricDefinitionV1 - { - /// - /// Configuration about the Azure Monitor metric to scrape - /// - public AzureMetricConfigurationV1 AzureMetricConfiguration { get; set; } = new AzureMetricConfigurationV1(); - - /// - /// Description concerning metric that will be made available in the scraping endpoint - /// - public string Description { get; set; } - - /// - /// Name of the metric to use when exposing in the scraping endpoint - /// - public string Name { get; set; } - - /// - /// Specify a resource group to scrape that defers from the default resource group. - /// This enables you to do multi-resource group scraping with one configuration file. - /// - public string ResourceGroupName { get; set; } - - /// - /// Type of resource that is configured - /// - public abstract ResourceType ResourceType { get; } - - /// - /// Collection of custom labels to add to every metric - /// - public Dictionary Labels { get; set; } = new Dictionary(); - - /// - /// Gets or sets the scraping model. - /// - public ScrapingV1 Scraping { get; set; } = new ScrapingV1(); - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ContainerInstanceMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ContainerInstanceMetricDefinitionV1.cs deleted file mode 100644 index 581aa98cd..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ContainerInstanceMetricDefinitionV1.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class ContainerInstanceMetricDefinitionV1 : MetricDefinitionV1 - { - public string ContainerGroup { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.ContainerInstance; - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ContainerRegistryMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ContainerRegistryMetricDefinitionV1.cs deleted file mode 100644 index 203301a6d..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ContainerRegistryMetricDefinitionV1.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class ContainerRegistryMetricDefinitionV1 : MetricDefinitionV1 - { - public string RegistryName { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.ContainerRegistry; - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/CosmosDbMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/CosmosDbMetricDefinitionV1.cs deleted file mode 100644 index dc0ec12f8..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/CosmosDbMetricDefinitionV1.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class CosmosDbMetricDefinitionV1 : MetricDefinitionV1 - { - public string DbName { get; set; } - - public override ResourceType ResourceType { get; } = ResourceType.CosmosDb; - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/GenericAzureMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/GenericAzureMetricDefinitionV1.cs deleted file mode 100644 index 0a61150cb..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/GenericAzureMetricDefinitionV1.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class GenericAzureMetricDefinitionV1 : MetricDefinitionV1 - { - public string Filter { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.Generic; - public string ResourceUri { get; set; } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/NetworkInterfaceMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/NetworkInterfaceMetricDefinitionV1.cs deleted file mode 100644 index d350e7d48..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/NetworkInterfaceMetricDefinitionV1.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class NetworkInterfaceMetricDefinitionV1 : MetricDefinitionV1 - { - public string NetworkInterfaceName { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.NetworkInterface; - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/PostgreSqlMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/PostgreSqlMetricDefinitionV1.cs deleted file mode 100644 index 7be0e1bbc..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/PostgreSqlMetricDefinitionV1.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class PostgreSqlMetricDefinitionV1 : MetricDefinitionV1 - { - public string ServerName { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.PostgreSql; - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/RedisCacheMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/RedisCacheMetricDefinitionV1.cs deleted file mode 100644 index 849202bb6..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/RedisCacheMetricDefinitionV1.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class RedisCacheMetricDefinitionV1 : MetricDefinitionV1 - { - public string CacheName { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.RedisCache; - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ServiceBusQueueMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ServiceBusQueueMetricDefinitionV1.cs deleted file mode 100644 index 7148bcb60..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/ServiceBusQueueMetricDefinitionV1.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class ServiceBusQueueMetricDefinitionV1 : MetricDefinitionV1 - { - public string Namespace { get; set; } - public string QueueName { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.ServiceBusQueue; - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/StorageQueueMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/StorageQueueMetricDefinitionV1.cs deleted file mode 100644 index 4d5e99f96..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/StorageQueueMetricDefinitionV1.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class StorageQueueMetricDefinitionV1 : MetricDefinitionV1 - { - public string AccountName { get; set; } - public string QueueName { get; set; } - public SecretV1 SasToken { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.StorageQueue; - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/VirtualMachineMetricDefinitionV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/VirtualMachineMetricDefinitionV1.cs deleted file mode 100644 index 5088becf5..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/ResourceTypes/VirtualMachineMetricDefinitionV1.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Model; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes -{ - public class VirtualMachineMetricDefinitionV1 : MetricDefinitionV1 - { - public string VirtualMachineName { get; set; } - public override ResourceType ResourceType { get; } = ResourceType.VirtualMachine; - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/SecretV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/SecretV1.cs deleted file mode 100644 index 5b474180b..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/Metrics/SecretV1.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics -{ - public class SecretV1 - { - public string RawValue { get; set; } - public string EnvironmentVariable { get; set; } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs deleted file mode 100644 index 401ae561c..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model -{ - public class MetricsDeclarationV1 - { - public string Version { get; set; } = SpecVersion.v1.ToString(); - - public AzureMetadataV1 AzureMetadata { get; set; } = new AzureMetadataV1(); - - public MetricDefaultsV1 MetricDefaults { get; set; } = new MetricDefaultsV1(); - - public List Metrics { get; set; } = new List(); - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ScrapingV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ScrapingV1.cs deleted file mode 100644 index c01494265..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ScrapingV1.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model -{ - public class ScrapingV1 - { - public string Schedule { get; set; } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceMetricDeserializer.cs deleted file mode 100644 index 5122faede..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceMetricDeserializer.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - internal class ContainerInstanceMetricDeserializer : MetricDeserializer - { - /// Deserializes the specified Container Instances metric node from the YAML configuration file. - /// The metric node to deserialize to Container Instances configuration - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - - var containerGroup = metricNode.Children[new YamlScalarNode("containerGroup")]; - metricDefinition.ContainerGroup = containerGroup?.ToString(); - - return metricDefinition; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryMetricDeserializer.cs deleted file mode 100644 index 7825a788e..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryMetricDeserializer.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - internal class ContainerRegistryMetricDeserializer : MetricDeserializer - { - /// Deserializes the specified Container Registry metric node from the YAML configuration file. - /// The metric node to deserialize to Container Registry configuration - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - - var registryName = metricNode.Children[new YamlScalarNode("registryName")]; - metricDefinition.RegistryName = registryName?.ToString(); - - return metricDefinition; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbMetricDeserializer.cs deleted file mode 100644 index ca24d7980..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbMetricDeserializer.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - internal class CosmosDbMetricDeserializer : MetricDeserializer - { - /// Deserializes the specified Cosmos DB metric node from the YAML configuration file. - /// The metric node to deserialize to Cosmos DB configuration - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - - var dbName = metricNode.Children[new YamlScalarNode("dbName")]; - - metricDefinition.DbName = dbName?.ToString(); - - return metricDefinition; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericAzureMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericAzureMetricDeserializer.cs deleted file mode 100644 index 32f6ca613..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericAzureMetricDeserializer.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - internal class GenericAzureMetricDeserializer : MetricDeserializer - { - /// Deserializes the specified Generic Azure metric node from the YAML configuration file. - /// The metric node to deserialize to query an arbitrary Azure resource - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - - if (metricNode.Children.TryGetValue(new YamlScalarNode(value: "filter"), out var filterNode)) - { - metricDefinition.Filter = filterNode?.ToString(); - } - - var resourceUri = metricNode.Children[new YamlScalarNode(value: "resourceUri")]; - - metricDefinition.ResourceUri = resourceUri?.ToString(); - - return metricDefinition; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceMetricDeserializer.cs deleted file mode 100644 index 841ad9674..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceMetricDeserializer.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - internal class NetworkInterfaceMetricDeserializer : MetricDeserializer - { - /// Deserializes the specified Network Interface metric node from the YAML configuration file. - /// The metric node containing 'networkInterfaceName' parameter pointing to an instance of a Network Interface - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - var networkInterfaceName = metricNode.Children[new YamlScalarNode("networkInterfaceName")]; - - metricDefinition.NetworkInterfaceName = networkInterfaceName?.ToString(); - - return metricDefinition; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlMetricDeserializer.cs deleted file mode 100644 index 381c4ba5f..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlMetricDeserializer.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - /// - /// Defines a deserializer for the PostgreSQL Server resource type - /// - internal class PostgreSqlMetricDeserializer : MetricDeserializer - { - /// - /// Deserializes the specified PostgreSQL Server metric node from the YAML configuration file. - /// - /// The metric node to deserialize to PostgreSQL Server configuration - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - - var serverName = metricNode.Children[new YamlScalarNode("serverName")]; - metricDefinition.ServerName = serverName?.ToString(); - - return metricDefinition; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheMetricDeserializer.cs deleted file mode 100644 index 212ff29ee..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheMetricDeserializer.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - /// - /// Defines a deserializer for the Redis Cache resource type - /// - internal class RedisCacheMetricDeserializer : MetricDeserializer - { - /// - /// Deserializes the specified Redis Cache metric node from the YAML configuration file. - /// - /// The metric node to deserialize to Redis Cache configuration - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - - var cacheName = metricNode.Children[new YamlScalarNode("cacheName")]; - metricDefinition.CacheName = cacheName?.ToString(); - - return metricDefinition; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueMetricDeserializer.cs deleted file mode 100644 index 0333b9594..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueMetricDeserializer.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - internal class ServiceBusQueueMetricDeserializer : MetricDeserializer - { - /// Deserializes the specified Service Bus Queue metric node from the YAML configuration file. - /// The metric node to deserialize to Service Bus queue - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - - var queueName = metricNode.Children[new YamlScalarNode("queueName")]; - var namespaceName = metricNode.Children[new YamlScalarNode("namespace")]; - - metricDefinition.QueueName = queueName?.ToString(); - metricDefinition.Namespace = namespaceName?.ToString(); - - return metricDefinition; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueMetricDeserializer.cs deleted file mode 100644 index bce8a98e0..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueMetricDeserializer.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - internal class StorageQueueMetricDeserializer : MetricDeserializer - { - /// Deserializes the specified Storage Queue metric node from the YAML configuration file. - /// The metric node to deserialize to Storage queue configuration - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - var accountName = metricNode.Children[new YamlScalarNode("accountName")]; - var queueName = metricNode.Children[new YamlScalarNode("queueName")]; - - metricDefinition.AccountName = accountName?.ToString(); - metricDefinition.QueueName = queueName?.ToString(); - - var secretDeserializer = new SecretDeserializer(Logger); - - if (metricNode.Children.ContainsKey("sasToken")) - { - var sasTokenNode = (YamlMappingNode)metricNode.Children["sasToken"]; - metricDefinition.SasToken = secretDeserializer.Deserialize(sasTokenNode); - } - else - { - Logger.LogError($"No SAS token was configured for Azure Storage Account '{accountName}'"); - } - - return metricDefinition; - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineMetricDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineMetricDeserializer.cs deleted file mode 100644 index a8aa48591..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineMetricDeserializer.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using YamlDotNet.RepresentationModel; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers -{ - internal class VirtualMachineMetricDeserializer : MetricDeserializer - { - /// Deserializes the specified Virtual Machine metric node from the YAML configuration file. - /// The metric node containing 'virtualMachineName' parameter pointing to an instance of a Virtual Machine - /// A new object (strongly typed as a ) - internal override MetricDefinitionV1 Deserialize(YamlMappingNode metricNode) - { - var metricDefinition = base.DeserializeMetricDefinition(metricNode); - var virtualMachineName = metricNode.Children[new YamlScalarNode("virtualMachineName")]; - - metricDefinition.VirtualMachineName = virtualMachineName?.ToString(); - - return metricDefinition; - } - } -} \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs index 6567bf61f..d3f6cae6f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs @@ -32,7 +32,7 @@ public override MetricsDeclarationV2 Deserialize(YamlMappingNode rootNode) return new MetricsDeclarationV2 { - Version = SpecVersion.v2.ToString(), + Version = SpecVersion.v1.ToString(), AzureMetadata = azureMetadata, MetricDefaults = metricDefaults, Metrics = metrics @@ -47,9 +47,9 @@ private static void ValidateVersion(YamlMappingNode rootNode) throw new System.Exception("No 'version' element was found in the metrics config"); } - if (versionNode.ToString() != SpecVersion.v2.ToString()) + if (versionNode.ToString() != SpecVersion.v1.ToString()) { - throw new System.Exception($"A 'version' element with a value of '{SpecVersion.v2}' was expected but the value '{versionNode}' was found"); + throw new System.Exception($"A 'version' element with a value of '{SpecVersion.v1}' was expected but the value '{versionNode}' was found"); } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs index ebeab8f18..15dafcbce 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs @@ -10,6 +10,6 @@ public class AzureMetricConfigurationV2 /// /// The settings for how the metric should be aggregated before being returned from Azure. /// - public MetricAggregationV2 Aggregation { get; set; } + public MetricAggregationV2 Aggregation { get; set; } = new MetricAggregationV2(); } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs index 837f2987c..9230fbd31 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs @@ -8,11 +8,11 @@ public class MetricDefaultsV2 /// /// The default aggregation settings to use when querying metrics from Azure. /// - public AggregationV2 Aggregation { get; set; } + public AggregationV2 Aggregation { get; set; } = new AggregationV2(); /// /// The default scraping settings. /// - public ScrapingV2 Scraping { get; set; } + public ScrapingV2 Scraping { get; set; } = new ScrapingV2(); } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs index 7cd6071d2..72ae64a77 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs @@ -27,21 +27,21 @@ public class MetricDefinitionV2 /// /// Any prometheus labels that should be added to the metric. /// - public Dictionary Labels { get; set; } + public Dictionary Labels { get; set; } = new Dictionary(); /// /// Contains the configuration used when querying Azure metrics. /// - public AzureMetricConfigurationV2 AzureMetricConfiguration { get; set; } + public AzureMetricConfigurationV2 AzureMetricConfiguration { get; set; } = new AzureMetricConfigurationV2(); /// /// Allows a custom scraping schedule to be specified for the metric. /// - public ScrapingV2 Scraping { get; set; } + public ScrapingV2 Scraping { get; set; } = new ScrapingV2(); /// /// The resources to be scraped. /// - public List Resources { get; set; } + public List Resources { get; set; } = new List(); } } \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs index 13ed779d1..07920cdec 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs @@ -9,7 +9,7 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model /// public class MetricsDeclarationV2 { - public string Version { get; set; } = SpecVersion.v2.ToString(); + public string Version { get; set; } = SpecVersion.v1.ToString(); public AzureMetadataV2 AzureMetadata { get; set; } public MetricDefaultsV2 MetricDefaults { get; set; } public List Metrics { get; set; } diff --git a/src/Promitor.Core.Scraping/Factories/MetricDeserializerFactory.cs b/src/Promitor.Core.Scraping/Factories/MetricDeserializerFactory.cs deleted file mode 100644 index 7a2f6c151..000000000 --- a/src/Promitor.Core.Scraping/Factories/MetricDeserializerFactory.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; - -namespace Promitor.Core.Scraping.Factories -{ - internal static class MetricDeserializerFactory - { - internal static MetricDeserializer GetDeserializerFor(Configuration.Model.ResourceType resource) - { - switch (resource) - { - case Configuration.Model.ResourceType.Generic: - return new GenericAzureMetricDeserializer(); - case Configuration.Model.ResourceType.ServiceBusQueue: - return new ServiceBusQueueMetricDeserializer(); - case Configuration.Model.ResourceType.StorageQueue: - return new StorageQueueMetricDeserializer(); - case Configuration.Model.ResourceType.ContainerInstance: - return new ContainerInstanceMetricDeserializer(); - case Configuration.Model.ResourceType.VirtualMachine: - return new VirtualMachineMetricDeserializer(); - case Configuration.Model.ResourceType.ContainerRegistry: - return new ContainerRegistryMetricDeserializer(); - case Configuration.Model.ResourceType.NetworkInterface: - return new NetworkInterfaceMetricDeserializer(); - case Configuration.Model.ResourceType.CosmosDb: - return new CosmosDbMetricDeserializer(); - case Configuration.Model.ResourceType.RedisCache: - return new RedisCacheMetricDeserializer(); - case Configuration.Model.ResourceType.PostgreSql: - return new PostgreSqlMetricDeserializer(); - } - - throw new ArgumentOutOfRangeException($@"Resource Type {resource} not supported."); - } - } -} diff --git a/src/Promitor.Scraper.Host/Startup.cs b/src/Promitor.Scraper.Host/Startup.cs index c99940f24..2b7be45a6 100644 --- a/src/Promitor.Scraper.Host/Startup.cs +++ b/src/Promitor.Scraper.Host/Startup.cs @@ -4,7 +4,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Promitor.Core.Configuration.Model.Prometheus; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Host.Extensions; using Promitor.Scraper.Host.Validation; @@ -39,7 +39,7 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.AddAutoMapper(typeof(V1MappingProfile).Assembly) + services.AddAutoMapper(typeof(V2MappingProfile).Assembly) .DefineDependencies() .ConfigureYamlConfiguration(_configuration) .UseWebApi() diff --git a/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs b/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs index 3e7c81a4b..9163d294a 100644 --- a/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs +++ b/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs @@ -1,33 +1,38 @@ using System.Collections.Generic; using AutoMapper; using Microsoft.Azure.Management.Monitor.Fluent.Models; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Moq; +using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; using Promitor.Integrations.AzureStorage; namespace Promitor.Scraper.Tests.Unit.Builders.Metrics.v1 { public class MetricsDeclarationBuilder { - private readonly AzureMetadataV1 _azureMetadata; - private readonly List _metrics = new List(); - private MetricDefaultsV1 _metricDefaults = new MetricDefaultsV1 + private readonly AzureMetadataV2 _azureMetadata; + private readonly List _metrics = new List(); + private MetricDefaultsV2 _metricDefaults = new MetricDefaultsV2 { - Scraping = new ScrapingV1 { Schedule = @"0 * * ? * *" } + Scraping = new ScrapingV2 { Schedule = @"0 * * ? * *" } }; - public MetricsDeclarationBuilder(AzureMetadataV1 azureMetadata) + private V2Deserializer _v2Deserializer; + + public MetricsDeclarationBuilder(AzureMetadataV2 azureMetadata) { _azureMetadata = azureMetadata; } public static MetricsDeclarationBuilder WithMetadata(string tenantId = "tenantId", string subscriptionId = "subscriptionId", string resourceGroupName = "resourceGroupName") { - var azureMetadata = new AzureMetadataV1 + var azureMetadata = new AzureMetadataV2 { TenantId = tenantId, SubscriptionId = subscriptionId, @@ -42,7 +47,7 @@ public static MetricsDeclarationBuilder WithoutMetadata() return new MetricsDeclarationBuilder(azureMetadata: null); } - public MetricsDeclarationBuilder WithDefaults(MetricDefaultsV1 defaults) + public MetricsDeclarationBuilder WithDefaults(MetricDefaultsV2 defaults) { _metricDefaults = defaults; @@ -51,7 +56,7 @@ public MetricsDeclarationBuilder WithDefaults(MetricDefaultsV1 defaults) public string Build(IMapper mapper) { - var metricsDeclaration = new MetricsDeclarationV1 + var metricsDeclaration = new MetricsDeclarationV2 { Version = SpecVersion.v1.ToString(), AzureMetadata = _azureMetadata, @@ -59,22 +64,45 @@ public string Build(IMapper mapper) Metrics = _metrics }; - // TODO: pass in deserializer - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper, null); + var logger = new Mock(); + + _v2Deserializer = new V2Deserializer( + new AzureMetadataDeserializer(logger.Object), + new MetricDefaultsDeserializer( + new AggregationDeserializer(logger.Object), + new ScrapingDeserializer(logger.Object), + logger.Object), + new MetricDefinitionDeserializer( + new AzureMetricConfigurationDeserializer( + new MetricAggregationDeserializer(logger.Object), + logger.Object), + new ScrapingDeserializer(logger.Object), + new AzureResourceDeserializerFactory(new SecretDeserializer(logger.Object), logger.Object), + logger.Object), + logger.Object); + + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper, _v2Deserializer); return configurationSerializer.Serialize(metricsDeclaration); } public MetricsDeclarationBuilder WithServiceBusMetric(string metricName = "promitor-service-bus", string metricDescription = "Description for a metric", string queueName = "promitor-queue", string serviceBusNamespace = "promitor-namespace", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new ServiceBusQueueMetricDefinitionV1 + var resource = new ServiceBusQueueResourceV2 + { + QueueName = queueName, + Namespace = serviceBusNamespace + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - QueueName = queueName, - Namespace = serviceBusNamespace, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.ServiceBusQueue }; + _metrics.Add(metric); return this; @@ -83,12 +111,18 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithContainerInstanceMetric(string metricName = "promitor-container-instance", string metricDescription = "Description for a metric", string containerGroup = "promitor-group", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new ContainerInstanceMetricDefinitionV1 + var resource = new ContainerInstanceResourceV2 + { + ContainerGroup = containerGroup + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - ContainerGroup = containerGroup, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.ContainerInstance }; _metrics.Add(metric); @@ -99,13 +133,20 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithContainerRegistryMetric(string metricName = "promitor-container-registry", string metricDescription = "Description for a metric", string registryName = "promitor-container-registry", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new ContainerRegistryMetricDefinitionV1 + var resource = new ContainerRegistryResourceV2 + { + RegistryName = registryName + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - RegistryName = registryName, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.ContainerRegistry }; + _metrics.Add(metric); return this; @@ -114,13 +155,20 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithCosmosDbMetric(string metricName = "promitor-cosmosdb", string metricDescription = "Description for a metric", string dbName = "promitor-cosmosdb", string azureMetricName = "TotalRequests") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new CosmosDbMetricDefinitionV1 + var resource = new CosmosDbResourceV2 + { + DbName = dbName + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - DbName = dbName, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.CosmosDb }; + _metrics.Add(metric); return this; @@ -129,20 +177,27 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithAzureStorageQueueMetric(string metricName = "promitor", string metricDescription = "Description for a metric", string queueName = "promitor-queue", string accountName = "promitor-account", string sasToken = "?sig=promitor", string azureMetricName = AzureStorageConstants.Queues.Metrics.MessageCount) { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var secret = new SecretV1 + var secret = new SecretV2 { RawValue = sasToken }; - var metric = new StorageQueueMetricDefinitionV1 + var resource = new StorageQueueResourceV2 { - Name = metricName, - Description = metricDescription, QueueName = queueName, AccountName = accountName, - SasToken = secret, - AzureMetricConfiguration = azureMetricConfiguration + SasToken = secret + }; + + var metric = new MetricDefinitionV2 + { + Name = metricName, + Description = metricDescription, + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List { resource }, + ResourceType = ResourceType.StorageQueue }; + _metrics.Add(metric); return this; @@ -151,12 +206,18 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithVirtualMachineMetric(string metricName = "promitor-virtual-machine", string metricDescription = "Description for a metric", string virtualMachineName = "promitor-virtual-machine-name", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new VirtualMachineMetricDefinitionV1 + var resource = new VirtualMachineResourceV2 + { + VirtualMachineName = virtualMachineName + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - VirtualMachineName = virtualMachineName, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.VirtualMachine }; _metrics.Add(metric); @@ -167,12 +228,18 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithNetworkInterfaceMetric(string metricName = "promitor-network-interface", string metricDescription = "Description for a metric", string networkInterfaceName = "promitor-network-interface-name", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new NetworkInterfaceMetricDefinitionV1 + var resource = new NetworkInterfaceResourceV2 + { + NetworkInterfaceName = networkInterfaceName + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - NetworkInterfaceName = networkInterfaceName, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.NetworkInterface }; _metrics.Add(metric); @@ -183,25 +250,32 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithGenericMetric(string metricName = "foo", string metricDescription = "Description for a metric", string resourceUri = "Microsoft.ServiceBus/namespaces/promitor-messaging", string filter = "EntityName eq \'orders\'", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new GenericAzureMetricDefinitionV1 + var resource = new GenericResourceV2 + { + ResourceUri = resourceUri, + Filter = filter + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - ResourceUri = resourceUri, - Filter = filter, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.Generic }; + _metrics.Add(metric); return this; } - private AzureMetricConfigurationV1 CreateAzureMetricConfiguration(string azureMetricName) + private AzureMetricConfigurationV2 CreateAzureMetricConfiguration(string azureMetricName) { - return new AzureMetricConfigurationV1 + return new AzureMetricConfigurationV2 { MetricName = azureMetricName, - Aggregation = new MetricAggregationV1 + Aggregation = new MetricAggregationV2 { Type = AggregationType.Average } @@ -211,13 +285,20 @@ private AzureMetricConfigurationV1 CreateAzureMetricConfiguration(string azureMe public MetricsDeclarationBuilder WithRedisCacheMetric(string metricName = "promitor-redis", string metricDescription = "Description for a metric", string cacheName = "promitor-redis", string azureMetricName = "CacheHits") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new RedisCacheMetricDefinitionV1 + var resource = new RedisCacheResourceV2 + { + CacheName = cacheName + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - CacheName = cacheName, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.RedisCache }; + _metrics.Add(metric); return this; @@ -226,13 +307,20 @@ private AzureMetricConfigurationV1 CreateAzureMetricConfiguration(string azureMe public MetricsDeclarationBuilder WithPostgreSqlMetric(string metricName = "promitor-postgresql", string metricDescription = "Description for a metric", string serverName = "promitor-postgresql", string azureMetricName = "cpu_percent") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var metric = new PostgreSqlMetricDefinitionV1 + var resource = new PostgreSqlResourceV2 + { + ServerName = serverName + }; + + var metric = new MetricDefinitionV2 { Name = metricName, Description = metricDescription, - ServerName = serverName, - AzureMetricConfiguration = azureMetricConfiguration + AzureMetricConfiguration = azureMetricConfiguration, + Resources = new List {resource}, + ResourceType = ResourceType.PostgreSql }; + _metrics.Add(metric); return this; diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/AutoMapperTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/AutoMapperTests.cs index d4a0552f4..c5251d3a2 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/AutoMapperTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/AutoMapperTests.cs @@ -1,5 +1,5 @@ using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Xunit; namespace Promitor.Scraper.Tests.Unit.Serialization @@ -10,7 +10,7 @@ public class AutoMapperTests public void VerifyConfigurationsAreValid() { // Arrange - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); // Act / Assert mapperConfiguration.AssertConfigurationIsValid(); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Mapping/MetricDefinitionV1MappingTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Mapping/MetricDefinitionV1MappingTests.cs deleted file mode 100644 index 0369f5261..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Mapping/MetricDefinitionV1MappingTests.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System.ComponentModel; -using AutoMapper; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Mapping -{ - [Category("Unit")] - public class MetricDefinitionV1MappingTests - { - private readonly IMapper _mapper; - - public MetricDefinitionV1MappingTests() - { - var config = new MapperConfiguration(c => c.AddProfile()); - _mapper = config.CreateMapper(); - } - - [Fact] - public void Map_CanMapPrometheusMetricDefinition() - { - // Arrange - var resource = new GenericAzureMetricDefinitionV1 {Name = "promitor_metric"}; - - // Act - var definition = _mapper.Map(resource); - - // Assert - Assert.NotNull(definition.PrometheusMetricDefinition); - Assert.Equal(resource.Name, definition.PrometheusMetricDefinition.Name); - } - - [Fact] - public void Map_MapsResourceType() - { - // Arrange - var resource = new StorageQueueMetricDefinitionV1(); - - // Act - var definition = _mapper.Map(resource); - - // Assert - Assert.Equal(ResourceType.StorageQueue, definition.ResourceType); - } - - [Fact] - public void Map_MapsSingleResource() - { - // Arrange - var resource = new RedisCacheMetricDefinitionV1(); - - // Act - var definition = _mapper.Map(resource); - - // Assert - var runtimeResource = Assert.Single(definition.Resources); - Assert.IsType(runtimeResource); - } - } -} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithAzureStorageQueueYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithAzureStorageQueueYamlSerializationTests.cs deleted file mode 100644 index 18a49fe9f..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithAzureStorageQueueYamlSerializationTests.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; -using MetricDefinition = Promitor.Core.Scraping.Configuration.Model.Metrics.MetricDefinition; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category("Unit")] - public class MetricsDeclarationWithAzureStorageQueueYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"* */1 * * * *", @"* */2 * * * *", "XYZ", null)] - [InlineData(null, null, null, null, "SAMPLE_SECRET")] - public void YamlSerialization_SerializeAndDeserializeValidConfigForAzureStorageQueue_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval, string sasTokenRawValue, string sasTokenEnvironmentVariable) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var azureStorageQueueMetricDefinition = GenerateBogusAzureStorageQueueMetricDefinition(resourceGroupName, metricScrapingInterval, sasTokenRawValue, sasTokenEnvironmentVariable); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new Promitor.Core.Scraping.Configuration.Serialization.v1.Model.MetricsDeclarationV1 - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - azureStorageQueueMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, azureStorageQueueMetricDefinition); - AssertAzureStorageQueueMetricDefinition(deserializedMetricDefinition, azureStorageQueueMetricDefinition); - } - - private static void AssertAzureStorageQueueMetricDefinition(MetricDefinition deserializedStorageQueueMetricDefinition, StorageQueueMetricDefinitionV1 storageQueueMetricDefinition) - { - var deserializedResource = deserializedStorageQueueMetricDefinition.Resources.Single() as StorageQueueResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(storageQueueMetricDefinition.AccountName, deserializedResource.AccountName); - Assert.Equal(storageQueueMetricDefinition.QueueName, deserializedResource.QueueName); - Assert.NotNull(deserializedResource.SasToken); - Assert.Equal(storageQueueMetricDefinition.SasToken.RawValue, deserializedResource.SasToken.RawValue); - Assert.Equal(storageQueueMetricDefinition.SasToken.EnvironmentVariable, deserializedResource.SasToken.EnvironmentVariable); - Assert.NotNull(deserializedStorageQueueMetricDefinition.AzureMetricConfiguration); - Assert.Equal(storageQueueMetricDefinition.AzureMetricConfiguration.MetricName, deserializedStorageQueueMetricDefinition.AzureMetricConfiguration.MetricName); - Assert.NotNull(deserializedStorageQueueMetricDefinition.AzureMetricConfiguration.Aggregation); - Assert.Equal(storageQueueMetricDefinition.AzureMetricConfiguration.Aggregation.Type, deserializedStorageQueueMetricDefinition.AzureMetricConfiguration.Aggregation.Type); - Assert.Equal(storageQueueMetricDefinition.AzureMetricConfiguration.Aggregation.Interval, deserializedStorageQueueMetricDefinition.AzureMetricConfiguration.Aggregation.Interval); - } - - private StorageQueueMetricDefinitionV1 GenerateBogusAzureStorageQueueMetricDefinition(string resourceGroupName, string metricScrapingInterval, string sasTokenRawValue, string sasTokenEnvironmentVariable) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.StorageQueue) - .RuleFor(metricDefinition => metricDefinition.AccountName, faker => faker.Name.LastName()) - .RuleFor(metricDefinition => metricDefinition.QueueName, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.SasToken, faker => new SecretV1 - { - RawValue = sasTokenRawValue, - EnvironmentVariable = sasTokenEnvironmentVariable - }) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary { { faker.Name.FirstName(), faker.Random.Guid().ToString() } }); - - return bogusGenerator.Generate(); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerInstanceYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerInstanceYamlSerializationTests.cs deleted file mode 100644 index a0e842a5c..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerInstanceYamlSerializationTests.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; -using MetricDefinition = Promitor.Core.Scraping.Configuration.Model.Metrics.MetricDefinition; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category("Unit")] - public class MetricsDeclarationWithContainerInstanceYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"* */1 * * * *", @"* */2 * * * *")] - [InlineData(null, null, null)] - public void YamlSerialization_SerializeAndDeserializeValidConfigForContainerInstance_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var containerInstanceMetricDefinition = GenerateBogusContainerInstanceMetricDefinition(resourceGroupName, metricScrapingInterval); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new MetricsDeclarationV1 - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - containerInstanceMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, containerInstanceMetricDefinition); - AssertContainerInstanceMetricDefinition(deserializedMetricDefinition, containerInstanceMetricDefinition); - } - - private static void AssertContainerInstanceMetricDefinition(MetricDefinition deserializedContainerInstanceMetricDefinition, ContainerInstanceMetricDefinitionV1 containerInstanceMetricDefinition) - { - var deserializedResource = deserializedContainerInstanceMetricDefinition.Resources.Single() as ContainerInstanceResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(containerInstanceMetricDefinition.ContainerGroup, deserializedResource.ContainerGroup); - Assert.NotNull(deserializedContainerInstanceMetricDefinition.AzureMetricConfiguration); - Assert.Equal(containerInstanceMetricDefinition.AzureMetricConfiguration.MetricName, deserializedContainerInstanceMetricDefinition.AzureMetricConfiguration.MetricName); - Assert.NotNull(deserializedContainerInstanceMetricDefinition.AzureMetricConfiguration.Aggregation); - Assert.Equal(containerInstanceMetricDefinition.AzureMetricConfiguration.Aggregation.Type, deserializedContainerInstanceMetricDefinition.AzureMetricConfiguration.Aggregation.Type); - Assert.Equal(containerInstanceMetricDefinition.AzureMetricConfiguration.Aggregation.Interval, deserializedContainerInstanceMetricDefinition.AzureMetricConfiguration.Aggregation.Interval); - } - private ContainerInstanceMetricDefinitionV1 GenerateBogusContainerInstanceMetricDefinition(string resourceGroupName, string metricScrapingInterval) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.ContainerInstance) - .RuleFor(metricDefinition => metricDefinition.ContainerGroup, faker => faker.Name.LastName()) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary { { faker.Name.FirstName(), faker.Random.Guid().ToString() } }); - - return bogusGenerator.Generate(); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerRegistryYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerRegistryYamlSerializationTests.cs deleted file mode 100644 index d9ea0835d..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithContainerRegistryYamlSerializationTests.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category("Unit")] - public class MetricsDeclarationWithContainerRegistryYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"* */1 * * * *", @"* */2 * * * *")] - [InlineData(null, null, null)] - public void YamlSerialization_SerializeAndDeserializeValidConfigForContainerRegistry_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var containerRegistryMetricDefinition = GenerateBogusContainerRegistryMetricDefinition(resourceGroupName, metricScrapingInterval); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new MetricsDeclarationV1 - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - containerRegistryMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, containerRegistryMetricDefinition); - AssertContainerRegistryMetricDefinition(deserializedMetricDefinition, containerRegistryMetricDefinition); - } - - private static void AssertContainerRegistryMetricDefinition(MetricDefinition deserializedContainerRegistryMetricDefinition, ContainerRegistryMetricDefinitionV1 containerRegistryMetricDefinition) - { - var deserializedResource = deserializedContainerRegistryMetricDefinition.Resources.Single() as ContainerRegistryResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(containerRegistryMetricDefinition.RegistryName, deserializedResource.RegistryName); - } - - private ContainerRegistryMetricDefinitionV1 GenerateBogusContainerRegistryMetricDefinition(string resourceGroupName, string metricScrapingInterval) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.ContainerRegistry) - .RuleFor(metricDefinition => metricDefinition.RegistryName, faker => faker.Name.LastName()) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary { { faker.Name.FirstName(), faker.Random.Guid().ToString() } }); - - return bogusGenerator.Generate(); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithCosmosDbYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithCosmosDbYamlSerializationTests.cs deleted file mode 100644 index 8ac8b48b1..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithCosmosDbYamlSerializationTests.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category("Unit")] - public class MetricsDeclarationWithCosmosDbYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"* */1 * * * *", @"* */2 * * * *")] - [InlineData(null, null, null)] - public void YamlSerialization_SerializeAndDeserializeValidConfigForCosmosDb_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var cosmosDbMetricDefinition = GenerateBogusCosmosDbMetricDefinition(resourceGroupName, metricScrapingInterval); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new MetricsDeclarationV1 - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - cosmosDbMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, cosmosDbMetricDefinition); - AssertCosmosDbMetricDefinition(deserializedMetricDefinition, cosmosDbMetricDefinition); - } - - private static void AssertCosmosDbMetricDefinition(MetricDefinition deserializedCosmosDbMetricDefinition, CosmosDbMetricDefinitionV1 cosmosDbMetricDefinition) - { - var deserializedResource = deserializedCosmosDbMetricDefinition.Resources.Single() as CosmosDbResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(cosmosDbMetricDefinition.DbName, deserializedResource.DbName); - } - - private CosmosDbMetricDefinitionV1 GenerateBogusCosmosDbMetricDefinition(string resourceGroupName, string metricScrapingInterval) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.CosmosDb) - .RuleFor(metricDefinition => metricDefinition.DbName, faker => faker.Name.LastName()) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary { { faker.Name.FirstName(), faker.Random.Guid().ToString() } }); - - return bogusGenerator.Generate(); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithNetworkInterfaceYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithNetworkInterfaceYamlSerializationTests.cs deleted file mode 100644 index 4dc2894d3..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithNetworkInterfaceYamlSerializationTests.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category(category: "Unit")] - public class MetricsDeclarationWithNetworkInterfaceYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"01:00", @"2:00")] - [InlineData(null, null, null)] - public void YamlSerialization_SerializeAndDeserializeValidConfigForNetworkInterface_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var networkInterfaceMetricDefinition = GenerateBogusNetworkInterfaceMetricDefinition(resourceGroupName, metricScrapingInterval); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new MetricsDeclarationV1 - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - networkInterfaceMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, networkInterfaceMetricDefinition); - AssertNetworkInterfaceMetricDefinition(deserializedMetricDefinition, networkInterfaceMetricDefinition); - } - - private static void AssertNetworkInterfaceMetricDefinition(MetricDefinition deserializedNetworkInterfaceMetricDefinition, NetworkInterfaceMetricDefinitionV1 networkInterfaceMetricDefinition) - { - var deserializedResource = deserializedNetworkInterfaceMetricDefinition.Resources.Single() as NetworkInterfaceResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(networkInterfaceMetricDefinition.NetworkInterfaceName, deserializedResource.NetworkInterfaceName); - } - - private NetworkInterfaceMetricDefinitionV1 GenerateBogusNetworkInterfaceMetricDefinition(string resourceGroupName, string metricScrapingInterval) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.NetworkInterface) - .RuleFor(metricDefinition => metricDefinition.NetworkInterfaceName, faker => faker.Name.LastName()) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary { { faker.Name.FirstName(), faker.Random.Guid().ToString() } }); - - return bogusGenerator.Generate(); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithPostgreSqlYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithPostgreSqlYamlSerializationTests.cs deleted file mode 100644 index 1df10214b..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithPostgreSqlYamlSerializationTests.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category("Unit")] - public class MetricsDeclarationWithPostgreSqlYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"* */1 * * * *", @"* */2 * * * *")] - [InlineData(null, null, null)] - public void YamlSerialization_SerializeAndDeserializeConfigForPostgreSql_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var postgreSqlMetricDefinition = GenerateBogusPostgreSqlMetricDefinition(resourceGroupName, metricScrapingInterval); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new MetricsDeclarationV1 - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - postgreSqlMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, postgreSqlMetricDefinition); - AssertPostgreSqlMetricDefinition(deserializedMetricDefinition, postgreSqlMetricDefinition); - } - - private static void AssertPostgreSqlMetricDefinition(MetricDefinition deserializedPostgreSqlMetricDefinition, PostgreSqlMetricDefinitionV1 postgreSqlMetricDefinition) - { - var deserializedResource = deserializedPostgreSqlMetricDefinition.Resources.Single() as PostgreSqlResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(postgreSqlMetricDefinition.ServerName, deserializedResource.ServerName); - } - - private PostgreSqlMetricDefinitionV1 GenerateBogusPostgreSqlMetricDefinition(string resourceGroupName, string metricScrapingInterval) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Lorem.Word()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.PostgreSql) - .RuleFor(metricDefinition => metricDefinition.ServerName, faker => faker.Lorem.Word()) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary { { faker.Name.FirstName(), faker.Random.Guid().ToString() } }); - - return bogusGenerator.Generate(); - } - } -} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithRedisCacheYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithRedisCacheYamlSerializationTests.cs deleted file mode 100644 index 7fdd7d116..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithRedisCacheYamlSerializationTests.cs +++ /dev/null @@ -1,84 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category("Unit")] - public class MetricsDeclarationWithRedisCacheYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"* */1 * * * *", @"* */2 * * * *")] - [InlineData(null, null, null)] - public void YamlSerialization_SerializeAndDeserializeConfigForRedisCache_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var redisCacheMetricDefinition = GenerateBogusRedisCacheMetricDefinition(resourceGroupName, metricScrapingInterval); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new MetricsDeclarationV1 - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - redisCacheMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, redisCacheMetricDefinition); - AssertRedisCacheMetricDefinition(deserializedMetricDefinition, redisCacheMetricDefinition); - } - - private static void AssertRedisCacheMetricDefinition(MetricDefinition deserializedRedisCacheMetricDefinition, RedisCacheMetricDefinitionV1 redisCacheMetricDefinition) - { - var deserializedResource = deserializedRedisCacheMetricDefinition.Resources.Single() as RedisCacheResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(redisCacheMetricDefinition.CacheName, deserializedResource.CacheName); - } - - private RedisCacheMetricDefinitionV1 GenerateBogusRedisCacheMetricDefinition(string resourceGroupName, string metricScrapingInterval) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Lorem.Word()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.RedisCache) - .RuleFor(metricDefinition => metricDefinition.CacheName, faker => faker.Lorem.Word()) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary { { faker.Name.FirstName(), faker.Random.Guid().ToString() } }); - - return bogusGenerator.Generate(); - } - } -} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithServiceBusQueueYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithServiceBusQueueYamlSerializationTests.cs deleted file mode 100644 index ae7a2de75..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithServiceBusQueueYamlSerializationTests.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category("Unit")] - public class ServiceBusQueueYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"* */1 * * * *", @"* */2 * * * *")] - [InlineData(null, null, null)] - public void YamlSerialization_SerializeAndDeserializeValidConfigForServiceBus_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var serviceBusMetricDefinition = GenerateBogusServiceBusMetricDefinition(resourceGroupName, metricScrapingInterval); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new MetricsDeclarationV1() - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - serviceBusMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, serviceBusMetricDefinition); - AssertServiceBusQueueMetricDefinition(deserializedMetricDefinition, serviceBusMetricDefinition); - } - - private static void AssertServiceBusQueueMetricDefinition(MetricDefinition deserializedServiceBusMetricDefinition, ServiceBusQueueMetricDefinitionV1 serviceBusMetricDefinition) - { - var deserializedResource = deserializedServiceBusMetricDefinition.Resources.Single() as ServiceBusQueueResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(serviceBusMetricDefinition.Namespace, deserializedResource.Namespace); - Assert.Equal(serviceBusMetricDefinition.QueueName, deserializedResource.QueueName); - } - - private ServiceBusQueueMetricDefinitionV1 GenerateBogusServiceBusMetricDefinition(string resourceGroupName, string metricScrapingInterval) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.ServiceBusQueue) - .RuleFor(metricDefinition => metricDefinition.Namespace, faker => faker.Name.LastName()) - .RuleFor(metricDefinition => metricDefinition.QueueName, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary - { - { faker.Name.FirstName(), faker.Random.Guid().ToString() }, - { faker.Name.FirstName(), faker.Random.Guid().ToString() } - }); - - return bogusGenerator.Generate(); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithVirtualMachineYamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithVirtualMachineYamlSerializationTests.cs deleted file mode 100644 index 1cd644bef..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/MetricsDeclarationWithVirtualMachineYamlSerializationTests.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using Bogus; -using Microsoft.Extensions.Logging.Abstractions; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category(category: "Unit")] - public class MetricsDeclarationWithVirtualMachineYamlSerializationTests : YamlSerializationTests - { - [Theory] - [InlineData("promitor1", @"* */1 * * * *", @"* */2 * * * *")] - [InlineData(null, null, null)] - public void YamlSerialization_SerializeAndDeserializeValidConfigForVirtualMachine_SucceedsWithIdenticalOutput(string resourceGroupName, string defaultScrapingInterval, string metricScrapingInterval) - { - // Arrange - var azureMetadata = GenerateBogusAzureMetadata(); - var virtualMachineMetricDefinition = GenerateBogusVirtualMachineMetricDefinition(resourceGroupName, metricScrapingInterval); - var metricDefaults = GenerateBogusMetricDefaults(defaultScrapingInterval); - var scrapingConfiguration = new MetricsDeclarationV1 - { - Version = SpecVersion.v1.ToString(), - AzureMetadata = azureMetadata, - MetricDefaults = metricDefaults, - Metrics = new List - { - virtualMachineMetricDefinition - } - }; - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper, V2Deserializer.Object); - - // Act - var serializedConfiguration = configurationSerializer.Serialize(scrapingConfiguration); - var deserializedConfiguration = configurationSerializer.Deserialize(serializedConfiguration); - - // Assert - Assert.NotNull(deserializedConfiguration); - AssertAzureMetadata(deserializedConfiguration, azureMetadata); - AssertMetricDefaults(deserializedConfiguration, metricDefaults); - Assert.NotNull(deserializedConfiguration.Metrics); - Assert.Single(deserializedConfiguration.Metrics); - var deserializedMetricDefinition = deserializedConfiguration.Metrics.FirstOrDefault(); - AssertMetricDefinition(deserializedMetricDefinition, virtualMachineMetricDefinition); - AssertVirtualMachineMetricDefinition(deserializedMetricDefinition, virtualMachineMetricDefinition); - } - - private static void AssertVirtualMachineMetricDefinition(MetricDefinition deserializedVirtualMachineMetricDefinition, VirtualMachineMetricDefinitionV1 virtualMachineMetricDefinition) - { - var deserializedResource = deserializedVirtualMachineMetricDefinition.Resources.Single() as VirtualMachineResourceDefinition; - - Assert.NotNull(deserializedResource); - Assert.Equal(virtualMachineMetricDefinition.VirtualMachineName, deserializedResource.VirtualMachineName); - Assert.NotNull(deserializedVirtualMachineMetricDefinition.AzureMetricConfiguration); - Assert.Equal(virtualMachineMetricDefinition.AzureMetricConfiguration.MetricName, deserializedVirtualMachineMetricDefinition.AzureMetricConfiguration.MetricName); - Assert.NotNull(deserializedVirtualMachineMetricDefinition.AzureMetricConfiguration.Aggregation); - Assert.Equal(virtualMachineMetricDefinition.AzureMetricConfiguration.Aggregation.Type, deserializedVirtualMachineMetricDefinition.AzureMetricConfiguration.Aggregation.Type); - Assert.Equal(virtualMachineMetricDefinition.AzureMetricConfiguration.Aggregation.Interval, deserializedVirtualMachineMetricDefinition.AzureMetricConfiguration.Aggregation.Interval); - } - - private VirtualMachineMetricDefinitionV1 GenerateBogusVirtualMachineMetricDefinition(string resourceGroupName, string metricScrapingInterval) - { - var bogusScrapingInterval = GenerateBogusScrapingInterval(metricScrapingInterval); - var bogusAzureMetricConfiguration = GenerateBogusAzureMetricConfiguration(); - - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.Name, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.Description, faker => faker.Lorem.Sentence(wordCount: 6)) - .RuleFor(metricDefinition => metricDefinition.ResourceType, faker => ResourceType.VirtualMachine) - .RuleFor(metricDefinition => metricDefinition.VirtualMachineName, faker => faker.Name.LastName()) - .RuleFor(metricDefinition => metricDefinition.AzureMetricConfiguration, faker => bogusAzureMetricConfiguration) - .RuleFor(metricDefinition => metricDefinition.ResourceGroupName, faker => resourceGroupName) - .RuleFor(metricDefinition => metricDefinition.Scraping, faker => bogusScrapingInterval) - .RuleFor(metricDefinition => metricDefinition.Labels, faker => new Dictionary { { faker.Name.FirstName(), faker.Random.Guid().ToString() } }); - - return bogusGenerator.Generate(); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/YamlSerializationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/YamlSerializationTests.cs deleted file mode 100644 index ed7ec2e7a..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/MetricsDeclaration/YamlSerializationTests.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; -using System.ComponentModel; -using System.Linq; -using AutoMapper; -using Bogus; -using Moq; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v1.MetricsDeclaration -{ - [Category("Unit")] - public class YamlSerializationTests - { - protected readonly IMapper Mapper; - protected readonly Mock> V2Deserializer; - - public YamlSerializationTests() - { - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); - Mapper = mapperConfiguration.CreateMapper(); - - V2Deserializer = new Mock>(); - } - - protected void AssertMetricDefinition(MetricDefinition deserializedMetricDefinition, MetricDefinitionV1 metricDefinition) - { - Assert.NotNull(deserializedMetricDefinition); - Assert.NotNull(deserializedMetricDefinition.PrometheusMetricDefinition); - Assert.Equal(metricDefinition.Name, deserializedMetricDefinition.PrometheusMetricDefinition.Name); - Assert.Equal(metricDefinition.Description, deserializedMetricDefinition.PrometheusMetricDefinition.Description); - Assert.Equal(metricDefinition.ResourceType, deserializedMetricDefinition.ResourceType); - Assert.NotNull(deserializedMetricDefinition.PrometheusMetricDefinition.Labels); - Assert.Equal(metricDefinition.Labels, deserializedMetricDefinition.PrometheusMetricDefinition.Labels); - Assert.NotEmpty(deserializedMetricDefinition.Resources); - Assert.Equal(deserializedMetricDefinition.Resources.Single().ResourceGroupName, metricDefinition.ResourceGroupName); - - foreach (var label in metricDefinition.Labels) - { - var deserializedLabel = deserializedMetricDefinition.PrometheusMetricDefinition.Labels[label.Key]; - Assert.NotNull(deserializedLabel); - Assert.Equal(label.Value, deserializedLabel); - } - - Assert.NotNull(deserializedMetricDefinition.AzureMetricConfiguration); - Assert.Equal(metricDefinition.AzureMetricConfiguration.MetricName, deserializedMetricDefinition.AzureMetricConfiguration.MetricName); - Assert.NotNull(deserializedMetricDefinition.AzureMetricConfiguration.Aggregation); - Assert.Equal(metricDefinition.AzureMetricConfiguration.Aggregation.Type, deserializedMetricDefinition.AzureMetricConfiguration.Aggregation.Type); - Assert.Equal(metricDefinition.AzureMetricConfiguration.Aggregation.Interval, deserializedMetricDefinition.AzureMetricConfiguration.Aggregation.Interval); - } - - protected void AssertMetricDefaults(Promitor.Core.Scraping.Configuration.Model.MetricsDeclaration deserializedConfiguration, MetricDefaultsV1 metricDefaults) - { - var deserializedMetricDefaults = deserializedConfiguration.MetricDefaults; - Assert.NotNull(deserializedMetricDefaults); - Assert.NotNull(deserializedMetricDefaults.Aggregation); - Assert.Equal(metricDefaults.Aggregation.Interval, deserializedMetricDefaults.Aggregation.Interval); - } - - protected void AssertAzureMetadata(Promitor.Core.Scraping.Configuration.Model.MetricsDeclaration deserializedConfiguration, AzureMetadataV1 azureMetadata) - { - Assert.NotNull(deserializedConfiguration.AzureMetadata); - Assert.Equal(azureMetadata.TenantId, deserializedConfiguration.AzureMetadata.TenantId); - Assert.Equal(azureMetadata.ResourceGroupName, deserializedConfiguration.AzureMetadata.ResourceGroupName); - Assert.Equal(azureMetadata.SubscriptionId, deserializedConfiguration.AzureMetadata.SubscriptionId); - } - - protected AzureMetricConfigurationV1 GenerateBogusAzureMetricConfiguration() - { - var bogusMetricAggregation = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(aggregation => aggregation.Type, faker => faker.PickRandom()) - .RuleFor(aggregation => aggregation.Interval, faker => TimeSpan.FromMinutes(faker.Random.Int())) - .Generate(); - - var bogusMetricConfiguration = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metricDefinition => metricDefinition.MetricName, faker => faker.Name.FirstName()) - .RuleFor(metricDefinition => metricDefinition.Aggregation, faker => bogusMetricAggregation) - .Generate(); - - return bogusMetricConfiguration; - } - - protected MetricDefaultsV1 GenerateBogusMetricDefaults(string defaultScrapingInterval) - { - var bogusAggregationGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(aggregation => aggregation.Interval, faker => TimeSpan.FromMinutes(faker.Random.Int())); - - var generatedAggregation = bogusAggregationGenerator.Generate(); - var metricDefaults = new MetricDefaultsV1 - { - Aggregation = generatedAggregation, - }; - - if (!string.IsNullOrWhiteSpace(defaultScrapingInterval)) - { - metricDefaults.Scraping.Schedule = defaultScrapingInterval; - } - - return metricDefaults; - } - - protected AzureMetadataV1 GenerateBogusAzureMetadata() - { - var bogusGenerator = new Faker() - .StrictMode(ensureRulesForAllProperties: true) - .RuleFor(metadata => metadata.TenantId, faker => faker.Finance.Account()) - .RuleFor(metadata => metadata.ResourceGroupName, faker => faker.Name.FirstName()) - .RuleFor(metadata => metadata.SubscriptionId, faker => faker.Finance.Account()); - - return bogusGenerator.Generate(); - } - - protected ScrapingV1 GenerateBogusScrapingInterval(string testInterval) - { - var bogusGenerator = new Faker() - .RuleFor(scraping => scraping.Schedule, faker => testInterval); - - return bogusGenerator.Generate(); - } - } -} \ No newline at end of file diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs index c16d5482a..c34357eb2 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs @@ -49,26 +49,26 @@ public void Deserialize_NoVersionSpecified_ThrowsException() public void Deserialize_VersionSpecified_SetsCorrectVersion() { // Arrange - var yamlNode = YamlUtils.CreateYamlNode("version: v2"); + var yamlNode = YamlUtils.CreateYamlNode("version: v1"); // Act var builder = _deserializer.Deserialize(yamlNode); // Assert - Assert.Equal("v2", builder.Version); + Assert.Equal("v1", builder.Version); } [Fact] public void Deserialize_WrongVersionSpecified_ThrowsException() { // Arrange - var yamlNode = YamlUtils.CreateYamlNode("version: v1"); + var yamlNode = YamlUtils.CreateYamlNode("version: v2"); // Act var exception = Assert.Throws(() => _deserializer.Deserialize(yamlNode)); // Assert - Assert.Equal("A 'version' element with a value of 'v2' was expected but the value 'v1' was found", exception.Message); + Assert.Equal("A 'version' element with a value of 'v1' was expected but the value 'v2' was found", exception.Message); } [Fact] @@ -76,7 +76,7 @@ public void Deserialize_AzureMetadata_UsesMetadataDeserializer() { // Arrange const string config = -@"version: v2 +@"version: v1 azureMetadata: tenantId: 'abc-123'"; var yamlNode = YamlUtils.CreateYamlNode(config); @@ -94,7 +94,7 @@ public void Deserialize_AzureMetadata_UsesMetadataDeserializer() public void Deserialize_AzureMetadataNotSupplied_SetsMetadataNull() { // Arrange - var yamlNode = YamlUtils.CreateYamlNode("version: v2"); + var yamlNode = YamlUtils.CreateYamlNode("version: v1"); _metadataDeserializer.Setup( d => d.Deserialize(It.IsAny())).Returns(new AzureMetadataV2()); @@ -110,7 +110,7 @@ public void Deserialize_MetricDefaults_UsesDefaultsDeserializer() { // Arrange const string config = - @"version: v2 + @"version: v1 metricDefaults: aggregation: interval: '00:05:00'"; @@ -130,7 +130,7 @@ public void Deserialize_MetricDefaultsNotSupplied_SetsDefaultsNull() { // Arrange const string config = - @"version: v2"; + @"version: v1"; var yamlNode = YamlUtils.CreateYamlNode(config); _defaultsDeserializer.Setup( d => d.Deserialize(It.IsAny())).Returns(new MetricDefaultsV2()); @@ -147,7 +147,7 @@ public void Deserialize_Metrics_UsesMetricsDeserializer() { // Arrange const string config = - @"version: v2 + @"version: v1 metrics: - name: promitor_metrics_total"; var yamlNode = YamlUtils.CreateYamlNode(config); @@ -166,7 +166,7 @@ public void Deserialize_Metric_SetsMetricsNull() { // Arrange const string config = - @"version: v2"; + @"version: v1"; var yamlNode = YamlUtils.CreateYamlNode(config); _metricsDeserializer.Setup( d => d.Deserialize(It.IsAny())).Returns(new List()); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs index 06795143a..ffe0b5454 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs @@ -1,9 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.Metrics.ResourceTypes; using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Xunit; diff --git a/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs b/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs index 4ecbdad47..4b8d6a55a 100644 --- a/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs +++ b/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs @@ -1,6 +1,11 @@ using AutoMapper; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Moq; using Promitor.Core.Scraping.Configuration.Providers; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; namespace Promitor.Scraper.Tests.Unit.Stubs { @@ -8,12 +13,31 @@ public class MetricsDeclarationProviderStub : MetricsDeclarationProvider { private readonly string _rawMetricsDeclaration; - // TODO: Pass in actual deserializer - public MetricsDeclarationProviderStub(string rawMetricsDeclaration, IMapper mapper) : base(configuration: null, logger: NullLogger.Instance, mapper: mapper, v2Deserializer: null) + public MetricsDeclarationProviderStub(string rawMetricsDeclaration, IMapper mapper) : base(configuration: null, logger: NullLogger.Instance, mapper: mapper, v2Deserializer: CreateDeserializer()) { _rawMetricsDeclaration = rawMetricsDeclaration; } + private static IDeserializer CreateDeserializer() + { + var logger = new Mock(); + + return new V2Deserializer( + new AzureMetadataDeserializer(logger.Object), + new MetricDefaultsDeserializer( + new AggregationDeserializer(logger.Object), + new ScrapingDeserializer(logger.Object), + logger.Object), + new MetricDefinitionDeserializer( + new AzureMetricConfigurationDeserializer( + new MetricAggregationDeserializer(logger.Object), + logger.Object), + new ScrapingDeserializer(logger.Object), + new AzureResourceDeserializerFactory(new SecretDeserializer(logger.Object), logger.Object), + logger.Object), + logger.Object); + } + public override string ReadRawDeclaration() { return _rawMetricsDeclaration; diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/GeneralMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/GeneralMetricsDeclarationValidationStepTests.cs index 815d6e055..896c10ba1 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/GeneralMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/GeneralMetricsDeclarationValidationStepTests.cs @@ -1,7 +1,7 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Stubs; using Xunit; @@ -16,7 +16,7 @@ public class GeneralMetricsDeclarationValidationStepTests public GeneralMetricsDeclarationValidationStepTests() { - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); _mapper = mapperConfiguration.CreateMapper(); } @@ -108,7 +108,7 @@ public void MetricsDeclaration_WithoutDefaultScrapingSchedule_Fails() { // Arrange var rawDeclaration = MetricsDeclarationBuilder.WithMetadata() - .WithDefaults(new MetricDefaultsV1()) + .WithDefaults(new MetricDefaultsV2()) .Build(_mapper); var metricsDeclarationProvider = new MetricsDeclarationProviderStub(rawDeclaration, _mapper); diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/AzureStorageQueueMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/AzureStorageQueueMetricsDeclarationValidationStepTests.cs index d72d25223..2be05cbc8 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/AzureStorageQueueMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/AzureStorageQueueMetricsDeclarationValidationStepTests.cs @@ -1,7 +1,7 @@ using System; using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Integrations.AzureStorage; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; @@ -17,7 +17,7 @@ public class AzureStorageQueueMetricsDeclarationValidationStepTests public AzureStorageQueueMetricsDeclarationValidationStepTests() { - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); _mapper = mapperConfiguration.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerInstanceMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerInstanceMetricsDeclarationValidationStepTests.cs index 51e9de640..2bbb878c2 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerInstanceMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerInstanceMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class ContainerInstanceMetricsDeclarationValidationStepTests public ContainerInstanceMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerRegistryMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerRegistryMetricsDeclarationValidationStepTests.cs index 746b79d9e..e0e88e2b2 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerRegistryMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerRegistryMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class ContainerRegistryMetricsDeclarationValidationStepTests public ContainerRegistryMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/CosmosDbMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/CosmosDbMetricsDeclarationValidationStepTests.cs index 74fac5d76..766d2b3aa 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/CosmosDbMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/CosmosDbMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -11,11 +11,11 @@ namespace Promitor.Scraper.Tests.Unit.Validation.Metrics.ResourceTypes [Category("Unit")] public class CosmosDbMetricsDeclarationValidationStepTests { - private IMapper _mapper; + private readonly IMapper _mapper; public CosmosDbMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/GenericMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/GenericMetricsDeclarationValidationStepTests.cs index f4f30bc8e..624cd0dac 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/GenericMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/GenericMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class GenericMetricsDeclarationValidationStepTests public GenericMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/NetworkInterfaceMetricsDeclarationValidationStepsTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/NetworkInterfaceMetricsDeclarationValidationStepsTests.cs index 7ca3bb7a1..5d8e6ee57 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/NetworkInterfaceMetricsDeclarationValidationStepsTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/NetworkInterfaceMetricsDeclarationValidationStepsTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class NetworkInterfaceMetricsDeclarationValidationStepTests public NetworkInterfaceMetricsDeclarationValidationStepTests() { - var mapperConfig = new MapperConfiguration(c => c.AddProfile()); + var mapperConfig = new MapperConfiguration(c => c.AddProfile()); _mapper = mapperConfig.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/PostgreSqlMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/PostgreSqlMetricsDeclarationValidationStepTests.cs index c14df53b5..ac7b16845 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/PostgreSqlMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/PostgreSqlMetricsDeclarationValidationStepTests.cs @@ -2,7 +2,7 @@ using Promitor.Scraper.Tests.Unit.Stubs; using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Xunit; @@ -15,7 +15,7 @@ public class PostgreSqlMetricsDeclarationValidationStepTests public PostgreSqlMetricsDeclarationValidationStepTests() { - var mapperConfig = new MapperConfiguration(c => c.AddProfile()); + var mapperConfig = new MapperConfiguration(c => c.AddProfile()); _mapper = mapperConfig.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/RedisCacheMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/RedisCacheMetricsDeclarationValidationStepTests.cs index 84f364f79..8262be599 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/RedisCacheMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/RedisCacheMetricsDeclarationValidationStepTests.cs @@ -2,7 +2,7 @@ using Promitor.Scraper.Tests.Unit.Stubs; using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Xunit; @@ -15,7 +15,7 @@ public class RedisCacheMetricsDeclarationValidationStepTests public RedisCacheMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ServiceBusQueueMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ServiceBusQueueMetricsDeclarationValidationStepTests.cs index f311d9cd2..563b67645 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ServiceBusQueueMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ServiceBusQueueMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class ServiceBusQueueMetricsDeclarationValidationStepTests public ServiceBusQueueMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs index e35186fd0..c6e1177b9 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class VirtualMachineMetricsDeclarationValidationStepTests public VirtualMachineMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } From 202cc9b2d9695d773ee8fe58302d4282f4cf4c27 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Wed, 21 Aug 2019 20:59:01 +0100 Subject: [PATCH 29/32] Rename v2 objects back to v1 --- .../Providers/MetricsDeclarationProvider.cs | 6 +- .../Serialization/ConfigurationSerializer.cs | 6 +- .../Core/AggregationDeserializer.cs | 10 +- .../Core/AzureMetadataDeserializer.cs | 10 +- .../AzureMetricConfigurationDeserializer.cs | 16 ++-- .../Core/AzureResourceDeserializerFactory.cs | 12 +-- .../Core/IAzureResourceDeserializerFactory.cs | 8 +- .../Core/MetricAggregationDeserializer.cs | 10 +- .../Core/MetricDefaultsDeserializer.cs | 18 ++-- .../Core/MetricDefinitionDeserializer.cs | 24 ++--- .../{v2 => v1}/Core/ScrapingDeserializer.cs | 10 +- .../{v2 => v1}/Core/SecretDeserializer.cs | 10 +- .../Core/V1Deserializer.cs} | 28 +++--- .../v1/Mapping/V1MappingProfile.cs | 53 ++++++++++ .../Model/AggregationV1.cs} | 4 +- .../Model/AzureMetadataV1.cs} | 6 +- .../Model/AzureMetricConfigurationV1.cs} | 6 +- .../Model/AzureResourceDefinitionV1.cs} | 4 +- .../Model/MetricAggregationV1.cs} | 4 +- .../Model/MetricDefaultsV1.cs} | 8 +- .../Model/MetricDefinitionV1.cs} | 12 +-- .../v1/Model/MetricsDeclarationV1.cs | 16 ++++ .../ContainerInstanceResourceV1.cs} | 4 +- .../ContainerRegistryResourceV1.cs} | 4 +- .../ResourceTypes/CosmosDbResourceV1.cs} | 4 +- .../Model/ResourceTypes/GenericResourceV1.cs} | 4 +- .../NetworkInterfaceResourceV1.cs} | 4 +- .../ResourceTypes/PostgreSqlResourceV1.cs} | 4 +- .../ResourceTypes/RedisCacheResourceV1.cs} | 4 +- .../ServiceBusQueueResourceV1.cs} | 4 +- .../ResourceTypes/StorageQueueResourceV1.cs} | 6 +- .../VirtualMachineResourceV1.cs} | 4 +- .../ScrapingV2.cs => v1/Model/ScrapingV1.cs} | 4 +- .../SecretV2.cs => v1/Model/SecretV1.cs} | 4 +- .../ContainerInstanceDeserializer.cs | 10 +- .../ContainerRegistryDeserializer.cs | 10 +- .../Providers/CosmosDbDeserializer.cs | 10 +- .../Providers/GenericResourceDeserializer.cs | 10 +- .../Providers/NetworkInterfaceDeserializer.cs | 10 +- .../Providers/PostgreSqlDeserializer.cs | 10 +- .../Providers/RedisCacheDeserializer.cs | 10 +- .../Providers/ResourceDeserializer.cs | 12 +-- .../Providers/ServiceBusQueueDeserializer.cs | 10 +- .../Providers/StorageQueueDeserializer.cs | 16 ++-- .../Providers/VirtualMachineDeserializer.cs | 10 +- .../v2/Mapping/V2MappingProfile.cs | 53 ---------- .../v2/Model/MetricsDeclarationV2.cs | 17 ---- .../IServiceCollectionExtensions.cs | 22 ++--- src/Promitor.Scraper.Host/Startup.cs | 4 +- .../Validation/RuntimeValidator.cs | 4 +- .../Metrics/v1/MetricsDeclarationBuilder.cs | 96 +++++++++---------- .../Serialization/AutoMapperTests.cs | 4 +- .../Core/AggregationDeserializerTests.cs | 5 +- .../Core/AzureMetadataDeserializerTests.cs | 4 +- ...ureMetricConfigurationDeserializerTests.cs | 12 +-- .../MetricAggregationDeserializerTests.cs | 4 +- .../Core/MetricDefaultsDeserializerTests.cs | 18 ++-- .../Core/MetricDefinitionDeserializerTests.cs | 30 +++--- .../Core/ScrapingDeserializerTests.cs | 5 +- .../Core/SecretDeserializerTests.cs | 4 +- .../Core/V1DeserializerTests.cs} | 38 ++++---- .../{v2 => v1}/DeserializerTestHelpers.cs | 2 +- .../MetricDefinitionV1MappingTests.cs} | 14 +-- .../ContainerInstanceDeserializerTests.cs | 14 +-- .../ContainerRegistryDeserializerTests.cs | 14 +-- .../Providers/CosmosDbDeserializerTests.cs | 14 +-- .../GenericResourceDeserializerTests.cs | 18 ++-- .../NetworkInterfaceDeserializerTests.cs | 14 +-- .../Providers/PostgreSqlDeserializerTests.cs | 14 +-- .../Providers/RedisCacheDeserializerTests.cs | 14 +-- .../Providers/ResourceDeserializerTestBase.cs | 6 +- .../ServiceBusQueueDeserializerTests.cs | 18 ++-- .../StorageQueueDeserializerTests.cs | 30 +++--- .../VirtualMachineDeserializerTests.cs | 15 ++- .../V1IntegrationTests.cs} | 70 +++++++------- ...usQueueResourceDefinitionV2MappingTests.cs | 29 ------ .../Stubs/MetricsDeclarationProviderStub.cs | 8 +- ...alMetricsDeclarationValidationStepTests.cs | 8 +- ...ueMetricsDeclarationValidationStepTests.cs | 4 +- ...ceMetricsDeclarationValidationStepTests.cs | 4 +- ...ryMetricsDeclarationValidationStepTests.cs | 4 +- ...DbMetricsDeclarationValidationStepTests.cs | 4 +- ...icMetricsDeclarationValidationStepTests.cs | 4 +- ...eMetricsDeclarationValidationStepsTests.cs | 4 +- ...qlMetricsDeclarationValidationStepTests.cs | 4 +- ...heMetricsDeclarationValidationStepTests.cs | 4 +- ...ueMetricsDeclarationValidationStepTests.cs | 4 +- ...eMetricsDeclarationValidationStepsTests.cs | 4 +- 88 files changed, 538 insertions(+), 573 deletions(-) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/AggregationDeserializer.cs (76%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/AzureMetadataDeserializer.cs (74%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/AzureMetricConfigurationDeserializer.cs (66%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/AzureResourceDeserializerFactory.cs (83%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/IAzureResourceDeserializerFactory.cs (69%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/MetricAggregationDeserializer.cs (70%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/MetricDefaultsDeserializer.cs (67%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/MetricDefinitionDeserializer.cs (83%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/ScrapingDeserializer.cs (70%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Core/SecretDeserializer.cs (73%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Core/V2Deserializer.cs => v1/Core/V1Deserializer.cs} (73%) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/AggregationV2.cs => v1/Model/AggregationV1.cs} (76%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/AzureMetadataV2.cs => v1/Model/AzureMetadataV1.cs} (54%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/AzureMetricConfigurationV2.cs => v1/Model/AzureMetricConfigurationV1.cs} (72%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/AzureResourceDefinitionV2.cs => v1/Model/AzureResourceDefinitionV1.cs} (81%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/MetricAggregationV2.cs => v1/Model/MetricAggregationV1.cs} (81%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/MetricDefaultsV2.cs => v1/Model/MetricDefaultsV1.cs} (67%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/MetricDefinitionV2.cs => v1/Model/MetricDefinitionV1.cs} (70%) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/ContainerInstanceResourceV2.cs => v1/Model/ResourceTypes/ContainerInstanceResourceV1.cs} (57%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/ContainerRegistryResourceV2.cs => v1/Model/ResourceTypes/ContainerRegistryResourceV1.cs} (57%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/CosmosDbResourceV2.cs => v1/Model/ResourceTypes/CosmosDbResourceV1.cs} (70%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/GenericResourceV2.cs => v1/Model/ResourceTypes/GenericResourceV1.cs} (81%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/NetworkInterfaceResourceV2.cs => v1/Model/ResourceTypes/NetworkInterfaceResourceV1.cs} (71%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/PostgreSqlResourceV2.cs => v1/Model/ResourceTypes/PostgreSqlResourceV1.cs} (70%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/RedisCacheResourceV2.cs => v1/Model/ResourceTypes/RedisCacheResourceV1.cs} (70%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/ServiceBusQueueResourceV2.cs => v1/Model/ResourceTypes/ServiceBusQueueResourceV1.cs} (78%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/StorageQueueResourceV2.cs => v1/Model/ResourceTypes/StorageQueueResourceV1.cs} (76%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ResourceTypes/VirtualMachineResourceV2.cs => v1/Model/ResourceTypes/VirtualMachineResourceV1.cs} (72%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/ScrapingV2.cs => v1/Model/ScrapingV1.cs} (90%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2/Model/SecretV2.cs => v1/Model/SecretV1.cs} (94%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/ContainerInstanceDeserializer.cs (62%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/ContainerRegistryDeserializer.cs (61%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/CosmosDbDeserializer.cs (61%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/GenericResourceDeserializer.cs (66%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/NetworkInterfaceDeserializer.cs (63%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/PostgreSqlDeserializer.cs (61%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/RedisCacheDeserializer.cs (61%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/ResourceDeserializer.cs (76%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/ServiceBusQueueDeserializer.cs (66%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/StorageQueueDeserializer.cs (66%) rename src/Promitor.Core.Scraping/Configuration/Serialization/{v2 => v1}/Providers/VirtualMachineDeserializer.cs (62%) delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Mapping/V2MappingProfile.cs delete mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Core/AggregationDeserializerTests.cs (88%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Core/AzureMetadataDeserializerTests.cs (96%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Core/AzureMetricConfigurationDeserializerTests.cs (86%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Core/MetricAggregationDeserializerTests.cs (92%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Core/MetricDefaultsDeserializerTests.cs (87%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Core/MetricDefinitionDeserializerTests.cs (90%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Core/ScrapingDeserializerTests.cs (87%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Core/SecretDeserializerTests.cs (92%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2/Core/V2DeserializerTests.cs => v1/Core/V1DeserializerTests.cs} (85%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/DeserializerTestHelpers.cs (99%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2/Mapping/MetricDefinitionV2MappingTests.cs => v1/Mapping/MetricDefinitionV1MappingTests.cs} (69%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/ContainerInstanceDeserializerTests.cs (77%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/ContainerRegistryDeserializerTests.cs (77%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/CosmosDbDeserializerTests.cs (77%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/GenericResourceDeserializerTests.cs (80%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/NetworkInterfaceDeserializerTests.cs (77%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/PostgreSqlDeserializerTests.cs (76%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/RedisCacheDeserializerTests.cs (77%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/ResourceDeserializerTestBase.cs (86%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/ServiceBusQueueDeserializerTests.cs (79%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/StorageQueueDeserializerTests.cs (78%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2 => v1}/Providers/VirtualMachineDeserializerTests.cs (76%) rename src/Promitor.Scraper.Tests.Unit/Serialization/{v2/V2IntegrationTests.cs => v1/V1IntegrationTests.cs} (86%) delete mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/ServiceBusQueueResourceDefinitionV2MappingTests.cs diff --git a/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs b/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs index 2f942226d..dcd5a953d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs +++ b/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs @@ -7,7 +7,7 @@ using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Providers.Interfaces; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; namespace Promitor.Core.Scraping.Configuration.Providers { @@ -16,7 +16,7 @@ public class MetricsDeclarationProvider : IMetricsDeclarationProvider private readonly ConfigurationSerializer _configurationSerializer; private readonly IConfiguration _configuration; - public MetricsDeclarationProvider(IConfiguration configuration, ILogger logger, IMapper mapper, IDeserializer v2Deserializer) + public MetricsDeclarationProvider(IConfiguration configuration, ILogger logger, IMapper mapper, IDeserializer v2Deserializer) { _configurationSerializer = new ConfigurationSerializer(logger, mapper, v2Deserializer); _configuration = configuration; @@ -43,7 +43,7 @@ public virtual MetricsDeclaration Get(bool applyDefaults = false) } if (metric.AzureMetricConfiguration?.Aggregation.Interval == null) { - metric.AzureMetricConfiguration.Aggregation.Interval = config.MetricDefaults.Aggregation.Interval; + metric.AzureMetricConfiguration.Aggregation.Interval = config.MetricDefaults.Aggregation?.Interval; } // Apply the default scraping interval if none is specified diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs index 2e381ae3a..5c33b28d7 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs @@ -7,7 +7,7 @@ using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Serialization.Yaml; using YamlDotNet.RepresentationModel; @@ -17,9 +17,9 @@ public class ConfigurationSerializer { private readonly ILogger _logger; private readonly IMapper _mapper; - private readonly IDeserializer _v2Deserializer; + private readonly IDeserializer _v2Deserializer; - public ConfigurationSerializer(ILogger logger, IMapper mapper, IDeserializer v2Deserializer) + public ConfigurationSerializer(ILogger logger, IMapper mapper, IDeserializer v2Deserializer) { _logger = logger; _mapper = mapper; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs similarity index 76% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs index e8b7f0752..fa6ec5a49 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AggregationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs @@ -1,11 +1,11 @@ using System; using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class AggregationDeserializer : Deserializer + public class AggregationDeserializer : Deserializer { private const string IntervalTag = "interval"; @@ -15,9 +15,9 @@ public AggregationDeserializer(ILogger logger) : base(logger) { } - public override AggregationV2 Deserialize(YamlMappingNode node) + public override AggregationV1 Deserialize(YamlMappingNode node) { - var aggregation = new AggregationV2 {Interval = GetTimespan(node, IntervalTag)}; + var aggregation = new AggregationV1 {Interval = GetTimespan(node, IntervalTag)}; if (aggregation.Interval == null) { diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs similarity index 74% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs index cd7ec7b44..b6d9780a5 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetadataDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs @@ -1,10 +1,10 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class AzureMetadataDeserializer : Deserializer + public class AzureMetadataDeserializer : Deserializer { private const string TenantIdTag = "tenantId"; private const string SubscriptionIdTag = "subscriptionId"; @@ -14,9 +14,9 @@ public AzureMetadataDeserializer(ILogger logger) : base(logger) { } - public override AzureMetadataV2 Deserialize(YamlMappingNode node) + public override AzureMetadataV1 Deserialize(YamlMappingNode node) { - var metadata = new AzureMetadataV2(); + var metadata = new AzureMetadataV1(); metadata.TenantId = GetString(node, TenantIdTag); metadata.SubscriptionId = GetString(node, SubscriptionIdTag); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetricConfigurationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs similarity index 66% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetricConfigurationDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs index bf613415c..4e9cea323 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureMetricConfigurationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs @@ -1,31 +1,31 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class AzureMetricConfigurationDeserializer : Deserializer + public class AzureMetricConfigurationDeserializer : Deserializer { private const string MetricNameTag = "metricName"; private const string AggregationTag = "aggregation"; - private readonly IDeserializer _aggregationDeserializer; + private readonly IDeserializer _aggregationDeserializer; - public AzureMetricConfigurationDeserializer(IDeserializer aggregationDeserializer, ILogger logger) + public AzureMetricConfigurationDeserializer(IDeserializer aggregationDeserializer, ILogger logger) : base(logger) { _aggregationDeserializer = aggregationDeserializer; } - public override AzureMetricConfigurationV2 Deserialize(YamlMappingNode node) + public override AzureMetricConfigurationV1 Deserialize(YamlMappingNode node) { - return new AzureMetricConfigurationV2 + return new AzureMetricConfigurationV1 { MetricName = GetString(node, MetricNameTag), Aggregation = DeserializeAggregation(node) }; } - private MetricAggregationV2 DeserializeAggregation(YamlMappingNode node) + private MetricAggregationV1 DeserializeAggregation(YamlMappingNode node) { if (node.Children.TryGetValue(AggregationTag, out var aggregationNode)) { diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureResourceDeserializerFactory.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureResourceDeserializerFactory.cs similarity index 83% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureResourceDeserializerFactory.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureResourceDeserializerFactory.cs index 69415c1c6..f292cfc97 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/AzureResourceDeserializerFactory.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureResourceDeserializerFactory.cs @@ -1,23 +1,23 @@ using System; using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { public class AzureResourceDeserializerFactory : IAzureResourceDeserializerFactory { - private readonly IDeserializer _secretDeserializer; + private readonly IDeserializer _secretDeserializer; private readonly ILogger _logger; - public AzureResourceDeserializerFactory(IDeserializer secretDeserializer, ILogger logger) + public AzureResourceDeserializerFactory(IDeserializer secretDeserializer, ILogger logger) { _secretDeserializer = secretDeserializer; _logger = logger; } - public IDeserializer GetDeserializerFor(ResourceType resourceType) + public IDeserializer GetDeserializerFor(ResourceType resourceType) { switch (resourceType) { diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IAzureResourceDeserializerFactory.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/IAzureResourceDeserializerFactory.cs similarity index 69% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IAzureResourceDeserializerFactory.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/IAzureResourceDeserializerFactory.cs index ed3c8429b..dcc9b2e44 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/IAzureResourceDeserializerFactory.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/IAzureResourceDeserializerFactory.cs @@ -1,10 +1,10 @@ using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { /// - /// A factory for creating deserializers that can create + /// A factory for creating deserializers that can create /// objects. /// public interface IAzureResourceDeserializerFactory @@ -14,6 +14,6 @@ public interface IAzureResourceDeserializerFactory /// /// The type of resource. /// The deserializer. - IDeserializer GetDeserializerFor(ResourceType resourceType); + IDeserializer GetDeserializerFor(ResourceType resourceType); } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs similarity index 70% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs index 907f8132d..7edbb6319 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricAggregationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs @@ -1,11 +1,11 @@ using Microsoft.Azure.Management.Monitor.Fluent.Models; using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class MetricAggregationDeserializer : Deserializer + public class MetricAggregationDeserializer : Deserializer { private const string TypeTag = "type"; private const string IntervalTag = "interval"; @@ -14,9 +14,9 @@ public MetricAggregationDeserializer(ILogger logger) : base(logger) { } - public override MetricAggregationV2 Deserialize(YamlMappingNode node) + public override MetricAggregationV1 Deserialize(YamlMappingNode node) { - return new MetricAggregationV2 + return new MetricAggregationV1 { Type = GetEnum(node, TypeTag), Interval = GetTimespan(node, IntervalTag) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs similarity index 67% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs index 70d995658..9da21c1c1 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefaultsDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs @@ -1,29 +1,29 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class MetricDefaultsDeserializer : Deserializer + public class MetricDefaultsDeserializer : Deserializer { private const string AggregationTag = "aggregation"; private const string ScrapingTag = "scraping"; - private readonly IDeserializer _aggregationDeserializer; - private readonly IDeserializer _scrapingDeserializer; + private readonly IDeserializer _aggregationDeserializer; + private readonly IDeserializer _scrapingDeserializer; public MetricDefaultsDeserializer( - IDeserializer aggregationDeserializer, - IDeserializer scrapingDeserializer, + IDeserializer aggregationDeserializer, + IDeserializer scrapingDeserializer, ILogger logger) : base(logger) { _aggregationDeserializer = aggregationDeserializer; _scrapingDeserializer = scrapingDeserializer; } - public override MetricDefaultsV2 Deserialize(YamlMappingNode node) + public override MetricDefaultsV1 Deserialize(YamlMappingNode node) { - var defaults = new MetricDefaultsV2(); + var defaults = new MetricDefaultsV1(); if (node.Children.TryGetValue(AggregationTag, out var aggregationNode)) { diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefinitionDeserializer.cs similarity index 83% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefinitionDeserializer.cs index 0cef7b8a8..1db0a47ac 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/MetricDefinitionDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefinitionDeserializer.cs @@ -1,11 +1,11 @@ using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class MetricDefinitionDeserializer : Deserializer + public class MetricDefinitionDeserializer : Deserializer { private const string NameTag = "name"; private const string DescriptionTag = "description"; @@ -15,12 +15,12 @@ public class MetricDefinitionDeserializer : Deserializer private const string ScrapingTag = "scraping"; private const string ResourcesTag = "resources"; - private readonly IDeserializer _azureMetricConfigurationDeserializer; - private readonly IDeserializer _scrapingDeserializer; + private readonly IDeserializer _azureMetricConfigurationDeserializer; + private readonly IDeserializer _scrapingDeserializer; private readonly IAzureResourceDeserializerFactory _azureResourceDeserializerFactory; - public MetricDefinitionDeserializer(IDeserializer azureMetricConfigurationDeserializer, - IDeserializer scrapingDeserializer, + public MetricDefinitionDeserializer(IDeserializer azureMetricConfigurationDeserializer, + IDeserializer scrapingDeserializer, IAzureResourceDeserializerFactory azureResourceDeserializerFactory, ILogger logger) : base(logger) { @@ -29,9 +29,9 @@ public MetricDefinitionDeserializer(IDeserializer az _azureResourceDeserializerFactory = azureResourceDeserializerFactory; } - public override MetricDefinitionV2 Deserialize(YamlMappingNode node) + public override MetricDefinitionV1 Deserialize(YamlMappingNode node) { - var metricDefinition = new MetricDefinitionV2 + var metricDefinition = new MetricDefinitionV1 { Name = GetString(node, NameTag), Description = GetString(node, DescriptionTag), @@ -46,7 +46,7 @@ public override MetricDefinitionV2 Deserialize(YamlMappingNode node) return metricDefinition; } - private void DeserializeAzureMetricConfiguration(YamlMappingNode node, MetricDefinitionV2 metricDefinition) + private void DeserializeAzureMetricConfiguration(YamlMappingNode node, MetricDefinitionV1 metricDefinition) { if (node.Children.TryGetValue(AzureMetricConfigurationTag, out var configurationNode)) { @@ -55,7 +55,7 @@ private void DeserializeAzureMetricConfiguration(YamlMappingNode node, MetricDef } } - private void DeserializeScraping(YamlMappingNode node, MetricDefinitionV2 metricDefinition) + private void DeserializeScraping(YamlMappingNode node, MetricDefinitionV1 metricDefinition) { if (node.Children.TryGetValue(ScrapingTag, out var scrapingNode)) { @@ -63,7 +63,7 @@ private void DeserializeScraping(YamlMappingNode node, MetricDefinitionV2 metric } } - private void DeserializeMetrics(YamlMappingNode node, MetricDefinitionV2 metricDefinition) + private void DeserializeMetrics(YamlMappingNode node, MetricDefinitionV1 metricDefinition) { if (metricDefinition.ResourceType != null && metricDefinition.ResourceType != ResourceType.NotSpecified && diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs similarity index 70% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs index c422fa482..d78775331 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/ScrapingDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs @@ -1,10 +1,10 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class ScrapingDeserializer : Deserializer + public class ScrapingDeserializer : Deserializer { private const string ScheduleTag = "schedule"; @@ -12,9 +12,9 @@ public ScrapingDeserializer(ILogger logger) : base(logger) { } - public override ScrapingV2 Deserialize(YamlMappingNode node) + public override ScrapingV1 Deserialize(YamlMappingNode node) { - var scraping = new ScrapingV2(); + var scraping = new ScrapingV1(); scraping.Schedule = GetString(node, ScheduleTag); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/SecretDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs similarity index 73% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/SecretDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs index eb2b1d9af..024515f43 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/SecretDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs @@ -1,10 +1,10 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class SecretDeserializer : Deserializer + public class SecretDeserializer : Deserializer { private const string RawValueTag = "rawValue"; private const string EnvironmentVariableTag = "environmentVariable"; @@ -13,9 +13,9 @@ public SecretDeserializer(ILogger logger) : base(logger) { } - public override SecretV2 Deserialize(YamlMappingNode node) + public override SecretV1 Deserialize(YamlMappingNode node) { - var secret = new SecretV2 + var secret = new SecretV1 { RawValue = GetString(node, RawValueTag), EnvironmentVariable = GetString(node, EnvironmentVariableTag) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs similarity index 73% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs index d3f6cae6f..a8905837c 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Core/V2Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/V1Deserializer.cs @@ -1,20 +1,20 @@ using System.Collections.Generic; using Microsoft.Extensions.Logging; using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Core +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Core { - public class V2Deserializer : Deserializer + public class V1Deserializer : Deserializer { - private readonly IDeserializer _azureMetadataDeserializer; - private readonly IDeserializer _defaultsDeserializer; - private readonly IDeserializer _metricsDeserializer; + private readonly IDeserializer _azureMetadataDeserializer; + private readonly IDeserializer _defaultsDeserializer; + private readonly IDeserializer _metricsDeserializer; - public V2Deserializer(IDeserializer azureMetadataDeserializer, - IDeserializer defaultsDeserializer, - IDeserializer metricsDeserializer, + public V1Deserializer(IDeserializer azureMetadataDeserializer, + IDeserializer defaultsDeserializer, + IDeserializer metricsDeserializer, ILogger logger) : base(logger) { _azureMetadataDeserializer = azureMetadataDeserializer; @@ -22,7 +22,7 @@ public V2Deserializer(IDeserializer azureMetadataDeserializer, _metricsDeserializer = metricsDeserializer; } - public override MetricsDeclarationV2 Deserialize(YamlMappingNode rootNode) + public override MetricsDeclarationV1 Deserialize(YamlMappingNode rootNode) { ValidateVersion(rootNode); @@ -30,7 +30,7 @@ public override MetricsDeclarationV2 Deserialize(YamlMappingNode rootNode) var metricDefaults = DeserializeMetricDefaults(rootNode); var metrics = DeserializeMetrics(rootNode); - return new MetricsDeclarationV2 + return new MetricsDeclarationV1 { Version = SpecVersion.v1.ToString(), AzureMetadata = azureMetadata, @@ -53,7 +53,7 @@ private static void ValidateVersion(YamlMappingNode rootNode) } } - private AzureMetadataV2 DeserializeAzureMetadata(YamlMappingNode rootNode) + private AzureMetadataV1 DeserializeAzureMetadata(YamlMappingNode rootNode) { if (rootNode.Children.TryGetValue("azureMetadata", out var azureMetadataNode)) { @@ -63,7 +63,7 @@ private AzureMetadataV2 DeserializeAzureMetadata(YamlMappingNode rootNode) return null; } - private MetricDefaultsV2 DeserializeMetricDefaults(YamlMappingNode rootNode) + private MetricDefaultsV1 DeserializeMetricDefaults(YamlMappingNode rootNode) { if (rootNode.Children.TryGetValue("metricDefaults", out var defaultsNode)) { @@ -73,7 +73,7 @@ private MetricDefaultsV2 DeserializeMetricDefaults(YamlMappingNode rootNode) return null; } - private List DeserializeMetrics(YamlMappingNode rootNode) + private List DeserializeMetrics(YamlMappingNode rootNode) { if (rootNode.Children.TryGetValue("metrics", out var metricsNode)) { diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs new file mode 100644 index 000000000..39d151281 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Mapping/V1MappingProfile.cs @@ -0,0 +1,53 @@ +using AutoMapper; +using Promitor.Core.Scraping.Configuration.Model; +using Promitor.Core.Scraping.Configuration.Model.Metrics; +using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping +{ + public class V1MappingProfile : Profile + { + public V1MappingProfile() + { + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap() + .ForCtorParam("ns", o => o.MapFrom(s => s.Namespace)); + CreateMap(); + CreateMap(); + + CreateMap(); + + CreateMap() + .ForMember(m => m.PrometheusMetricDefinition, o => o.MapFrom(v1 => v1)); + + CreateMap() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include() + .Include(); + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs similarity index 76% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs index 9b6ed5b65..767236955 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AggregationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs @@ -1,11 +1,11 @@ using System; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { /// /// Contains aggregation settings used when querying Azure metrics. /// - public class AggregationV2 + public class AggregationV1 { /// /// The aggregation interval to use when querying Azure metrics. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetadataV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetadataV1.cs similarity index 54% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetadataV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetadataV1.cs index 6788f0dc2..cdaf01c9f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetadataV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetadataV1.cs @@ -1,8 +1,6 @@ -using System.Collections.Generic; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { - public class AzureMetadataV2 + public class AzureMetadataV1 { public string TenantId { get; set; } public string SubscriptionId { get; set; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetricConfigurationV1.cs similarity index 72% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetricConfigurationV1.cs index 15dafcbce..02154aaf2 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureMetricConfigurationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureMetricConfigurationV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { - public class AzureMetricConfigurationV2 + public class AzureMetricConfigurationV1 { /// /// The name of the Azure metric to scrape. @@ -10,6 +10,6 @@ public class AzureMetricConfigurationV2 /// /// The settings for how the metric should be aggregated before being returned from Azure. /// - public MetricAggregationV2 Aggregation { get; set; } = new MetricAggregationV2(); + public MetricAggregationV1 Aggregation { get; set; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureResourceDefinitionV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureResourceDefinitionV1.cs similarity index 81% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureResourceDefinitionV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureResourceDefinitionV1.cs index d93117382..f744c0495 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/AzureResourceDefinitionV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AzureResourceDefinitionV1.cs @@ -1,9 +1,9 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { /// /// Represents an Azure resource that can be scraped. /// - public class AzureResourceDefinitionV2 + public class AzureResourceDefinitionV1 { public string ResourceGroupName { get; set; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs similarity index 81% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs index 4366fa6ed..081dae2b4 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricAggregationV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs @@ -1,12 +1,12 @@ using System; using Microsoft.Azure.Management.Monitor.Fluent.Models; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { /// /// Contains aggregation settings for a single metric (vs the global aggregation settings). /// - public class MetricAggregationV2 + public class MetricAggregationV1 { public AggregationType? Type { get; set; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefaultsV1.cs similarity index 67% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefaultsV1.cs index 9230fbd31..df12d2c66 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefaultsV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefaultsV1.cs @@ -1,18 +1,18 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { /// /// Contains default settings that apply to all metrics. /// - public class MetricDefaultsV2 + public class MetricDefaultsV1 { /// /// The default aggregation settings to use when querying metrics from Azure. /// - public AggregationV2 Aggregation { get; set; } = new AggregationV2(); + public AggregationV1 Aggregation { get; set; } /// /// The default scraping settings. /// - public ScrapingV2 Scraping { get; set; } = new ScrapingV2(); + public ScrapingV1 Scraping { get; set; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefinitionV1.cs similarity index 70% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefinitionV1.cs index 72ae64a77..87f3eecf3 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricDefinitionV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricDefinitionV1.cs @@ -1,13 +1,13 @@ using System.Collections.Generic; using Promitor.Core.Scraping.Configuration.Model; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { /// /// Contains the definition for a prometheus metric, along with the resources /// that should be scraped to supply the metric. /// - public class MetricDefinitionV2 + public class MetricDefinitionV1 { /// /// The name of the prometheus metric. @@ -27,21 +27,21 @@ public class MetricDefinitionV2 /// /// Any prometheus labels that should be added to the metric. /// - public Dictionary Labels { get; set; } = new Dictionary(); + public Dictionary Labels { get; set; } /// /// Contains the configuration used when querying Azure metrics. /// - public AzureMetricConfigurationV2 AzureMetricConfiguration { get; set; } = new AzureMetricConfigurationV2(); + public AzureMetricConfigurationV1 AzureMetricConfiguration { get; set; } /// /// Allows a custom scraping schedule to be specified for the metric. /// - public ScrapingV2 Scraping { get; set; } = new ScrapingV2(); + public ScrapingV1 Scraping { get; set; } /// /// The resources to be scraped. /// - public List Resources { get; set; } = new List(); + public List Resources { get; set; } } } \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs new file mode 100644 index 000000000..e1dc6891d --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricsDeclarationV1.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using Promitor.Core.Scraping.Configuration.Serialization.Enum; + +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model +{ + /// + /// Represents the metrics configuration file. + /// + public class MetricsDeclarationV1 + { + public string Version { get; set; } = SpecVersion.v1.ToString(); + public AzureMetadataV1 AzureMetadata { get; set; } + public MetricDefaultsV1 MetricDefaults { get; set; } + public List Metrics { get; set; } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerInstanceResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerInstanceResourceV1.cs similarity index 57% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerInstanceResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerInstanceResourceV1.cs index 88d00a31e..344c1d409 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerInstanceResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerInstanceResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class ContainerInstanceResourceV2 : AzureResourceDefinitionV2 + public class ContainerInstanceResourceV1 : AzureResourceDefinitionV1 { public string ContainerGroup { get; set; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerRegistryResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerRegistryResourceV1.cs similarity index 57% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerRegistryResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerRegistryResourceV1.cs index 7d5441b25..3efc3179d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ContainerRegistryResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerRegistryResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class ContainerRegistryResourceV2 : AzureResourceDefinitionV2 + public class ContainerRegistryResourceV1 : AzureResourceDefinitionV1 { public string RegistryName { get; set; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/CosmosDbResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/CosmosDbResourceV1.cs similarity index 70% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/CosmosDbResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/CosmosDbResourceV1.cs index 017cb4aac..059939252 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/CosmosDbResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/CosmosDbResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class CosmosDbResourceV2 : AzureResourceDefinitionV2 + public class CosmosDbResourceV1 : AzureResourceDefinitionV1 { /// /// The cosmos database name. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/GenericResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/GenericResourceV1.cs similarity index 81% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/GenericResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/GenericResourceV1.cs index b2bfbeef6..142c7afd7 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/GenericResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/GenericResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class GenericResourceV2 : AzureResourceDefinitionV2 + public class GenericResourceV1 : AzureResourceDefinitionV1 { /// /// The filter for the Azure metric query. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/NetworkInterfaceResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/NetworkInterfaceResourceV1.cs similarity index 71% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/NetworkInterfaceResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/NetworkInterfaceResourceV1.cs index e9944da1a..2aaf1ccd1 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/NetworkInterfaceResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/NetworkInterfaceResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class NetworkInterfaceResourceV2 : AzureResourceDefinitionV2 + public class NetworkInterfaceResourceV1 : AzureResourceDefinitionV1 { /// /// The name of the network interface to scrape. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/PostgreSqlResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/PostgreSqlResourceV1.cs similarity index 70% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/PostgreSqlResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/PostgreSqlResourceV1.cs index 929d5d2fc..68e72d79f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/PostgreSqlResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/PostgreSqlResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class PostgreSqlResourceV2 : AzureResourceDefinitionV2 + public class PostgreSqlResourceV1 : AzureResourceDefinitionV1 { /// /// The postgre server name. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/RedisCacheResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/RedisCacheResourceV1.cs similarity index 70% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/RedisCacheResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/RedisCacheResourceV1.cs index e6f53ab55..a5c6bc4cf 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/RedisCacheResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/RedisCacheResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class RedisCacheResourceV2 : AzureResourceDefinitionV2 + public class RedisCacheResourceV1 : AzureResourceDefinitionV1 { /// /// The name of the redis cache. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ServiceBusQueueResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ServiceBusQueueResourceV1.cs similarity index 78% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ServiceBusQueueResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ServiceBusQueueResourceV1.cs index ea620c216..6adf58e9d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/ServiceBusQueueResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ServiceBusQueueResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class ServiceBusQueueResourceV2 : AzureResourceDefinitionV2 + public class ServiceBusQueueResourceV1 : AzureResourceDefinitionV1 { /// /// The service bus queue to scrape. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/StorageQueueResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/StorageQueueResourceV1.cs similarity index 76% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/StorageQueueResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/StorageQueueResourceV1.cs index 671607743..8e572077f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/StorageQueueResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/StorageQueueResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class StorageQueueResourceV2 : AzureResourceDefinitionV2 + public class StorageQueueResourceV1 : AzureResourceDefinitionV1 { /// /// The storage queue account name. @@ -15,6 +15,6 @@ public class StorageQueueResourceV2 : AzureResourceDefinitionV2 /// /// The SAS token for accessing the queue. /// - public SecretV2 SasToken { get; set; } + public SecretV1 SasToken { get; set; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/VirtualMachineResourceV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/VirtualMachineResourceV1.cs similarity index 72% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/VirtualMachineResourceV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/VirtualMachineResourceV1.cs index 4f51443e9..a0d57a760 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ResourceTypes/VirtualMachineResourceV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/VirtualMachineResourceV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { - public class VirtualMachineResourceV2 : AzureResourceDefinitionV2 + public class VirtualMachineResourceV1 : AzureResourceDefinitionV1 { /// /// The name of the virtual machine to get metrics for. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ScrapingV1.cs similarity index 90% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ScrapingV1.cs index 08e964c3a..1fac53d30 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/ScrapingV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ScrapingV1.cs @@ -1,9 +1,9 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { /// /// Contains settings about how promitor scrapes Azure metrics. /// - public class ScrapingV2 + public class ScrapingV1 { /// /// A cron expression describing how often scrapes should occur. diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/SecretV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/SecretV1.cs similarity index 94% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/SecretV2.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/SecretV1.cs index ab5bcedb7..66fa8154e 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/SecretV2.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/SecretV1.cs @@ -1,6 +1,6 @@ -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model { - public class SecretV2 + public class SecretV1 { /// /// The value of the secret. If you don't want to put the secret value directly diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceDeserializer.cs similarity index 62% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceDeserializer.cs index 7f7c33f7f..5b6895169 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerInstanceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class ContainerInstanceDeserializer : ResourceDeserializer { @@ -13,9 +13,9 @@ public ContainerInstanceDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new ContainerInstanceResourceV2 + return new ContainerInstanceResourceV1 { ContainerGroup = GetString(node, ContainerGroupTag) }; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerRegistryDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryDeserializer.cs similarity index 61% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerRegistryDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryDeserializer.cs index 1b403b743..b11560924 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ContainerRegistryDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class ContainerRegistryDeserializer : ResourceDeserializer { @@ -13,9 +13,9 @@ public ContainerRegistryDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new ContainerRegistryResourceV2 + return new ContainerRegistryResourceV1 { RegistryName = GetString(node, RegistryNameTag) }; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/CosmosDbDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbDeserializer.cs similarity index 61% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/CosmosDbDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbDeserializer.cs index 526e15dfc..5ecb4e22d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/CosmosDbDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class CosmosDbDeserializer : ResourceDeserializer { @@ -13,9 +13,9 @@ public CosmosDbDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new CosmosDbResourceV2 + return new CosmosDbResourceV1 { DbName = GetString(node, DatabaseNameTag) }; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/GenericResourceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericResourceDeserializer.cs similarity index 66% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/GenericResourceDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericResourceDeserializer.cs index 20747fd5d..dc99d2917 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/GenericResourceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericResourceDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class GenericResourceDeserializer : ResourceDeserializer { @@ -14,9 +14,9 @@ public GenericResourceDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new GenericResourceV2 + return new GenericResourceV1 { Filter = GetString(node, FilterTag), ResourceUri = GetString(node, ResourceUriTag) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/NetworkInterfaceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceDeserializer.cs similarity index 63% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/NetworkInterfaceDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceDeserializer.cs index 7c3f0e581..fe0ab407b 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/NetworkInterfaceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class NetworkInterfaceDeserializer : ResourceDeserializer { @@ -13,9 +13,9 @@ public NetworkInterfaceDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new NetworkInterfaceResourceV2 + return new NetworkInterfaceResourceV1 { NetworkInterfaceName = GetString(node, NetworkInterfaceNameTag) }; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/PostgreSqlDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlDeserializer.cs similarity index 61% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/PostgreSqlDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlDeserializer.cs index 97af6ecc2..e0a5e2447 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/PostgreSqlDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class PostgreSqlDeserializer : ResourceDeserializer { @@ -13,9 +13,9 @@ public PostgreSqlDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new PostgreSqlResourceV2 + return new PostgreSqlResourceV1 { ServerName = GetString(node, ServerNameTag) }; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/RedisCacheDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheDeserializer.cs similarity index 61% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/RedisCacheDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheDeserializer.cs index 24a12d739..2b2009295 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/RedisCacheDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class RedisCacheDeserializer : ResourceDeserializer { @@ -13,9 +13,9 @@ public RedisCacheDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new RedisCacheResourceV2 + return new RedisCacheResourceV1 { CacheName = GetString(node, CacheNameTag) }; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ResourceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ResourceDeserializer.cs similarity index 76% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ResourceDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ResourceDeserializer.cs index 7639d33b6..a57aba40a 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ResourceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ResourceDeserializer.cs @@ -1,14 +1,14 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { /// /// A base class for azure resource deserializers that makes sure that any shared /// properties are deserialized correctly for all resources. /// - public abstract class ResourceDeserializer : Deserializer + public abstract class ResourceDeserializer : Deserializer { private const string ResourceGroupNameTag = "resourceGroupName"; @@ -16,7 +16,7 @@ protected ResourceDeserializer(ILogger logger) : base(logger) { } - public override AzureResourceDefinitionV2 Deserialize(YamlMappingNode node) + public override AzureResourceDefinitionV1 Deserialize(YamlMappingNode node) { var resource = DeserializeResource(node); @@ -26,11 +26,11 @@ public override AzureResourceDefinitionV2 Deserialize(YamlMappingNode node) } /// - /// Implement on subclasses to return the correct type of + /// Implement on subclasses to return the correct type of /// object with all its custom properties populated. /// /// The yaml node. /// The deserialized object. - protected abstract AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node); + protected abstract AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node); } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ServiceBusQueueDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueDeserializer.cs similarity index 66% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ServiceBusQueueDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueDeserializer.cs index f73380e46..fbf4a051a 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/ServiceBusQueueDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class ServiceBusQueueDeserializer : ResourceDeserializer { @@ -14,9 +14,9 @@ public ServiceBusQueueDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new ServiceBusQueueResourceV2 + return new ServiceBusQueueResourceV1 { QueueName = GetString(node, QueueNameTag), Namespace = GetString(node, NamespaceTag) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/StorageQueueDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueDeserializer.cs similarity index 66% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/StorageQueueDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueDeserializer.cs index c776f3285..ec6d0f753 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/StorageQueueDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class StorageQueueDeserializer : ResourceDeserializer { @@ -11,16 +11,16 @@ public class StorageQueueDeserializer : ResourceDeserializer private const string QueueNameTag = "queueName"; private const string SasTokenTag = "sasToken"; - private readonly IDeserializer _secretDeserializer; + private readonly IDeserializer _secretDeserializer; - public StorageQueueDeserializer(IDeserializer secretDeserializer, ILogger logger) : base(logger) + public StorageQueueDeserializer(IDeserializer secretDeserializer, ILogger logger) : base(logger) { _secretDeserializer = secretDeserializer; } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new StorageQueueResourceV2 + return new StorageQueueResourceV1 { AccountName = GetString(node, AccountNameTag), QueueName = GetString(node, QueueNameTag), @@ -28,7 +28,7 @@ protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode }; } - private SecretV2 DeserializeSasToken(YamlMappingNode node) + private SecretV1 DeserializeSasToken(YamlMappingNode node) { if (node.Children.TryGetValue(SasTokenTag, out var sasTokenNode)) { diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/VirtualMachineDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineDeserializer.cs similarity index 62% rename from src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/VirtualMachineDeserializer.cs rename to src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineDeserializer.cs index fcc2128b6..e1489b3f4 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Providers/VirtualMachineDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineDeserializer.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Logging; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using YamlDotNet.RepresentationModel; -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Providers +namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Providers { public class VirtualMachineDeserializer : ResourceDeserializer { @@ -13,9 +13,9 @@ public VirtualMachineDeserializer(ILogger logger) : base(logger) { } - protected override AzureResourceDefinitionV2 DeserializeResource(YamlMappingNode node) + protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { - return new VirtualMachineResourceV2 + return new VirtualMachineResourceV1 { VirtualMachineName = GetString(node, VirtualMachineNameTag) }; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Mapping/V2MappingProfile.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Mapping/V2MappingProfile.cs deleted file mode 100644 index ebaa63ecd..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Mapping/V2MappingProfile.cs +++ /dev/null @@ -1,53 +0,0 @@ -using AutoMapper; -using Promitor.Core.Scraping.Configuration.Model; -using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping -{ - public class V2MappingProfile : Profile - { - public V2MappingProfile() - { - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap() - .ForCtorParam("ns", o => o.MapFrom(s => s.Namespace)); - CreateMap(); - CreateMap(); - - CreateMap(); - - CreateMap() - .ForMember(m => m.PrometheusMetricDefinition, o => o.MapFrom(v2 => v2)); - - CreateMap() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include() - .Include(); - } - } -} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs deleted file mode 100644 index 07920cdec..000000000 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v2/Model/MetricsDeclarationV2.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using Promitor.Core.Scraping.Configuration.Serialization.Enum; - -namespace Promitor.Core.Scraping.Configuration.Serialization.v2.Model -{ - /// - /// Represents the metrics configuration file. - /// - public class MetricsDeclarationV2 - { - public string Version { get; set; } = SpecVersion.v1.ToString(); - public AzureMetadataV2 AzureMetadata { get; set; } - public MetricDefaultsV2 MetricDefaults { get; set; } - public List Metrics { get; set; } - } -} diff --git a/src/Promitor.Scraper.Host/Extensions/IServiceCollectionExtensions.cs b/src/Promitor.Scraper.Host/Extensions/IServiceCollectionExtensions.cs index e0c0a2498..983bb1415 100644 --- a/src/Promitor.Scraper.Host/Extensions/IServiceCollectionExtensions.cs +++ b/src/Promitor.Scraper.Host/Extensions/IServiceCollectionExtensions.cs @@ -15,8 +15,8 @@ using Promitor.Core.Configuration.Model.Telemetry; using Promitor.Core.Configuration.Model.Telemetry.Sinks; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Factories; using Promitor.Core.Scraping.Prometheus; using Promitor.Core.Scraping.Prometheus.Interfaces; @@ -81,16 +81,16 @@ public static IServiceCollection DefineDependencies(this IServiceCollection serv services.AddTransient(); services.AddTransient(); - services.AddSingleton, V2Deserializer>(); - services.AddSingleton, AzureMetadataDeserializer>(); - services.AddSingleton, MetricDefaultsDeserializer>(); - services.AddSingleton, MetricDefinitionDeserializer>(); - services.AddSingleton, AggregationDeserializer>(); - services.AddSingleton, ScrapingDeserializer>(); - services.AddSingleton, AzureMetricConfigurationDeserializer>(); + services.AddSingleton, V1Deserializer>(); + services.AddSingleton, AzureMetadataDeserializer>(); + services.AddSingleton, MetricDefaultsDeserializer>(); + services.AddSingleton, MetricDefinitionDeserializer>(); + services.AddSingleton, AggregationDeserializer>(); + services.AddSingleton, ScrapingDeserializer>(); + services.AddSingleton, AzureMetricConfigurationDeserializer>(); services.AddSingleton(); - services.AddSingleton, MetricAggregationDeserializer>(); - services.AddSingleton, SecretDeserializer>(); + services.AddSingleton, MetricAggregationDeserializer>(); + services.AddSingleton, SecretDeserializer>(); return services; } diff --git a/src/Promitor.Scraper.Host/Startup.cs b/src/Promitor.Scraper.Host/Startup.cs index 2b7be45a6..c99940f24 100644 --- a/src/Promitor.Scraper.Host/Startup.cs +++ b/src/Promitor.Scraper.Host/Startup.cs @@ -4,7 +4,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Promitor.Core.Configuration.Model.Prometheus; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Host.Extensions; using Promitor.Scraper.Host.Validation; @@ -39,7 +39,7 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.AddAutoMapper(typeof(V2MappingProfile).Assembly) + services.AddAutoMapper(typeof(V1MappingProfile).Assembly) .DefineDependencies() .ConfigureYamlConfiguration(_configuration) .UseWebApi() diff --git a/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs b/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs index 4de129de2..34dc7fcd1 100644 --- a/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs +++ b/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs @@ -7,7 +7,7 @@ using Promitor.Core.Configuration.Model.Metrics; using Promitor.Core.Scraping.Configuration.Providers; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Telemetry.Loggers; using Promitor.Scraper.Host.Validation.Exceptions; using Promitor.Scraper.Host.Validation.Interfaces; @@ -27,7 +27,7 @@ public RuntimeValidator( ValidationLogger validatorLogger, IConfiguration configuration, IMapper mapper, - IDeserializer v2Deserializer) + IDeserializer v2Deserializer) { _validationLogger = validatorLogger; diff --git a/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs b/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs index 9163d294a..7d19f3509 100644 --- a/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs +++ b/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs @@ -7,32 +7,32 @@ using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.Enum; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using Promitor.Integrations.AzureStorage; namespace Promitor.Scraper.Tests.Unit.Builders.Metrics.v1 { public class MetricsDeclarationBuilder { - private readonly AzureMetadataV2 _azureMetadata; - private readonly List _metrics = new List(); - private MetricDefaultsV2 _metricDefaults = new MetricDefaultsV2 + private readonly AzureMetadataV1 _azureMetadata; + private readonly List _metrics = new List(); + private MetricDefaultsV1 _metricDefaults = new MetricDefaultsV1 { - Scraping = new ScrapingV2 { Schedule = @"0 * * ? * *" } + Scraping = new ScrapingV1 { Schedule = @"0 * * ? * *" } }; - private V2Deserializer _v2Deserializer; + private V1Deserializer _v1Deserializer; - public MetricsDeclarationBuilder(AzureMetadataV2 azureMetadata) + public MetricsDeclarationBuilder(AzureMetadataV1 azureMetadata) { _azureMetadata = azureMetadata; } public static MetricsDeclarationBuilder WithMetadata(string tenantId = "tenantId", string subscriptionId = "subscriptionId", string resourceGroupName = "resourceGroupName") { - var azureMetadata = new AzureMetadataV2 + var azureMetadata = new AzureMetadataV1 { TenantId = tenantId, SubscriptionId = subscriptionId, @@ -47,7 +47,7 @@ public static MetricsDeclarationBuilder WithoutMetadata() return new MetricsDeclarationBuilder(azureMetadata: null); } - public MetricsDeclarationBuilder WithDefaults(MetricDefaultsV2 defaults) + public MetricsDeclarationBuilder WithDefaults(MetricDefaultsV1 defaults) { _metricDefaults = defaults; @@ -56,7 +56,7 @@ public MetricsDeclarationBuilder WithDefaults(MetricDefaultsV2 defaults) public string Build(IMapper mapper) { - var metricsDeclaration = new MetricsDeclarationV2 + var metricsDeclaration = new MetricsDeclarationV1 { Version = SpecVersion.v1.ToString(), AzureMetadata = _azureMetadata, @@ -66,7 +66,7 @@ public string Build(IMapper mapper) var logger = new Mock(); - _v2Deserializer = new V2Deserializer( + _v1Deserializer = new V1Deserializer( new AzureMetadataDeserializer(logger.Object), new MetricDefaultsDeserializer( new AggregationDeserializer(logger.Object), @@ -81,25 +81,25 @@ public string Build(IMapper mapper) logger.Object), logger.Object); - var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper, _v2Deserializer); + var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper, _v1Deserializer); return configurationSerializer.Serialize(metricsDeclaration); } public MetricsDeclarationBuilder WithServiceBusMetric(string metricName = "promitor-service-bus", string metricDescription = "Description for a metric", string queueName = "promitor-queue", string serviceBusNamespace = "promitor-namespace", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new ServiceBusQueueResourceV2 + var resource = new ServiceBusQueueResourceV1 { QueueName = queueName, Namespace = serviceBusNamespace }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.ServiceBusQueue }; @@ -111,17 +111,17 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithContainerInstanceMetric(string metricName = "promitor-container-instance", string metricDescription = "Description for a metric", string containerGroup = "promitor-group", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new ContainerInstanceResourceV2 + var resource = new ContainerInstanceResourceV1 { ContainerGroup = containerGroup }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.ContainerInstance }; @@ -133,17 +133,17 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithContainerRegistryMetric(string metricName = "promitor-container-registry", string metricDescription = "Description for a metric", string registryName = "promitor-container-registry", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new ContainerRegistryResourceV2 + var resource = new ContainerRegistryResourceV1 { RegistryName = registryName }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.ContainerRegistry }; @@ -155,17 +155,17 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithCosmosDbMetric(string metricName = "promitor-cosmosdb", string metricDescription = "Description for a metric", string dbName = "promitor-cosmosdb", string azureMetricName = "TotalRequests") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new CosmosDbResourceV2 + var resource = new CosmosDbResourceV1 { DbName = dbName }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.CosmosDb }; @@ -177,24 +177,24 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithAzureStorageQueueMetric(string metricName = "promitor", string metricDescription = "Description for a metric", string queueName = "promitor-queue", string accountName = "promitor-account", string sasToken = "?sig=promitor", string azureMetricName = AzureStorageConstants.Queues.Metrics.MessageCount) { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var secret = new SecretV2 + var secret = new SecretV1 { RawValue = sasToken }; - var resource = new StorageQueueResourceV2 + var resource = new StorageQueueResourceV1 { QueueName = queueName, AccountName = accountName, SasToken = secret }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List { resource }, + Resources = new List { resource }, ResourceType = ResourceType.StorageQueue }; @@ -206,17 +206,17 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithVirtualMachineMetric(string metricName = "promitor-virtual-machine", string metricDescription = "Description for a metric", string virtualMachineName = "promitor-virtual-machine-name", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new VirtualMachineResourceV2 + var resource = new VirtualMachineResourceV1 { VirtualMachineName = virtualMachineName }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.VirtualMachine }; @@ -228,17 +228,17 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithNetworkInterfaceMetric(string metricName = "promitor-network-interface", string metricDescription = "Description for a metric", string networkInterfaceName = "promitor-network-interface-name", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new NetworkInterfaceResourceV2 + var resource = new NetworkInterfaceResourceV1 { NetworkInterfaceName = networkInterfaceName }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.NetworkInterface }; @@ -250,18 +250,18 @@ public string Build(IMapper mapper) public MetricsDeclarationBuilder WithGenericMetric(string metricName = "foo", string metricDescription = "Description for a metric", string resourceUri = "Microsoft.ServiceBus/namespaces/promitor-messaging", string filter = "EntityName eq \'orders\'", string azureMetricName = "Total") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new GenericResourceV2 + var resource = new GenericResourceV1 { ResourceUri = resourceUri, Filter = filter }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.Generic }; @@ -270,12 +270,12 @@ public string Build(IMapper mapper) return this; } - private AzureMetricConfigurationV2 CreateAzureMetricConfiguration(string azureMetricName) + private AzureMetricConfigurationV1 CreateAzureMetricConfiguration(string azureMetricName) { - return new AzureMetricConfigurationV2 + return new AzureMetricConfigurationV1 { MetricName = azureMetricName, - Aggregation = new MetricAggregationV2 + Aggregation = new MetricAggregationV1 { Type = AggregationType.Average } @@ -285,17 +285,17 @@ private AzureMetricConfigurationV2 CreateAzureMetricConfiguration(string azureMe public MetricsDeclarationBuilder WithRedisCacheMetric(string metricName = "promitor-redis", string metricDescription = "Description for a metric", string cacheName = "promitor-redis", string azureMetricName = "CacheHits") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new RedisCacheResourceV2 + var resource = new RedisCacheResourceV1 { CacheName = cacheName }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.RedisCache }; @@ -307,17 +307,17 @@ private AzureMetricConfigurationV2 CreateAzureMetricConfiguration(string azureMe public MetricsDeclarationBuilder WithPostgreSqlMetric(string metricName = "promitor-postgresql", string metricDescription = "Description for a metric", string serverName = "promitor-postgresql", string azureMetricName = "cpu_percent") { var azureMetricConfiguration = CreateAzureMetricConfiguration(azureMetricName); - var resource = new PostgreSqlResourceV2 + var resource = new PostgreSqlResourceV1 { ServerName = serverName }; - var metric = new MetricDefinitionV2 + var metric = new MetricDefinitionV1 { Name = metricName, Description = metricDescription, AzureMetricConfiguration = azureMetricConfiguration, - Resources = new List {resource}, + Resources = new List {resource}, ResourceType = ResourceType.PostgreSql }; diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/AutoMapperTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/AutoMapperTests.cs index c5251d3a2..d4a0552f4 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/AutoMapperTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/AutoMapperTests.cs @@ -1,5 +1,5 @@ using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Xunit; namespace Promitor.Scraper.Tests.Unit.Serialization @@ -10,7 +10,7 @@ public class AutoMapperTests public void VerifyConfigurationsAreValid() { // Arrange - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); // Act / Assert mapperConfiguration.AssertConfigurationIsValid(); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AggregationDeserializerTests.cs similarity index 88% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AggregationDeserializerTests.cs index f53f70c30..1b0212e93 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AggregationDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AggregationDeserializerTests.cs @@ -2,11 +2,10 @@ using System.ComponentModel; using Microsoft.Extensions.Logging; using Moq; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; -using YamlDotNet.RepresentationModel; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] public class AggregationDeserializerTests diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetadataDeserializerTests.cs similarity index 96% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetadataDeserializerTests.cs index 49f05f394..d38d20f3e 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetadataDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetadataDeserializerTests.cs @@ -1,10 +1,10 @@ using System.ComponentModel; using Microsoft.Extensions.Logging; using Moq; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] public class AzureMetadataDeserializerTests diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetricConfigurationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetricConfigurationDeserializerTests.cs similarity index 86% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetricConfigurationDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetricConfigurationDeserializerTests.cs index cd4bdd727..3eb7c301c 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/AzureMetricConfigurationDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetricConfigurationDeserializerTests.cs @@ -2,22 +2,22 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Xunit; using YamlDotNet.RepresentationModel; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] public class AzureMetricConfigurationDeserializerTests { private readonly AzureMetricConfigurationDeserializer _deserializer; - private readonly Mock> _aggregationDeserializer; + private readonly Mock> _aggregationDeserializer; public AzureMetricConfigurationDeserializerTests() { - _aggregationDeserializer = new Mock>(); + _aggregationDeserializer = new Mock>(); _deserializer = new AzureMetricConfigurationDeserializer(_aggregationDeserializer.Object, new Mock().Object); } @@ -51,7 +51,7 @@ public void Deserialize_AggregationSupplied_UsesDeserializer() var node = YamlUtils.CreateYamlNode(yamlText); var aggregationNode = (YamlMappingNode) node.Children["aggregation"]; - var aggregation = new MetricAggregationV2(); + var aggregation = new MetricAggregationV1(); _aggregationDeserializer.Setup(d => d.Deserialize(aggregationNode)).Returns(aggregation); // Act diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricAggregationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricAggregationDeserializerTests.cs similarity index 92% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricAggregationDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricAggregationDeserializerTests.cs index 9bb24d4c0..f92cff070 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricAggregationDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricAggregationDeserializerTests.cs @@ -3,10 +3,10 @@ using Microsoft.Azure.Management.Monitor.Fluent.Models; using Microsoft.Extensions.Logging; using Moq; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] public class MetricAggregationDeserializerTests diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefaultsDeserializerTests.cs similarity index 87% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefaultsDeserializerTests.cs index 6808cf5c8..68c42143a 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefaultsDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefaultsDeserializerTests.cs @@ -2,24 +2,24 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Xunit; using YamlDotNet.RepresentationModel; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] public class MetricDefaultsDeserializerTests { private readonly MetricDefaultsDeserializer _deserializer; - private readonly Mock> _aggregationDeserializer; - private readonly Mock> _scrapingDeserializer; + private readonly Mock> _aggregationDeserializer; + private readonly Mock> _scrapingDeserializer; public MetricDefaultsDeserializerTests() { - _aggregationDeserializer = new Mock>(); - _scrapingDeserializer = new Mock>(); + _aggregationDeserializer = new Mock>(); + _scrapingDeserializer = new Mock>(); _deserializer = new MetricDefaultsDeserializer( _aggregationDeserializer.Object, _scrapingDeserializer.Object, new Mock().Object); @@ -36,7 +36,7 @@ public void Deserialize_AggregationPresent_UsesAggregationDeserializer() var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; var aggregationNode = (YamlMappingNode)node.Children["aggregation"]; - var aggregation = new AggregationV2(); + var aggregation = new AggregationV1(); _aggregationDeserializer.Setup(d => d.Deserialize(aggregationNode)).Returns(aggregation); // Act @@ -74,7 +74,7 @@ public void Deserialize_ScrapingPresent_UsesScrapingDeserializer() var node = (YamlMappingNode)YamlUtils.CreateYamlNode(yamlText).Children["metricDefaults"]; var scrapingNode = (YamlMappingNode)node.Children["scraping"]; - var scraping = new ScrapingV2(); + var scraping = new ScrapingV1(); _scrapingDeserializer.Setup(d => d.Deserialize(scrapingNode)).Returns(scraping); // Act diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefinitionDeserializerTests.cs similarity index 90% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefinitionDeserializerTests.cs index 3803d44e4..9d3acda56 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/MetricDefinitionDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefinitionDeserializerTests.cs @@ -4,26 +4,26 @@ using Moq; using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Xunit; using YamlDotNet.RepresentationModel; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] public class MetricDefinitionDeserializerTests { - private readonly Mock> _azureMetricConfigurationDeserializer; - private readonly Mock> _scrapingDeserializer; + private readonly Mock> _azureMetricConfigurationDeserializer; + private readonly Mock> _scrapingDeserializer; private readonly Mock _resourceDeserializerFactory; private readonly MetricDefinitionDeserializer _deserializer; public MetricDefinitionDeserializerTests() { - _azureMetricConfigurationDeserializer = new Mock>(); - _scrapingDeserializer = new Mock>(); + _azureMetricConfigurationDeserializer = new Mock>(); + _scrapingDeserializer = new Mock>(); _resourceDeserializerFactory = new Mock(); _deserializer = new MetricDefinitionDeserializer( @@ -114,7 +114,7 @@ public void Deserialize_AzureMetricConfigurationSupplied_UsesDeserializer() metricName: ActiveMessages"; var node = YamlUtils.CreateYamlNode(yamlText); var configurationNode = (YamlMappingNode) node.Children["azureMetricConfiguration"]; - var configuration = new AzureMetricConfigurationV2(); + var configuration = new AzureMetricConfigurationV1(); _azureMetricConfigurationDeserializer.Setup(d => d.Deserialize(configurationNode)).Returns(configuration); @@ -133,7 +133,7 @@ public void Deserialize_AzureMetricConfigurationNotSupplied_Null() var node = YamlUtils.CreateYamlNode(yamlText); _azureMetricConfigurationDeserializer.Setup( - d => d.Deserialize(It.IsAny())).Returns(new AzureMetricConfigurationV2()); + d => d.Deserialize(It.IsAny())).Returns(new AzureMetricConfigurationV1()); // Act var definition = _deserializer.Deserialize(node); @@ -151,7 +151,7 @@ public void Deserialize_ScrapingSupplied_UsesDeserializer() interval: '00:05:00'"; var node = YamlUtils.CreateYamlNode(yamlText); var scrapingNode = (YamlMappingNode)node.Children["scraping"]; - var scraping = new ScrapingV2(); + var scraping = new ScrapingV1(); _scrapingDeserializer.Setup(d => d.Deserialize(scrapingNode)).Returns(scraping); @@ -169,7 +169,7 @@ public void Deserialize_ScrapingNotSupplied_Null() const string yamlText = "name: promitor_test_metric"; var node = YamlUtils.CreateYamlNode(yamlText); - _scrapingDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(new ScrapingV2()); + _scrapingDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(new ScrapingV1()); // Act var definition = _deserializer.Deserialize(node); @@ -189,11 +189,11 @@ public void Deserialize_ResourcesSupplied_UsesDeserializer() - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging-2"; var node = YamlUtils.CreateYamlNode(yamlText); - var resourceDeserializer = new Mock>(); + var resourceDeserializer = new Mock>(); _resourceDeserializerFactory.Setup( f => f.GetDeserializerFor(ResourceType.Generic)).Returns(resourceDeserializer.Object); - var resources = new List(); + var resources = new List(); resourceDeserializer.Setup( d => d.Deserialize((YamlSequenceNode) node.Children["resources"])).Returns(resources); @@ -214,11 +214,11 @@ public void Deserialize_ResourcesWithUnspecifiedResourceType_Null() - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging-2"; var node = YamlUtils.CreateYamlNode(yamlText); - var resourceDeserializer = new Mock>(); + var resourceDeserializer = new Mock>(); _resourceDeserializerFactory.Setup( f => f.GetDeserializerFor(It.IsAny())).Returns(resourceDeserializer.Object); - var resources = new List(); + var resources = new List(); resourceDeserializer.Setup( d => d.Deserialize((YamlSequenceNode)node.Children["resources"])).Returns(resources); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/ScrapingDeserializerTests.cs similarity index 87% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/ScrapingDeserializerTests.cs index ee0187883..1e9e35d11 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/ScrapingDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/ScrapingDeserializerTests.cs @@ -1,11 +1,10 @@ using System.ComponentModel; using Microsoft.Extensions.Logging; using Moq; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; -using YamlDotNet.RepresentationModel; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] public class ScrapingDeserializerTests diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/SecretDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/SecretDeserializerTests.cs similarity index 92% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/SecretDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/SecretDeserializerTests.cs index d03d68d36..e35654865 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/SecretDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/SecretDeserializerTests.cs @@ -1,10 +1,10 @@ using System.ComponentModel; using Microsoft.Extensions.Logging; using Moq; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] public class SecretDeserializerTests diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs similarity index 85% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs index c34357eb2..dbf5beeb5 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Core/V2DeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs @@ -4,28 +4,28 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Xunit; using YamlDotNet.RepresentationModel; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Core +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Core { [Category("Unit")] - public class V2DeserializerTests + public class V1DeserializerTests { - private readonly Mock> _metadataDeserializer; - private readonly Mock> _defaultsDeserializer; - private readonly Mock> _metricsDeserializer; - private readonly V2Deserializer _deserializer; + private readonly Mock> _metadataDeserializer; + private readonly Mock> _defaultsDeserializer; + private readonly Mock> _metricsDeserializer; + private readonly V1Deserializer _deserializer; - public V2DeserializerTests() + public V1DeserializerTests() { - _metadataDeserializer = new Mock>(); - _defaultsDeserializer = new Mock>(); - _metricsDeserializer = new Mock>(); + _metadataDeserializer = new Mock>(); + _defaultsDeserializer = new Mock>(); + _metricsDeserializer = new Mock>(); - _deserializer = new V2Deserializer( + _deserializer = new V1Deserializer( _metadataDeserializer.Object, _defaultsDeserializer.Object, _metricsDeserializer.Object, @@ -80,7 +80,7 @@ public void Deserialize_AzureMetadata_UsesMetadataDeserializer() azureMetadata: tenantId: 'abc-123'"; var yamlNode = YamlUtils.CreateYamlNode(config); - var azureMetadata = new AzureMetadataV2(); + var azureMetadata = new AzureMetadataV1(); _metadataDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(azureMetadata); // Act @@ -96,7 +96,7 @@ public void Deserialize_AzureMetadataNotSupplied_SetsMetadataNull() // Arrange var yamlNode = YamlUtils.CreateYamlNode("version: v1"); _metadataDeserializer.Setup( - d => d.Deserialize(It.IsAny())).Returns(new AzureMetadataV2()); + d => d.Deserialize(It.IsAny())).Returns(new AzureMetadataV1()); // Act var declaration = _deserializer.Deserialize(yamlNode); @@ -115,7 +115,7 @@ public void Deserialize_MetricDefaults_UsesDefaultsDeserializer() aggregation: interval: '00:05:00'"; var yamlNode = YamlUtils.CreateYamlNode(config); - var metricDefaults = new MetricDefaultsV2(); + var metricDefaults = new MetricDefaultsV1(); _defaultsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metricDefaults); // Act @@ -133,7 +133,7 @@ public void Deserialize_MetricDefaultsNotSupplied_SetsDefaultsNull() @"version: v1"; var yamlNode = YamlUtils.CreateYamlNode(config); _defaultsDeserializer.Setup( - d => d.Deserialize(It.IsAny())).Returns(new MetricDefaultsV2()); + d => d.Deserialize(It.IsAny())).Returns(new MetricDefaultsV1()); // Act var declaration = _deserializer.Deserialize(yamlNode); @@ -151,7 +151,7 @@ public void Deserialize_Metrics_UsesMetricsDeserializer() metrics: - name: promitor_metrics_total"; var yamlNode = YamlUtils.CreateYamlNode(config); - var metrics = new List(); + var metrics = new List(); _metricsDeserializer.Setup(d => d.Deserialize(It.IsAny())).Returns(metrics); // Act @@ -169,7 +169,7 @@ public void Deserialize_Metric_SetsMetricsNull() @"version: v1"; var yamlNode = YamlUtils.CreateYamlNode(config); _metricsDeserializer.Setup( - d => d.Deserialize(It.IsAny())).Returns(new List()); + d => d.Deserialize(It.IsAny())).Returns(new List()); // Act var declaration = _deserializer.Deserialize(yamlNode); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/DeserializerTestHelpers.cs similarity index 99% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/DeserializerTestHelpers.cs index b8f767697..71fc829e8 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/DeserializerTestHelpers.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/DeserializerTestHelpers.cs @@ -3,7 +3,7 @@ using Xunit; using YamlDotNet.RepresentationModel; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2 +namespace Promitor.Scraper.Tests.Unit.Serialization.v1 { public static class DeserializerTestHelpers { diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Mapping/MetricDefinitionV1MappingTests.cs similarity index 69% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Mapping/MetricDefinitionV1MappingTests.cs index ffe0b5454..9b155550e 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/MetricDefinitionV2MappingTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Mapping/MetricDefinitionV1MappingTests.cs @@ -1,20 +1,20 @@ using System.ComponentModel; using AutoMapper; using Promitor.Core.Scraping.Configuration.Model.Metrics; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Mapping +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Mapping { [Category("Unit")] - public class MetricDefinitionV2MappingTests + public class MetricDefinitionV1MappingTests { private readonly IMapper _mapper; - public MetricDefinitionV2MappingTests() + public MetricDefinitionV1MappingTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } @@ -22,7 +22,7 @@ public MetricDefinitionV2MappingTests() public void Map_CanMapPrometheusMetricDefinition() { // Arrange - var resource = new MetricDefinitionV2 {Name = "promitor_metric", Description = "Metric description"}; + var resource = new MetricDefinitionV1 {Name = "promitor_metric", Description = "Metric description"}; // Act var definition = _mapper.Map(resource); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs similarity index 77% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs index 172a4e7c3..09de241d1 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerInstanceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs @@ -2,12 +2,12 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] public class ContainerInstanceDeserializerTests : ResourceDeserializerTestBase @@ -19,7 +19,7 @@ public ContainerInstanceDeserializerTests() _deserializer = new ContainerInstanceDeserializer(new Mock().Object); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new ContainerInstanceDeserializer(new Mock().Object); } @@ -27,7 +27,7 @@ protected override IDeserializer CreateDeserializer() [Fact] public void Deserialize_ContainerGroupSupplied_SetsContainerGroup() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "containerGroup: promitor-group", "promitor-group", @@ -37,7 +37,7 @@ public void Deserialize_ContainerGroupSupplied_SetsContainerGroup() [Fact] public void Deserialize_ContainerGroupNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-resource-group", c => c.ContainerGroup); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerRegistryDeserializerTests.cs similarity index 77% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerRegistryDeserializerTests.cs index fb46e7d23..8445fede5 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ContainerRegistryDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerRegistryDeserializerTests.cs @@ -2,12 +2,12 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] public class ContainerRegistryDeserializerTests : ResourceDeserializerTestBase @@ -22,7 +22,7 @@ public ContainerRegistryDeserializerTests() [Fact] public void Deserialize_RegistryNameSupplied_SetsRegistryName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "registryName: promitor-registry", "promitor-registry", @@ -32,13 +32,13 @@ public void Deserialize_RegistryNameSupplied_SetsRegistryName() [Fact] public void Deserialize_RegistryNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", c => c.RegistryName); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new ContainerRegistryDeserializer(new Mock().Object); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs similarity index 77% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs index fd9eb1b9b..0068ec54d 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/CosmosDbDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs @@ -2,12 +2,12 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] public class CosmosDbDeserializerTests : ResourceDeserializerTestBase @@ -22,7 +22,7 @@ public CosmosDbDeserializerTests() [Fact] public void Deserialize_DbNameSupplied_SetsDbName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "dbName: promitor-cosmos", "promitor-cosmos", @@ -32,13 +32,13 @@ public void Deserialize_DbNameSupplied_SetsDbName() [Fact] public void Deserialize_DbNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", c => c.DbName); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new CosmosDbDeserializer(new Mock().Object); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs similarity index 80% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs index 5d1e20732..0e4f057b1 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/GenericResourceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs @@ -1,12 +1,12 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { public class GenericResourceDeserializerTests : ResourceDeserializerTestBase { @@ -20,7 +20,7 @@ public GenericResourceDeserializerTests() [Fact] public void Deserialize_FilterSupplied_SetsFilter() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "filter: EntityName eq 'orders'", "EntityName eq 'orders'", @@ -30,7 +30,7 @@ public void Deserialize_FilterSupplied_SetsFilter() [Fact] public void Deserialize_FilterNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.Filter); @@ -39,7 +39,7 @@ public void Deserialize_FilterNotSupplied_Null() [Fact] public void Deserialize_ResourceUriSupplied_SetsResourceUri() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging", "Microsoft.ServiceBus/namespaces/promitor-messaging", @@ -49,13 +49,13 @@ public void Deserialize_ResourceUriSupplied_SetsResourceUri() [Fact] public void Deserialize_ResourceUriNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.ResourceUri); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new GenericResourceDeserializer(new Mock().Object); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/NetworkInterfaceDeserializerTests.cs similarity index 77% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/NetworkInterfaceDeserializerTests.cs index 96070f7ee..03a97ce4b 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/NetworkInterfaceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/NetworkInterfaceDeserializerTests.cs @@ -2,12 +2,12 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] public class NetworkInterfaceDeserializerTests : ResourceDeserializerTestBase @@ -22,7 +22,7 @@ public NetworkInterfaceDeserializerTests() [Fact] public void Deserialize_NetworkInterfaceNameSupplied_SetsNetworkInterfaceName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "networkInterfaceName: promitor-nic", "promitor-nic", @@ -32,13 +32,13 @@ public void Deserialize_NetworkInterfaceNameSupplied_SetsNetworkInterfaceName() [Fact] public void Deserialize_NetworkInterfaceNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.NetworkInterfaceName); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new NetworkInterfaceDeserializer(new Mock().Object); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/PostgreSqlDeserializerTests.cs similarity index 76% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/PostgreSqlDeserializerTests.cs index 244688633..86b067ebf 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/PostgreSqlDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/PostgreSqlDeserializerTests.cs @@ -1,12 +1,12 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { public class PostgreSqlDeserializerTests : ResourceDeserializerTestBase { @@ -20,7 +20,7 @@ public PostgreSqlDeserializerTests() [Fact] public void Deserialize_ServerNameSupplied_SetsServerName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "serverName: promitor-db", "promitor-db", @@ -30,13 +30,13 @@ public void Deserialize_ServerNameSupplied_SetsServerName() [Fact] public void Deserialize_ServerNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.ServerName); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new PostgreSqlDeserializer(new Mock().Object); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/RedisCacheDeserializerTests.cs similarity index 77% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/RedisCacheDeserializerTests.cs index ef8828579..8149e5859 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/RedisCacheDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/RedisCacheDeserializerTests.cs @@ -2,12 +2,12 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] public class RedisCacheDeserializerTests : ResourceDeserializerTestBase @@ -22,7 +22,7 @@ public RedisCacheDeserializerTests() [Fact] public void Deserialize_CacheNameSupplied_SetsCacheName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "cacheName: promitor-cache", "promitor-cache", @@ -32,13 +32,13 @@ public void Deserialize_CacheNameSupplied_SetsCacheName() [Fact] public void Deserialize_CacheNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.CacheName); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new RedisCacheDeserializer(new Mock().Object); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ResourceDeserializerTestBase.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTestBase.cs similarity index 86% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ResourceDeserializerTestBase.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTestBase.cs index 656adf256..d53cef019 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ResourceDeserializerTestBase.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTestBase.cs @@ -1,12 +1,12 @@ using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { public abstract class ResourceDeserializerTestBase { - protected abstract IDeserializer CreateDeserializer(); + protected abstract IDeserializer CreateDeserializer(); [Fact] public void Deserialize_ResourceGroupNameSupplied_SetsResourceGroupName() diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ServiceBusQueueDeserializerTests.cs similarity index 79% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ServiceBusQueueDeserializerTests.cs index 03822095b..e7da19772 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/ServiceBusQueueDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ServiceBusQueueDeserializerTests.cs @@ -2,12 +2,12 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] public class ServiceBusQueueDeserializerTests : ResourceDeserializerTestBase @@ -22,7 +22,7 @@ public ServiceBusQueueDeserializerTests() [Fact] public void Deserialize_QueueNameSupplied_SetsQueueName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "queueName: promitor-queue", "promitor-queue", @@ -32,7 +32,7 @@ public void Deserialize_QueueNameSupplied_SetsQueueName() [Fact] public void Deserialize_QueueNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.QueueName); @@ -41,7 +41,7 @@ public void Deserialize_QueueNameNotSupplied_Null() [Fact] public void Deserialize_NamespaceSupplied_SetsNamespace() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "namespace: promitor-sb", "promitor-sb", @@ -51,13 +51,13 @@ public void Deserialize_NamespaceSupplied_SetsNamespace() [Fact] public void Deserialize_NamespaceNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.Namespace); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new ServiceBusQueueDeserializer(new Mock().Object); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/StorageQueueDeserializerTests.cs similarity index 78% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/StorageQueueDeserializerTests.cs index 1048c2c1d..f2244220a 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/StorageQueueDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/StorageQueueDeserializerTests.cs @@ -1,23 +1,23 @@ using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; using YamlDotNet.RepresentationModel; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { public class StorageQueueDeserializerTests : ResourceDeserializerTestBase { - private readonly Mock> _secretDeserializer; + private readonly Mock> _secretDeserializer; private readonly StorageQueueDeserializer _deserializer; public StorageQueueDeserializerTests() { - _secretDeserializer = new Mock>(); + _secretDeserializer = new Mock>(); _deserializer = new StorageQueueDeserializer(_secretDeserializer.Object, new Mock().Object); } @@ -25,7 +25,7 @@ public StorageQueueDeserializerTests() [Fact] public void Deserialize_AccountNameSupplied_SetsAccountName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "accountName: promitor-acct", "promitor-acct", @@ -35,7 +35,7 @@ public void Deserialize_AccountNameSupplied_SetsAccountName() [Fact] public void Deserialize_AccountNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.AccountName); @@ -44,7 +44,7 @@ public void Deserialize_AccountNameNotSupplied_Null() [Fact] public void Deserialize_QueueNameSupplied_SetsQueueName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "queueName: orders", "orders", @@ -54,7 +54,7 @@ public void Deserialize_QueueNameSupplied_SetsQueueName() [Fact] public void Deserialize_QueueNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.QueueName); @@ -70,11 +70,11 @@ public void Deserialize_SasTokenSupplied_UsesDeserializer() var node = YamlUtils.CreateYamlNode(yamlText); var sasTokenNode = (YamlMappingNode)node.Children["sasToken"]; - var secret = new SecretV2(); + var secret = new SecretV1(); _secretDeserializer.Setup(d => d.Deserialize(sasTokenNode)).Returns(secret); // Act - var resource = (StorageQueueResourceV2)_deserializer.Deserialize(node); + var resource = (StorageQueueResourceV1)_deserializer.Deserialize(node); // Assert Assert.Same(secret, resource.SasToken); @@ -83,15 +83,15 @@ public void Deserialize_SasTokenSupplied_UsesDeserializer() [Fact] public void Deserialize_SasTokenNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.SasToken); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { - return new StorageQueueDeserializer(new Mock>().Object, new Mock().Object); + return new StorageQueueDeserializer(new Mock>().Object, new Mock().Object); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/VirtualMachineDeserializerTests.cs similarity index 76% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/VirtualMachineDeserializerTests.cs index 6d2c48f11..ed0077d93 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Providers/VirtualMachineDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/VirtualMachineDeserializerTests.cs @@ -1,14 +1,13 @@ using System.ComponentModel; -using Bogus.Extensions; using Microsoft.Extensions.Logging; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Providers; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Providers; using Xunit; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Providers +namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] public class VirtualMachineDeserializerTests : ResourceDeserializerTestBase @@ -23,7 +22,7 @@ public VirtualMachineDeserializerTests() [Fact] public void Deserialize_VirtualMachineNameSupplied_SetsName() { - DeserializerTestHelpers.AssertPropertySet( + DeserializerTestHelpers.AssertPropertySet( _deserializer, "virtualMachineName: promitor-vm", "promitor-vm", @@ -33,13 +32,13 @@ public void Deserialize_VirtualMachineNameSupplied_SetsName() [Fact] public void Deserialize_VirtualMachineNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + DeserializerTestHelpers.AssertPropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.VirtualMachineName); } - protected override IDeserializer CreateDeserializer() + protected override IDeserializer CreateDeserializer() { return new VirtualMachineDeserializer(new Mock().Object); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1IntegrationTests.cs similarity index 86% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1IntegrationTests.cs index 5c6a68b53..9255b16d0 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/V2IntegrationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1IntegrationTests.cs @@ -8,29 +8,29 @@ using Moq; using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using Xunit; using ResourceType = Promitor.Core.Scraping.Configuration.Model.ResourceType; -namespace Promitor.Scraper.Tests.Unit.Serialization.v2 +namespace Promitor.Scraper.Tests.Unit.Serialization.v1 { [Category("Unit")] - public class V2IntegrationTests + public class V1IntegrationTests { - private readonly V2Deserializer _v2Deserializer; + private readonly V1Deserializer _v1Deserializer; private readonly ConfigurationSerializer _configurationSerializer; - private readonly MetricsDeclarationV2 _metricsDeclaration; + private readonly MetricsDeclarationV1 _metricsDeclaration; - public V2IntegrationTests() + public V1IntegrationTests() { var logger = new Mock(); - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); var mapper = mapperConfiguration.CreateMapper(); - _v2Deserializer = new V2Deserializer( + _v1Deserializer = new V1Deserializer( new AzureMetadataDeserializer(logger.Object), new MetricDefaultsDeserializer( new AggregationDeserializer(logger.Object), @@ -44,30 +44,30 @@ public V2IntegrationTests() new AzureResourceDeserializerFactory(new SecretDeserializer(logger.Object), logger.Object), logger.Object), logger.Object); - _configurationSerializer = new ConfigurationSerializer(logger.Object, mapper, _v2Deserializer); + _configurationSerializer = new ConfigurationSerializer(logger.Object, mapper, _v1Deserializer); - _metricsDeclaration = new MetricsDeclarationV2 + _metricsDeclaration = new MetricsDeclarationV1 { - AzureMetadata = new AzureMetadataV2 + AzureMetadata = new AzureMetadataV1 { TenantId = "tenant", SubscriptionId = "subscription", ResourceGroupName = "promitor-group" }, - MetricDefaults = new MetricDefaultsV2 + MetricDefaults = new MetricDefaultsV1 { - Aggregation = new AggregationV2 + Aggregation = new AggregationV1 { Interval = TimeSpan.FromMinutes(7) }, - Scraping = new ScrapingV2 + Scraping = new ScrapingV1 { Schedule = "1 2 3 4 5" } }, - Metrics = new List + Metrics = new List { - new MetricDefinitionV2 + new MetricDefinitionV1 { Name = "promitor_demo_generic_queue_size", Description = "Amount of active messages of the 'orders' queue (determined with Generic provider)", @@ -76,49 +76,49 @@ public V2IntegrationTests() { {"app", "promitor"} }, - AzureMetricConfiguration = new AzureMetricConfigurationV2 + AzureMetricConfiguration = new AzureMetricConfigurationV1 { MetricName = "ActiveMessages", - Aggregation = new MetricAggregationV2 + Aggregation = new MetricAggregationV1 { Type = AggregationType.Average } }, - Resources = new List + Resources = new List { - new GenericResourceV2 + new GenericResourceV1 { ResourceUri = "Microsoft.ServiceBus/namespaces/promitor-messaging", Filter = "EntityName eq 'orders'" }, - new GenericResourceV2 + new GenericResourceV1 { ResourceUri = "Microsoft.ServiceBus/namespaces/promitor-messaging", Filter = "EntityName eq 'accounts'" } } }, - new MetricDefinitionV2 + new MetricDefinitionV1 { Name = "promitor_demo_servicebusqueue_queue_size", Description = "Amount of active messages of the 'orders' queue (determined with ServiceBusQueue provider)", ResourceType = ResourceType.ServiceBusQueue, - AzureMetricConfiguration = new AzureMetricConfigurationV2 + AzureMetricConfiguration = new AzureMetricConfigurationV1 { MetricName = "ActiveMessages", - Aggregation = new MetricAggregationV2 + Aggregation = new MetricAggregationV1 { Type = AggregationType.Average, Interval = TimeSpan.FromMinutes(15) } }, - Scraping = new ScrapingV2 + Scraping = new ScrapingV1 { Schedule = "5 4 3 2 1" }, - Resources = new List + Resources = new List { - new ServiceBusQueueResourceV2 + new ServiceBusQueueResourceV1 { Namespace = "promitor-messaging", QueueName = "orders", @@ -134,13 +134,13 @@ public V2IntegrationTests() public void CanDeserializeSerializedModel() { // This test creates a v2 model, serializes it to yaml, and then verifies that - // the V2Deserializer can deserialize it. + // the V1Deserializer can deserialize it. // Arrange var yaml = _configurationSerializer.Serialize(_metricsDeclaration); // Act - var deserializedModel = _v2Deserializer.Deserialize(YamlUtils.CreateYamlNode(yaml)); + var deserializedModel = _v1Deserializer.Deserialize(YamlUtils.CreateYamlNode(yaml)); // Assert Assert.NotNull(deserializedModel); @@ -159,11 +159,11 @@ public void CanDeserializeSerializedModel() Assert.Equal(AggregationType.Average, deserializedModel.Metrics.ElementAt(0).AzureMetricConfiguration.Aggregation.Type); Assert.Equal(2, deserializedModel.Metrics.ElementAt(0).Resources.Count); - var genericResource1 = Assert.IsType(deserializedModel.Metrics.ElementAt(0).Resources.ElementAt(0)); + var genericResource1 = Assert.IsType(deserializedModel.Metrics.ElementAt(0).Resources.ElementAt(0)); Assert.Equal("Microsoft.ServiceBus/namespaces/promitor-messaging", genericResource1.ResourceUri); Assert.Equal("EntityName eq 'orders'", genericResource1.Filter); - var genericResource2 = Assert.IsType(deserializedModel.Metrics.ElementAt(0).Resources.ElementAt(1)); + var genericResource2 = Assert.IsType(deserializedModel.Metrics.ElementAt(0).Resources.ElementAt(1)); Assert.Equal("Microsoft.ServiceBus/namespaces/promitor-messaging", genericResource2.ResourceUri); Assert.Equal("EntityName eq 'accounts'", genericResource2.Filter); @@ -176,7 +176,7 @@ public void CanDeserializeSerializedModel() Assert.Equal("5 4 3 2 1", deserializedModel.Metrics.ElementAt(1).Scraping.Schedule); Assert.Single(deserializedModel.Metrics.ElementAt(1).Resources); - var serviceBusQueueResource = Assert.IsType(deserializedModel.Metrics.ElementAt(1).Resources.ElementAt(0)); + var serviceBusQueueResource = Assert.IsType(deserializedModel.Metrics.ElementAt(1).Resources.ElementAt(0)); Assert.Equal("promitor-messaging", serviceBusQueueResource.Namespace); Assert.Equal("orders", serviceBusQueueResource.QueueName); Assert.Equal("promitor-demo-group", serviceBusQueueResource.ResourceGroupName); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/ServiceBusQueueResourceDefinitionV2MappingTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/ServiceBusQueueResourceDefinitionV2MappingTests.cs deleted file mode 100644 index d5e386cec..000000000 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v2/Mapping/ServiceBusQueueResourceDefinitionV2MappingTests.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.ComponentModel; -using AutoMapper; -using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model.ResourceTypes; -using Xunit; - -namespace Promitor.Scraper.Tests.Unit.Serialization.v2.Mapping -{ - [Category("Unit")] - public class ServiceBusQueueResourceDefinitionV2MappingTests - { - [Fact] - public void Map_CanMapServiceBusQueueResource() - { - // Arrange - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); - var mapper = mapperConfiguration.CreateMapper(); - - var v2Resource = new ServiceBusQueueResourceV2 {Namespace = "test-namespace"}; - - // Act - var resource = mapper.Map(v2Resource); - - // Assert - Assert.Equal(v2Resource.Namespace, resource.Namespace); - } - } -} diff --git a/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs b/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs index 4b8d6a55a..f1a2c756f 100644 --- a/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs +++ b/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs @@ -4,8 +4,8 @@ using Moq; using Promitor.Core.Scraping.Configuration.Providers; using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; namespace Promitor.Scraper.Tests.Unit.Stubs { @@ -18,11 +18,11 @@ public MetricsDeclarationProviderStub(string rawMetricsDeclaration, IMapper mapp _rawMetricsDeclaration = rawMetricsDeclaration; } - private static IDeserializer CreateDeserializer() + private static IDeserializer CreateDeserializer() { var logger = new Mock(); - return new V2Deserializer( + return new V1Deserializer( new AzureMetadataDeserializer(logger.Object), new MetricDefaultsDeserializer( new AggregationDeserializer(logger.Object), diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/GeneralMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/GeneralMetricsDeclarationValidationStepTests.cs index 896c10ba1..0c9d891b4 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/GeneralMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/GeneralMetricsDeclarationValidationStepTests.cs @@ -1,7 +1,7 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Model; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Stubs; using Xunit; @@ -16,7 +16,7 @@ public class GeneralMetricsDeclarationValidationStepTests public GeneralMetricsDeclarationValidationStepTests() { - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); _mapper = mapperConfiguration.CreateMapper(); } @@ -108,7 +108,7 @@ public void MetricsDeclaration_WithoutDefaultScrapingSchedule_Fails() { // Arrange var rawDeclaration = MetricsDeclarationBuilder.WithMetadata() - .WithDefaults(new MetricDefaultsV2()) + .WithDefaults(new MetricDefaultsV1()) .Build(_mapper); var metricsDeclarationProvider = new MetricsDeclarationProviderStub(rawDeclaration, _mapper); diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/AzureStorageQueueMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/AzureStorageQueueMetricsDeclarationValidationStepTests.cs index 2be05cbc8..d72d25223 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/AzureStorageQueueMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/AzureStorageQueueMetricsDeclarationValidationStepTests.cs @@ -1,7 +1,7 @@ using System; using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Integrations.AzureStorage; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; @@ -17,7 +17,7 @@ public class AzureStorageQueueMetricsDeclarationValidationStepTests public AzureStorageQueueMetricsDeclarationValidationStepTests() { - var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); + var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); _mapper = mapperConfiguration.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerInstanceMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerInstanceMetricsDeclarationValidationStepTests.cs index 2bbb878c2..51e9de640 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerInstanceMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerInstanceMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class ContainerInstanceMetricsDeclarationValidationStepTests public ContainerInstanceMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerRegistryMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerRegistryMetricsDeclarationValidationStepTests.cs index e0e88e2b2..746b79d9e 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerRegistryMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ContainerRegistryMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class ContainerRegistryMetricsDeclarationValidationStepTests public ContainerRegistryMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/CosmosDbMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/CosmosDbMetricsDeclarationValidationStepTests.cs index 766d2b3aa..4e6b6aa30 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/CosmosDbMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/CosmosDbMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class CosmosDbMetricsDeclarationValidationStepTests public CosmosDbMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/GenericMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/GenericMetricsDeclarationValidationStepTests.cs index 624cd0dac..f4f30bc8e 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/GenericMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/GenericMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class GenericMetricsDeclarationValidationStepTests public GenericMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/NetworkInterfaceMetricsDeclarationValidationStepsTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/NetworkInterfaceMetricsDeclarationValidationStepsTests.cs index 5d8e6ee57..7ca3bb7a1 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/NetworkInterfaceMetricsDeclarationValidationStepsTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/NetworkInterfaceMetricsDeclarationValidationStepsTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class NetworkInterfaceMetricsDeclarationValidationStepTests public NetworkInterfaceMetricsDeclarationValidationStepTests() { - var mapperConfig = new MapperConfiguration(c => c.AddProfile()); + var mapperConfig = new MapperConfiguration(c => c.AddProfile()); _mapper = mapperConfig.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/PostgreSqlMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/PostgreSqlMetricsDeclarationValidationStepTests.cs index ac7b16845..c14df53b5 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/PostgreSqlMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/PostgreSqlMetricsDeclarationValidationStepTests.cs @@ -2,7 +2,7 @@ using Promitor.Scraper.Tests.Unit.Stubs; using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Xunit; @@ -15,7 +15,7 @@ public class PostgreSqlMetricsDeclarationValidationStepTests public PostgreSqlMetricsDeclarationValidationStepTests() { - var mapperConfig = new MapperConfiguration(c => c.AddProfile()); + var mapperConfig = new MapperConfiguration(c => c.AddProfile()); _mapper = mapperConfig.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/RedisCacheMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/RedisCacheMetricsDeclarationValidationStepTests.cs index 8262be599..84f364f79 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/RedisCacheMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/RedisCacheMetricsDeclarationValidationStepTests.cs @@ -2,7 +2,7 @@ using Promitor.Scraper.Tests.Unit.Stubs; using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Xunit; @@ -15,7 +15,7 @@ public class RedisCacheMetricsDeclarationValidationStepTests public RedisCacheMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ServiceBusQueueMetricsDeclarationValidationStepTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ServiceBusQueueMetricsDeclarationValidationStepTests.cs index 563b67645..f311d9cd2 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ServiceBusQueueMetricsDeclarationValidationStepTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/ServiceBusQueueMetricsDeclarationValidationStepTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class ServiceBusQueueMetricsDeclarationValidationStepTests public ServiceBusQueueMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } diff --git a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs index c6e1177b9..e35186fd0 100644 --- a/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Validation/Metrics/ResourceTypes/VirtualMachineMetricsDeclarationValidationStepsTests.cs @@ -1,6 +1,6 @@ using System.ComponentModel; using AutoMapper; -using Promitor.Core.Scraping.Configuration.Serialization.v2.Mapping; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Mapping; using Promitor.Scraper.Host.Validation.Steps; using Promitor.Scraper.Tests.Unit.Builders.Metrics.v1; using Promitor.Scraper.Tests.Unit.Stubs; @@ -15,7 +15,7 @@ public class VirtualMachineMetricsDeclarationValidationStepTests public VirtualMachineMetricsDeclarationValidationStepTests() { - var config = new MapperConfiguration(c => c.AddProfile()); + var config = new MapperConfiguration(c => c.AddProfile()); _mapper = config.CreateMapper(); } From 9c29645e63519ff56cd0a8c38720e3470bbbbcd5 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Thu, 22 Aug 2019 12:51:45 +0100 Subject: [PATCH 30/32] Update example config for new format I've converted the example config so that it uses the new multi-resource format. --- src/metric-config.yaml | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/metric-config.yaml b/src/metric-config.yaml index 020d25cee..53ff2b295 100644 --- a/src/metric-config.yaml +++ b/src/metric-config.yaml @@ -13,19 +13,18 @@ metrics: - name: promitor_demo_generic_queue_size description: "Amount of active messages of the 'orders' queue (determined with Generic provider)" resourceType: Generic - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging - filter: EntityName eq 'orders' labels: app: promitor azureMetricConfiguration: metricName: ActiveMessages aggregation: type: Average + resources: + - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging + filter: EntityName eq 'orders' - name: promitor_demo_generic_namespace_size description: "Size of all queues in our Azure Service Bus namespace (determined with Generic provider)" resourceType: Generic - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging - # filter is deliberately omitted given filter is optional scraping: # Every 2 minutes schedule: "0 */2 * ? * *" @@ -33,24 +32,24 @@ metrics: metricName: ActiveMessages aggregation: type: Average + resources: + # filter is deliberately omitted given filter is optional + - resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging - name: promitor_demo_servicebusqueue_queue_size description: "Amount of active messages of the 'orders' queue (determined with ServiceBusQueue provider)" resourceType: ServiceBusQueue - namespace: promitor-messaging - queueName: orders azureMetricConfiguration: metricName: ActiveMessages aggregation: type: Average # Optionally override the default aggregation interval (metricDefaults.aggregation.interval) interval: 00:15:00 + resources: + - namespace: promitor-messaging + queueName: orders - name: promitor_demo_azurestoragequeue_queue_size description: "Approximate amount of messages in 'orders' queue (determined with StorageQueue provider)" resourceType: StorageQueue - accountName: promitor - queueName: orders - sasToken: - rawValue: "?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwla&se=2022-08-07T00:16:01Z&st=2019-08-06T16:16:01Z&spr=https&sig=Ik4jprS89kGIFRM0qaQpXrv0ttP3pnlhmGQuYVQ7cbA%3D" scraping: # Every 2 minutes schedule: "0 */2 * ? * *" @@ -58,14 +57,20 @@ metrics: metricName: MessageCount aggregation: type: Total + resources: + - accountName: promitor + queueName: orders + sasToken: + rawValue: "?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwla&se=2022-08-07T00:16:01Z&st=2019-08-06T16:16:01Z&spr=https&sig=Ik4jprS89kGIFRM0qaQpXrv0ttP3pnlhmGQuYVQ7cbA%3D" - name: promitor_demo_azurestoragequeue_queue_timespentinqueue description: "Approximate amount of time that the oldest message has been in 'orders' queue (determined with StorageQueue provider)" resourceType: StorageQueue - accountName: promitor - queueName: orders - sasToken: - environmentVariable: SECRETS_STORAGEQUEUE_SAS azureMetricConfiguration: metricName: TimeSpentInQueue aggregation: type: Total + resources: + - accountName: promitor + queueName: orders + sasToken: + environmentVariable: SECRETS_STORAGEQUEUE_SAS From 5f84e02184aa2fcc4613c6d127da2cdcc5d29915 Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Sat, 24 Aug 2019 09:30:03 +0100 Subject: [PATCH 31/32] Updates as a result of PR feedback - Pulled Deserializer methods to extension methods. - Fixed some places where I'd left names as `v2`. - Removed the duplicated code for creating the deserializer in test classes to fix code factor tests. - Added missing doc-comments to resources. - Renamed DeserializerTestHelpers to YamlAssert. - Replaced mock loggers with NullLogger.Instance. - Various other fixes. --- .../Providers/MetricsDeclarationProvider.cs | 4 +- .../Serialization/ConfigurationSerializer.cs | 10 +- .../Serialization/Deserializer.cs | 76 -------- .../Serialization/Enum/SpecVersion.cs | 3 +- .../Serialization/IDeserializer.cs | 8 +- .../YamlMappingNodeExtensions.cs | 102 +++++++++++ .../v1/Core/AggregationDeserializer.cs | 4 +- .../v1/Core/AzureMetadataDeserializer.cs | 6 +- .../AzureMetricConfigurationDeserializer.cs | 2 +- .../v1/Core/MetricAggregationDeserializer.cs | 8 +- .../v1/Core/MetricDefaultsDeserializer.cs | 11 +- .../v1/Core/MetricDefinitionDeserializer.cs | 13 +- .../v1/Core/ScrapingDeserializer.cs | 2 +- .../v1/Core/SecretDeserializer.cs | 7 +- .../Serialization/v1/Model/AggregationV1.cs | 2 +- .../v1/Model/MetricAggregationV1.cs | 9 +- .../ContainerInstanceResourceV1.cs | 6 + .../ContainerRegistryResourceV1.cs | 6 + .../Model/ResourceTypes/CosmosDbResourceV1.cs | 3 + .../Model/ResourceTypes/GenericResourceV1.cs | 4 + .../NetworkInterfaceResourceV1.cs | 3 + .../ResourceTypes/PostgreSqlResourceV1.cs | 3 + .../ResourceTypes/RedisCacheResourceV1.cs | 3 + .../ServiceBusQueueResourceV1.cs | 3 + .../ResourceTypes/StorageQueueResourceV1.cs | 3 + .../ResourceTypes/VirtualMachineResourceV1.cs | 3 + .../ContainerInstanceDeserializer.cs | 4 +- .../ContainerRegistryDeserializer.cs | 4 +- .../v1/Providers/CosmosDbDeserializer.cs | 4 +- .../Providers/GenericResourceDeserializer.cs | 7 +- .../Providers/NetworkInterfaceDeserializer.cs | 4 +- .../v1/Providers/PostgreSqlDeserializer.cs | 4 +- .../v1/Providers/RedisCacheDeserializer.cs | 4 +- .../v1/Providers/ResourceDeserializer.cs | 2 +- .../Providers/ServiceBusQueueDeserializer.cs | 7 +- .../v1/Providers/StorageQueueDeserializer.cs | 20 +-- .../Providers/VirtualMachineDeserializer.cs | 4 +- .../Validation/RuntimeValidator.cs | 4 +- .../Metrics/v1/MetricsDeclarationBuilder.cs | 20 +-- .../YamlMappingNodeExtensionTests.cs | 169 ++++++++++++++++++ .../v1/Core/AggregationDeserializerTests.cs | 11 +- .../v1/Core/AzureMetadataDeserializerTests.cs | 17 +- ...ureMetricConfigurationDeserializerTests.cs | 10 +- .../MetricAggregationDeserializerTests.cs | 13 +- .../Core/MetricDefaultsDeserializerTests.cs | 4 +- .../Core/MetricDefinitionDeserializerTests.cs | 20 +-- .../v1/Core/ScrapingDeserializerTests.cs | 9 +- .../v1/Core/SecretDeserializerTests.cs | 13 +- .../v1/Core/V1DeserializerTests.cs | 4 +- .../ContainerInstanceDeserializerTests.cs | 12 +- .../ContainerRegistryDeserializerTests.cs | 13 +- .../v1/Providers/CosmosDbDeserializerTests.cs | 11 +- .../GenericResourceDeserializerTests.cs | 15 +- .../NetworkInterfaceDeserializerTests.cs | 9 +- .../Providers/PostgreSqlDeserializerTests.cs | 13 +- .../Providers/RedisCacheDeserializerTests.cs | 13 +- ...estBase.cs => ResourceDeserializerTest.cs} | 6 +- .../ServiceBusQueueDeserializerTests.cs | 17 +- .../StorageQueueDeserializerTests.cs | 18 +- .../VirtualMachineDeserializerTests.cs | 13 +- .../Serialization/v1/V1DeserializerFactory.cs | 30 ++++ ...rationTests.cs => V1SerializationTests.cs} | 36 ++-- ...serializerTestHelpers.cs => YamlAssert.cs} | 14 +- .../Stubs/MetricsDeclarationProviderStub.cs | 28 +-- 64 files changed, 568 insertions(+), 342 deletions(-) create mode 100644 src/Promitor.Core.Scraping/Configuration/Serialization/YamlMappingNodeExtensions.cs create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/YamlMappingNodeExtensionTests.cs rename src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/{ResourceDeserializerTestBase.cs => ResourceDeserializerTest.cs} (84%) create mode 100644 src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1DeserializerFactory.cs rename src/Promitor.Scraper.Tests.Unit/Serialization/v1/{V1IntegrationTests.cs => V1SerializationTests.cs} (90%) rename src/Promitor.Scraper.Tests.Unit/Serialization/v1/{DeserializerTestHelpers.cs => YamlAssert.cs} (93%) diff --git a/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs b/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs index dcd5a953d..03f2d7ab9 100644 --- a/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs +++ b/src/Promitor.Core.Scraping/Configuration/Providers/MetricsDeclarationProvider.cs @@ -16,9 +16,9 @@ public class MetricsDeclarationProvider : IMetricsDeclarationProvider private readonly ConfigurationSerializer _configurationSerializer; private readonly IConfiguration _configuration; - public MetricsDeclarationProvider(IConfiguration configuration, ILogger logger, IMapper mapper, IDeserializer v2Deserializer) + public MetricsDeclarationProvider(IConfiguration configuration, ILogger logger, IMapper mapper, IDeserializer v1Deserializer) { - _configurationSerializer = new ConfigurationSerializer(logger, mapper, v2Deserializer); + _configurationSerializer = new ConfigurationSerializer(logger, mapper, v1Deserializer); _configuration = configuration; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs index 5c33b28d7..c47c5367c 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/ConfigurationSerializer.cs @@ -17,13 +17,13 @@ public class ConfigurationSerializer { private readonly ILogger _logger; private readonly IMapper _mapper; - private readonly IDeserializer _v2Deserializer; + private readonly IDeserializer _v1Deserializer; - public ConfigurationSerializer(ILogger logger, IMapper mapper, IDeserializer v2Deserializer) + public ConfigurationSerializer(ILogger logger, IMapper mapper, IDeserializer v1Deserializer) { _logger = logger; _mapper = mapper; - _v2Deserializer = v2Deserializer; + _v1Deserializer = v1Deserializer; } public MetricsDeclaration Deserialize(string rawMetricsDeclaration) @@ -57,9 +57,9 @@ private MetricsDeclaration InterpretYamlStream(YamlStream metricsDeclarationYaml switch (specVersion) { case SpecVersion.v1: - var v2Config = _v2Deserializer.Deserialize(rootNode); + var v1Config = _v1Deserializer.Deserialize(rootNode); - return _mapper.Map(v2Config); + return _mapper.Map(v1Config); default: throw new Exception($"Unable to interpret YAML stream for spec version '{specVersion}'"); } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs index f72b03b02..cfc2322e6 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs @@ -38,81 +38,5 @@ public List Deserialize(YamlSequenceNode nodes) return deserializedObjects; } - - /// - /// Gets the string value of the specified yaml property. - /// - /// The node containing the property. - /// The name of the property. - /// The string value of the property. - protected static string GetString(YamlMappingNode node, string propertyName) - { - if (node.Children.TryGetValue(propertyName, out var propertyNode)) - { - return propertyNode.ToString(); - } - - return null; - } - - /// - /// Gets the value of the specified yaml property converted to an enum. - /// - /// The type of enum to return. - /// The node containing the property. - /// The property name. - /// The enum value, or null if the property doesn't exist. - protected static T? GetEnum(YamlMappingNode node, string propertyName) - where T : struct - { - if (node.Children.TryGetValue(propertyName, out var propertyNode)) - { - if (System.Enum.TryParse(propertyNode.ToString(), out var enumResult)) - { - return enumResult; - } - } - - return null; - } - - /// - /// Gets the contents of the specified property as a dictionary. - /// - /// The node containing the property. - /// The name of the property. - /// The child items of the property as a dictionary. - protected static Dictionary GetDictionary(YamlMappingNode node, string propertyName) - { - if (node.Children.TryGetValue(propertyName, out var propertyNode)) - { - var result = new Dictionary(); - - foreach (var (key, value) in ((YamlMappingNode)propertyNode).Children) - { - result[key.ToString()] = value.ToString(); - } - - return result; - } - - return null; - } - - /// - /// Gets the value of the specified yaml property converted to a . - /// - /// The node containing the property. - /// The name of the property. - /// The value converted to a timespan, or null if the property doesn't exist. - protected static TimeSpan? GetTimespan(YamlMappingNode node, string propertyName) - { - if (node.Children.TryGetValue(propertyName, out var propertyNode)) - { - return TimeSpan.Parse(propertyNode.ToString()); - } - - return null; - } } } \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs index b5141047d..5954daf9c 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Enum/SpecVersion.cs @@ -1,9 +1,8 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.Enum { + // ReSharper disable once InconsistentNaming public enum SpecVersion { - // ReSharper disable InconsistentNaming v1 - // ReSharper restore InconsistentNaming } } \ No newline at end of file diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/IDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/IDeserializer.cs index 37ddb2e9f..cb51130e4 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/IDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/IDeserializer.cs @@ -6,21 +6,21 @@ namespace Promitor.Core.Scraping.Configuration.Serialization /// /// An object that can deserialize a yaml node into an object. /// - /// The type of object that can be deserialized. - public interface IDeserializer + /// The type of object that can be deserialized. + public interface IDeserializer { /// /// Deserializes the specified node. /// /// The node to deserialize. /// The deserialized object. - T Deserialize(YamlMappingNode node); + TObject Deserialize(YamlMappingNode node); /// /// Deserializes an array of elements. /// /// The node to deserialize. /// The deserialized objects. - List Deserialize(YamlSequenceNode node); + List Deserialize(YamlSequenceNode node); } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/YamlMappingNodeExtensions.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/YamlMappingNodeExtensions.cs new file mode 100644 index 000000000..f9a2e1c67 --- /dev/null +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/YamlMappingNodeExtensions.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using YamlDotNet.RepresentationModel; + +namespace Promitor.Core.Scraping.Configuration.Serialization +{ + public static class YamlMappingNodeExtensions + { + /// + /// Gets the string value of the specified yaml property. + /// + /// The node containing the property. + /// The name of the property. + /// The string value of the property. + public static string GetString(this YamlMappingNode node, string propertyName) + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + return propertyNode.ToString(); + } + + return null; + } + + /// + /// Gets the value of the specified yaml property converted to an enum. + /// + /// The type of enum to return. + /// The node containing the property. + /// The property name. + /// The enum value, or null if the property doesn't exist. + public static TEnum? GetEnum(this YamlMappingNode node, string propertyName) + where TEnum: struct + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + return System.Enum.Parse(propertyNode.ToString()); + } + + return null; + } + + /// + /// Gets the contents of the specified property as a dictionary. + /// + /// The node containing the property. + /// The name of the property. + /// The child items of the property as a dictionary. + public static Dictionary GetDictionary(this YamlMappingNode node, string propertyName) + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + var result = new Dictionary(); + + foreach (var (key, value) in ((YamlMappingNode) propertyNode).Children) + { + result[key.ToString()] = value.ToString(); + } + + return result; + } + + return null; + } + + /// + /// Gets the value of the specified yaml property converted to a . + /// + /// The node containing the property. + /// The name of the property. + /// The value converted to a timespan, or null if the property doesn't exist. + public static TimeSpan? GetTimeSpan(this YamlMappingNode node, string propertyName) + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + return TimeSpan.Parse(propertyNode.ToString()); + } + + return null; + } + + /// + /// Deserializes a child object using the specified deserializer. + /// + /// The type of object to deserialize. + /// The yaml node. + /// The name of the property to deserialize. + /// The deserializer to use. + /// The deserialized property, or null if the property does not exist. + public static TObject DeserializeChild( + this YamlMappingNode node, string propertyName, IDeserializer deserializer) + where TObject: class + { + if (node.Children.TryGetValue(propertyName, out var propertyNode)) + { + return deserializer.Deserialize((YamlMappingNode)propertyNode); + } + + return null; + } + } +} diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs index fa6ec5a49..01b8f74bb 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AggregationDeserializer.cs @@ -17,7 +17,9 @@ public AggregationDeserializer(ILogger logger) : base(logger) public override AggregationV1 Deserialize(YamlMappingNode node) { - var aggregation = new AggregationV1 {Interval = GetTimespan(node, IntervalTag)}; + var interval = node.GetTimeSpan(IntervalTag); + + var aggregation = new AggregationV1 {Interval = interval}; if (aggregation.Interval == null) { diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs index b6d9780a5..3f92bc019 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetadataDeserializer.cs @@ -18,9 +18,9 @@ public override AzureMetadataV1 Deserialize(YamlMappingNode node) { var metadata = new AzureMetadataV1(); - metadata.TenantId = GetString(node, TenantIdTag); - metadata.SubscriptionId = GetString(node, SubscriptionIdTag); - metadata.ResourceGroupName = GetString(node, ResourceGroupNameTag); + metadata.TenantId = node.GetString(TenantIdTag); + metadata.SubscriptionId = node.GetString(SubscriptionIdTag); + metadata.ResourceGroupName = node.GetString(ResourceGroupNameTag); return metadata; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs index 4e9cea323..3f963b36b 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/AzureMetricConfigurationDeserializer.cs @@ -20,7 +20,7 @@ public override AzureMetricConfigurationV1 Deserialize(YamlMappingNode node) { return new AzureMetricConfigurationV1 { - MetricName = GetString(node, MetricNameTag), + MetricName = node.GetString(MetricNameTag), Aggregation = DeserializeAggregation(node) }; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs index 7edbb6319..189ad607b 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricAggregationDeserializer.cs @@ -16,10 +16,14 @@ public MetricAggregationDeserializer(ILogger logger) : base(logger) public override MetricAggregationV1 Deserialize(YamlMappingNode node) { + var aggregationType = node.GetEnum(TypeTag); + + var interval = node.GetTimeSpan(IntervalTag); + return new MetricAggregationV1 { - Type = GetEnum(node, TypeTag), - Interval = GetTimespan(node, IntervalTag) + Type = aggregationType, + Interval = interval }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs index 9da21c1c1..7c2ff47f4 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefaultsDeserializer.cs @@ -25,15 +25,8 @@ public override MetricDefaultsV1 Deserialize(YamlMappingNode node) { var defaults = new MetricDefaultsV1(); - if (node.Children.TryGetValue(AggregationTag, out var aggregationNode)) - { - defaults.Aggregation = _aggregationDeserializer.Deserialize((YamlMappingNode)aggregationNode); - } - - if (node.Children.TryGetValue(ScrapingTag, out var scrapingNode)) - { - defaults.Scraping = _scrapingDeserializer.Deserialize((YamlMappingNode)scrapingNode); - } + defaults.Aggregation = node.DeserializeChild(AggregationTag, _aggregationDeserializer); + defaults.Scraping = node.DeserializeChild(ScrapingTag, _scrapingDeserializer); return defaults; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefinitionDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefinitionDeserializer.cs index 1db0a47ac..cd794e6a2 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefinitionDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/MetricDefinitionDeserializer.cs @@ -31,12 +31,17 @@ public MetricDefinitionDeserializer(IDeserializer az public override MetricDefinitionV1 Deserialize(YamlMappingNode node) { + var name = node.GetString(NameTag); + var description = node.GetString(DescriptionTag); + var resourceType = node.GetEnum(ResourceTypeTag); + var labels = node.GetDictionary(LabelsTag); + var metricDefinition = new MetricDefinitionV1 { - Name = GetString(node, NameTag), - Description = GetString(node, DescriptionTag), - ResourceType = GetEnum(node, ResourceTypeTag), - Labels = GetDictionary(node, LabelsTag) + Name = name, + Description = description, + ResourceType = resourceType, + Labels = labels }; DeserializeAzureMetricConfiguration(node, metricDefinition); diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs index d78775331..ba85dbccf 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs @@ -16,7 +16,7 @@ public override ScrapingV1 Deserialize(YamlMappingNode node) { var scraping = new ScrapingV1(); - scraping.Schedule = GetString(node, ScheduleTag); + scraping.Schedule = node.GetString(ScheduleTag); if (scraping.Schedule == null) { diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs index 024515f43..70d4b3500 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/SecretDeserializer.cs @@ -15,10 +15,13 @@ public SecretDeserializer(ILogger logger) : base(logger) public override SecretV1 Deserialize(YamlMappingNode node) { + var rawValue = node.GetString(RawValueTag); + var environmentVariable = node.GetString(EnvironmentVariableTag); + var secret = new SecretV1 { - RawValue = GetString(node, RawValueTag), - EnvironmentVariable = GetString(node, EnvironmentVariableTag) + RawValue = rawValue, + EnvironmentVariable = environmentVariable }; if (!string.IsNullOrEmpty(secret.RawValue) && !string.IsNullOrEmpty(secret.EnvironmentVariable)) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs index 767236955..ce557a046 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/AggregationV1.cs @@ -8,7 +8,7 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model public class AggregationV1 { /// - /// The aggregation interval to use when querying Azure metrics. + /// The interval to use for aggregating the metric data when querying Azure metrics. /// public TimeSpan? Interval { get; set; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs index 081dae2b4..78e2d3c75 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/MetricAggregationV1.cs @@ -8,11 +8,14 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model /// public class MetricAggregationV1 { - public AggregationType? Type { get; set; } - /// - /// The aggregation interval to use when querying Azure metrics. + /// The time period the metric should be aggregated over. /// public TimeSpan? Interval { get; set; } + + /// + /// Type of aggregation to query the Azure Monitor metric. + /// + public AggregationType? Type { get; set; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerInstanceResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerInstanceResourceV1.cs index 344c1d409..8f52927ce 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerInstanceResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerInstanceResourceV1.cs @@ -1,7 +1,13 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a Container Instance. + /// public class ContainerInstanceResourceV1 : AzureResourceDefinitionV1 { + /// + /// The container group name. + /// public string ContainerGroup { get; set; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerRegistryResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerRegistryResourceV1.cs index 3efc3179d..3153ba9a5 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerRegistryResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ContainerRegistryResourceV1.cs @@ -1,7 +1,13 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a Container Registry. + /// public class ContainerRegistryResourceV1 : AzureResourceDefinitionV1 { + /// + /// The name of the registry to scrape. + /// public string RegistryName { get; set; } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/CosmosDbResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/CosmosDbResourceV1.cs index 059939252..eb9e2d39f 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/CosmosDbResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/CosmosDbResourceV1.cs @@ -1,5 +1,8 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a Cosmos database. + /// public class CosmosDbResourceV1 : AzureResourceDefinitionV1 { /// diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/GenericResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/GenericResourceV1.cs index 142c7afd7..e6b6bf5b1 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/GenericResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/GenericResourceV1.cs @@ -1,5 +1,9 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape an Azure resource. This allows + /// any resource that doesn't have a custom provider to be scraped. + /// public class GenericResourceV1 : AzureResourceDefinitionV1 { /// diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/NetworkInterfaceResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/NetworkInterfaceResourceV1.cs index 2aaf1ccd1..86ca30ec1 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/NetworkInterfaceResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/NetworkInterfaceResourceV1.cs @@ -1,5 +1,8 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a Network Interface. + /// public class NetworkInterfaceResourceV1 : AzureResourceDefinitionV1 { /// diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/PostgreSqlResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/PostgreSqlResourceV1.cs index 68e72d79f..5b4875c3a 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/PostgreSqlResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/PostgreSqlResourceV1.cs @@ -1,5 +1,8 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a Postgre SQL database. + /// public class PostgreSqlResourceV1 : AzureResourceDefinitionV1 { /// diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/RedisCacheResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/RedisCacheResourceV1.cs index a5c6bc4cf..2e01a5bba 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/RedisCacheResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/RedisCacheResourceV1.cs @@ -1,5 +1,8 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a redis cache. + /// public class RedisCacheResourceV1 : AzureResourceDefinitionV1 { /// diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ServiceBusQueueResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ServiceBusQueueResourceV1.cs index 6adf58e9d..d91ec7d97 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ServiceBusQueueResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/ServiceBusQueueResourceV1.cs @@ -1,5 +1,8 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a service bus queue. + /// public class ServiceBusQueueResourceV1 : AzureResourceDefinitionV1 { /// diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/StorageQueueResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/StorageQueueResourceV1.cs index 8e572077f..4812f6af4 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/StorageQueueResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/StorageQueueResourceV1.cs @@ -1,5 +1,8 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a storage queue. + /// public class StorageQueueResourceV1 : AzureResourceDefinitionV1 { /// diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/VirtualMachineResourceV1.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/VirtualMachineResourceV1.cs index a0d57a760..15bd90be7 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/VirtualMachineResourceV1.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Model/ResourceTypes/VirtualMachineResourceV1.cs @@ -1,5 +1,8 @@ namespace Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes { + /// + /// Contains the configuration required to scrape a virtual machine. + /// public class VirtualMachineResourceV1 : AzureResourceDefinitionV1 { /// diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceDeserializer.cs index 5b6895169..ec68f6b64 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerInstanceDeserializer.cs @@ -15,9 +15,11 @@ public ContainerInstanceDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var containerGroup = node.GetString(ContainerGroupTag); + return new ContainerInstanceResourceV1 { - ContainerGroup = GetString(node, ContainerGroupTag) + ContainerGroup = containerGroup }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryDeserializer.cs index b11560924..3dd1be082 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ContainerRegistryDeserializer.cs @@ -15,9 +15,11 @@ public ContainerRegistryDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var registryName = node.GetString(RegistryNameTag); + return new ContainerRegistryResourceV1 { - RegistryName = GetString(node, RegistryNameTag) + RegistryName = registryName }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbDeserializer.cs index 5ecb4e22d..6582dde25 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/CosmosDbDeserializer.cs @@ -15,9 +15,11 @@ public CosmosDbDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var databaseName = node.GetString(DatabaseNameTag); + return new CosmosDbResourceV1 { - DbName = GetString(node, DatabaseNameTag) + DbName = databaseName }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericResourceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericResourceDeserializer.cs index dc99d2917..dadfda114 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericResourceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/GenericResourceDeserializer.cs @@ -16,10 +16,13 @@ public GenericResourceDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var filter = node.GetString(FilterTag); + var resourceUri = node.GetString(ResourceUriTag); + return new GenericResourceV1 { - Filter = GetString(node, FilterTag), - ResourceUri = GetString(node, ResourceUriTag) + Filter = filter, + ResourceUri = resourceUri }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceDeserializer.cs index fe0ab407b..0c1ab380b 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/NetworkInterfaceDeserializer.cs @@ -15,9 +15,11 @@ public NetworkInterfaceDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var networkInterfaceName = node.GetString(NetworkInterfaceNameTag); + return new NetworkInterfaceResourceV1 { - NetworkInterfaceName = GetString(node, NetworkInterfaceNameTag) + NetworkInterfaceName = networkInterfaceName }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlDeserializer.cs index e0a5e2447..db165db9d 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/PostgreSqlDeserializer.cs @@ -15,9 +15,11 @@ public PostgreSqlDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var serverName = node.GetString(ServerNameTag); + return new PostgreSqlResourceV1 { - ServerName = GetString(node, ServerNameTag) + ServerName = serverName }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheDeserializer.cs index 2b2009295..7131e6a47 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/RedisCacheDeserializer.cs @@ -15,9 +15,11 @@ public RedisCacheDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var cacheName = node.GetString(CacheNameTag); + return new RedisCacheResourceV1 { - CacheName = GetString(node, CacheNameTag) + CacheName = cacheName }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ResourceDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ResourceDeserializer.cs index a57aba40a..f75d1f8da 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ResourceDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ResourceDeserializer.cs @@ -20,7 +20,7 @@ public override AzureResourceDefinitionV1 Deserialize(YamlMappingNode node) { var resource = DeserializeResource(node); - resource.ResourceGroupName = GetString(node, ResourceGroupNameTag); + resource.ResourceGroupName = node.GetString(ResourceGroupNameTag); return resource; } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueDeserializer.cs index fbf4a051a..9435fc474 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/ServiceBusQueueDeserializer.cs @@ -16,10 +16,13 @@ public ServiceBusQueueDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var queueName = node.GetString(QueueNameTag); + var @namespace = node.GetString(NamespaceTag); + return new ServiceBusQueueResourceV1 { - QueueName = GetString(node, QueueNameTag), - Namespace = GetString(node, NamespaceTag) + QueueName = queueName, + Namespace = @namespace }; } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueDeserializer.cs index ec6d0f753..6a8731571 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/StorageQueueDeserializer.cs @@ -20,22 +20,16 @@ public StorageQueueDeserializer(IDeserializer secretDeserializer, ILog protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var accountName = node.GetString(AccountNameTag); + var queueName = node.GetString(QueueNameTag); + var sasToken = node.DeserializeChild(SasTokenTag, _secretDeserializer); + return new StorageQueueResourceV1 { - AccountName = GetString(node, AccountNameTag), - QueueName = GetString(node, QueueNameTag), - SasToken = DeserializeSasToken(node) + AccountName = accountName, + QueueName = queueName, + SasToken = sasToken }; } - - private SecretV1 DeserializeSasToken(YamlMappingNode node) - { - if (node.Children.TryGetValue(SasTokenTag, out var sasTokenNode)) - { - return _secretDeserializer.Deserialize((YamlMappingNode) sasTokenNode); - } - - return null; - } } } diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineDeserializer.cs index e1489b3f4..0e9b98a51 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Providers/VirtualMachineDeserializer.cs @@ -15,9 +15,11 @@ public VirtualMachineDeserializer(ILogger logger) : base(logger) protected override AzureResourceDefinitionV1 DeserializeResource(YamlMappingNode node) { + var virtualMachineName = node.GetString(VirtualMachineNameTag); + return new VirtualMachineResourceV1 { - VirtualMachineName = GetString(node, VirtualMachineNameTag) + VirtualMachineName = virtualMachineName }; } } diff --git a/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs b/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs index 34dc7fcd1..c3fb5e68b 100644 --- a/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs +++ b/src/Promitor.Scraper.Host/Validation/RuntimeValidator.cs @@ -27,11 +27,11 @@ public RuntimeValidator( ValidationLogger validatorLogger, IConfiguration configuration, IMapper mapper, - IDeserializer v2Deserializer) + IDeserializer v1Deserializer) { _validationLogger = validatorLogger; - var scrapeConfigurationProvider = new MetricsDeclarationProvider(configuration, _validationLogger, mapper, v2Deserializer); + var scrapeConfigurationProvider = new MetricsDeclarationProvider(configuration, _validationLogger, mapper, v1Deserializer); _validationSteps = new List { new ConfigurationPathValidationStep(metricsConfiguration, _validationLogger), diff --git a/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs b/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs index 7d19f3509..4cf9a42f6 100644 --- a/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs +++ b/src/Promitor.Scraper.Tests.Unit/Builders/Metrics/v1/MetricsDeclarationBuilder.cs @@ -1,9 +1,7 @@ using System.Collections.Generic; using AutoMapper; using Microsoft.Azure.Management.Monitor.Fluent.Models; -using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using Moq; using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.Enum; @@ -11,6 +9,7 @@ using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; using Promitor.Integrations.AzureStorage; +using Promitor.Scraper.Tests.Unit.Serialization.v1; namespace Promitor.Scraper.Tests.Unit.Builders.Metrics.v1 { @@ -64,22 +63,7 @@ public string Build(IMapper mapper) Metrics = _metrics }; - var logger = new Mock(); - - _v1Deserializer = new V1Deserializer( - new AzureMetadataDeserializer(logger.Object), - new MetricDefaultsDeserializer( - new AggregationDeserializer(logger.Object), - new ScrapingDeserializer(logger.Object), - logger.Object), - new MetricDefinitionDeserializer( - new AzureMetricConfigurationDeserializer( - new MetricAggregationDeserializer(logger.Object), - logger.Object), - new ScrapingDeserializer(logger.Object), - new AzureResourceDeserializerFactory(new SecretDeserializer(logger.Object), logger.Object), - logger.Object), - logger.Object); + _v1Deserializer = V1DeserializerFactory.CreateDeserializer(); var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper, _v1Deserializer); return configurationSerializer.Serialize(metricsDeclaration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/YamlMappingNodeExtensionTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/YamlMappingNodeExtensionTests.cs new file mode 100644 index 000000000..fddda4536 --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/YamlMappingNodeExtensionTests.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using Microsoft.Extensions.Logging.Abstractions; +using Promitor.Core.Scraping.Configuration.Serialization; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; +using Xunit; + +namespace Promitor.Scraper.Tests.Unit.Serialization +{ + [Category("Unit")] + public class YamlMappingNodeExtensionTests + { + [Fact] + public void GetString_PropertySpecified_ReturnsValue() + { + // Arrange + var node = YamlUtils.CreateYamlNode("property: value"); + + // Act + var value = node.GetString("property"); + + // Assert + Assert.Equal("value", value); + } + + [Fact] + public void GetString_PropertyNotSpecified_Null() + { + // Arrange + var node = YamlUtils.CreateYamlNode("otherProperty: value"); + + // Act + var value = node.GetString("property"); + + // Assert + Assert.Null(value); + } + + [Fact] + public void GetEnum_PropertySpecified_ReturnsValue() + { + // Arrange + var node = YamlUtils.CreateYamlNode("day: Wednesday"); + + // Act + var value = node.GetEnum("day"); + + // Assert + Assert.Equal(DayOfWeek.Wednesday, value); + } + + [Fact] + public void GetEnum_PropertyNotSpecified_Null() + { + // Arrange + var node = YamlUtils.CreateYamlNode("month: January"); + + // Act + var value = node.GetEnum("day"); + + // Assert + Assert.Null(value); + } + + [Fact] + public void GetEnum_EnumValueNotValid_ThrowsException() + { + // Arrange + var node = YamlUtils.CreateYamlNode("day: MonFriday"); + + // Act / Assert + Assert.Throws(() => node.GetEnum("day")); + } + + [Fact] + public void GetDictionary_PropertySpecified_DeserializesDictionary() + { + // Arrange + const string yamlText = +@"labels: + env: production + tier: web"; + var node = YamlUtils.CreateYamlNode(yamlText); + + // Act + var labels = node.GetDictionary("labels"); + + // Assert + var expected = new Dictionary + { + { "env", "production" }, + { "tier", "web" } + }; + + Assert.Equal(expected, labels); + } + + [Fact] + public void GetDictionary_PropertyNotSpecified_Null() + { + // Arrange + var node = YamlUtils.CreateYamlNode("property: value"); + + // Act + var labels = node.GetDictionary("labels"); + + // Assert + Assert.Null(labels); + } + + [Fact] + public void GetTimeSpan_PropertySpecified_ReturnsValue() + { + // Arrange + var node = YamlUtils.CreateYamlNode("time: 13:08:12"); + + // Act + var value = node.GetTimeSpan("time"); + + // Assert + Assert.Equal(new TimeSpan(0, 13, 8, 12), value); + } + + [Fact] + public void GetTimeSpan_PropertyNotSpecified_Null() + { + // Arrange + var node = YamlUtils.CreateYamlNode("day: Monday"); + + // Act + var value = node.GetTimeSpan("time"); + + // Assert + Assert.Null(value); + } + + [Fact] + public void DeserializeChild_PropertySpecified_DeserializesChild() + { + // Arrange + const string yamlText = +@"aggregation: + interval: 00:05:00"; + var node = YamlUtils.CreateYamlNode(yamlText); + var deserializer = new AggregationDeserializer(NullLogger.Instance); + + // Act + var aggregation = node.DeserializeChild("aggregation", deserializer); + + // Assert + Assert.Equal(TimeSpan.FromMinutes(5), aggregation.Interval); + } + + [Fact] + public void DeserializeChild_PropertyNotSpecified_Null() + { + // Arrange + var node = YamlUtils.CreateYamlNode(@"time: 00:05:30"); + var deserializer = new AggregationDeserializer(NullLogger.Instance); + + // Act + var aggregation = node.DeserializeChild("aggregation", deserializer); + + // Assert + Assert.Null(aggregation); + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AggregationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AggregationDeserializerTests.cs index 1b0212e93..4700aa79c 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AggregationDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AggregationDeserializerTests.cs @@ -1,7 +1,6 @@ using System; using System.ComponentModel; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; @@ -14,9 +13,7 @@ public class AggregationDeserializerTests public AggregationDeserializerTests() { - var logger = new Mock(); - - _deserializer = new AggregationDeserializer(logger.Object); + _deserializer = new AggregationDeserializer(NullLogger.Instance); } [Fact] @@ -26,7 +23,7 @@ public void Deserialize_IntervalSupplied_SetsInterval() const string yamlText = @"aggregation: interval: 00:07:00"; - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, yamlText, "aggregation", @@ -40,7 +37,7 @@ public void Deserialize_IntervalNotSupplied_UsesDefault() const string yamlText = @"aggregation: someProperty: someValue"; - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, yamlText, "aggregation", diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetadataDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetadataDeserializerTests.cs index d38d20f3e..e96d872f5 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetadataDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetadataDeserializerTests.cs @@ -1,6 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; @@ -13,7 +12,7 @@ public class AzureMetadataDeserializerTests public AzureMetadataDeserializerTests() { - _deserializer = new AzureMetadataDeserializer(new Mock().Object); + _deserializer = new AzureMetadataDeserializer(NullLogger.Instance); } [Fact] @@ -25,7 +24,7 @@ public void Deserialize_TenantIdSupplied_SetsTenantId() $@"azureMetadata: tenantId: '{tenantId}'"; - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, yamlText, "azureMetadata", @@ -40,7 +39,7 @@ public void Deserialize_TenantIdNotSupplied_Null() @"azureMetadata: subscriptionId: '0f9d7fea-99e8-4768-8672-06a28514f77e'"; - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, yamlText, "azureMetadata", @@ -56,7 +55,7 @@ public void Deserialize_SubscriptionIdSupplied_SetsSubscriptionId() $@"azureMetadata: subscriptionId: '{subscriptionId}'"; - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, yamlText, "azureMetadata", @@ -71,7 +70,7 @@ public void Deserialize_SubscriptionIdNotSupplied_Null() @"azureMetadata: tenantId: 'c8819874-9e56-4e3f-b1a8-1c0325138f27'"; - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, yamlText, "azureMetadata", @@ -87,7 +86,7 @@ public void Deserialize_ResourceGroupNameSupplied_SetsResourceGroupName() $@"azureMetadata: resourceGroupName: '{resourceGroupName}'"; - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, yamlText, "azureMetadata", @@ -102,7 +101,7 @@ public void Deserialize_ResourceGroupNameNotSupplied_Null() @"azureMetadata: tenantId: 'c8819874-9e56-4e3f-b1a8-1c0325138f27'"; - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, yamlText, "azureMetadata", diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetricConfigurationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetricConfigurationDeserializerTests.cs index 3eb7c301c..679084207 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetricConfigurationDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/AzureMetricConfigurationDeserializerTests.cs @@ -1,5 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; @@ -19,13 +19,13 @@ public AzureMetricConfigurationDeserializerTests() { _aggregationDeserializer = new Mock>(); - _deserializer = new AzureMetricConfigurationDeserializer(_aggregationDeserializer.Object, new Mock().Object); + _deserializer = new AzureMetricConfigurationDeserializer(_aggregationDeserializer.Object, NullLogger.Instance); } [Fact] public void Deserialize_MetricNameSupplied_SetsMetricName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "metricName: ActiveMessages", "ActiveMessages", @@ -35,7 +35,7 @@ public void Deserialize_MetricNameSupplied_SetsMetricName() [Fact] public void Deserialize_MetricNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", a => a.MetricName); @@ -64,7 +64,7 @@ public void Deserialize_AggregationSupplied_UsesDeserializer() [Fact] public void Deserialize_AggregationNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "metricName: ActiveMessages", c => c.Aggregation); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricAggregationDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricAggregationDeserializerTests.cs index f92cff070..07e144fc5 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricAggregationDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricAggregationDeserializerTests.cs @@ -1,8 +1,7 @@ using System; using System.ComponentModel; using Microsoft.Azure.Management.Monitor.Fluent.Models; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; @@ -15,13 +14,13 @@ public class MetricAggregationDeserializerTests public MetricAggregationDeserializerTests() { - _deserializer = new MetricAggregationDeserializer(new Mock().Object); + _deserializer = new MetricAggregationDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_TypeSupplied_SetsType() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "type: Maximum", AggregationType.Maximum, @@ -31,7 +30,7 @@ public void Deserialize_TypeSupplied_SetsType() [Fact] public void Deserialize_TypeNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "interval: 00:05:00", a => a.Type); @@ -40,7 +39,7 @@ public void Deserialize_TypeNotSupplied_Null() [Fact] public void Deserialize_IntervalSupplied_SetsInterval() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "interval: 00:07:00", TimeSpan.FromMinutes(7), @@ -50,7 +49,7 @@ public void Deserialize_IntervalSupplied_SetsInterval() [Fact] public void Deserialize_IntervalNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "type: Average", a => a.Interval); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefaultsDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefaultsDeserializerTests.cs index 68c42143a..1b1c973ce 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefaultsDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefaultsDeserializerTests.cs @@ -1,5 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; @@ -22,7 +22,7 @@ public MetricDefaultsDeserializerTests() _scrapingDeserializer = new Mock>(); _deserializer = new MetricDefaultsDeserializer( - _aggregationDeserializer.Object, _scrapingDeserializer.Object, new Mock().Object); + _aggregationDeserializer.Object, _scrapingDeserializer.Object, NullLogger.Instance); } [Fact] diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefinitionDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefinitionDeserializerTests.cs index 9d3acda56..85bd506cc 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefinitionDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/MetricDefinitionDeserializerTests.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using System.ComponentModel; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Model; using Promitor.Core.Scraping.Configuration.Serialization; @@ -30,13 +30,13 @@ public MetricDefinitionDeserializerTests() _azureMetricConfigurationDeserializer.Object, _scrapingDeserializer.Object, _resourceDeserializerFactory.Object, - new Mock().Object); + NullLogger.Instance); } [Fact] public void Deserialize_NameSupplied_SetsName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "name: promitor_test_metric", "promitor_test_metric", @@ -46,13 +46,13 @@ public void Deserialize_NameSupplied_SetsName() [Fact] public void Deserialize_NameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull(_deserializer, "description: 'Test metric'", d => d.Name); + YamlAssert.PropertyNull(_deserializer, "description: 'Test metric'", d => d.Name); } [Fact] public void Deserialize_DescriptionSupplied_SetsDescription() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "description: 'This is a test metric'", "This is a test metric", @@ -62,13 +62,13 @@ public void Deserialize_DescriptionSupplied_SetsDescription() [Fact] public void Deserialize_DescriptionNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull(_deserializer, "name: metric", d => d.Description); + YamlAssert.PropertyNull(_deserializer, "name: metric", d => d.Description); } [Fact] public void Deserialize_ResourceTypeSupplied_SetsResourceType() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "resourceType: ServiceBusQueue", ResourceType.ServiceBusQueue, @@ -78,7 +78,7 @@ public void Deserialize_ResourceTypeSupplied_SetsResourceType() [Fact] public void Deserialize_ResourceTypeNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "name: promitor_test_metric", d => d.ResourceType); @@ -92,7 +92,7 @@ public void Deserialize_LabelsSupplied_SetsLabels() app: promitor env: test"; - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, yamlText, new Dictionary{{"app", "promitor"}, {"env", "test"}}, @@ -102,7 +102,7 @@ public void Deserialize_LabelsSupplied_SetsLabels() [Fact] public void Deserialize_LabelsNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull(_deserializer, "name: promitor_test_metric", d => d.Labels); + YamlAssert.PropertyNull(_deserializer, "name: promitor_test_metric", d => d.Labels); } [Fact] diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/ScrapingDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/ScrapingDeserializerTests.cs index 1e9e35d11..cd3b4924a 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/ScrapingDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/ScrapingDeserializerTests.cs @@ -1,6 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; @@ -13,7 +12,7 @@ public class ScrapingDeserializerTests public ScrapingDeserializerTests() { - _deserializer = new ScrapingDeserializer(new Mock().Object); + _deserializer = new ScrapingDeserializer(NullLogger.Instance); } [Fact] @@ -23,7 +22,7 @@ public void Deserialize_ScheduleSupplied_SetsSchedule() @"scraping: schedule: '0 * * ? * *'"; - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, yamlText, "scraping", @@ -38,7 +37,7 @@ public void Deserialize_ScheduleNotSupplied_SetsScheduleNull() @"scraping: otherProperty: otherValue"; - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, yamlText, "scraping", diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/SecretDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/SecretDeserializerTests.cs index e35654865..a60cea923 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/SecretDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/SecretDeserializerTests.cs @@ -1,6 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; using Xunit; @@ -13,13 +12,13 @@ public class SecretDeserializerTests public SecretDeserializerTests() { - _deserializer = new SecretDeserializer(new Mock().Object); + _deserializer = new SecretDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_RawValueSupplied_SetsRawValue() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "rawValue: abc123", "abc123", @@ -29,7 +28,7 @@ public void Deserialize_RawValueSupplied_SetsRawValue() [Fact] public void Deserialize_RawValueNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "environmentVariable: MY_VARIABLE", s => s.RawValue); @@ -38,7 +37,7 @@ public void Deserialize_RawValueNotSupplied_Null() [Fact] public void Deserialize_EnvironmentVariableSupplied_SetsEnvironmentVariable() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "environmentVariable: PROMITOR_SECRET", "PROMITOR_SECRET", @@ -48,7 +47,7 @@ public void Deserialize_EnvironmentVariableSupplied_SetsEnvironmentVariable() [Fact] public void Deserialize_EnvironmentVariableNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "rawValue: abc123", s => s.EnvironmentVariable); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs index dbf5beeb5..082882a2e 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Core/V1DeserializerTests.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; @@ -29,7 +29,7 @@ public V1DeserializerTests() _metadataDeserializer.Object, _defaultsDeserializer.Object, _metricsDeserializer.Object, - new Mock().Object); + NullLogger.Instance); } [Fact] diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs index 09de241d1..7f0b240ea 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs @@ -1,5 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; @@ -10,24 +10,24 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] - public class ContainerInstanceDeserializerTests : ResourceDeserializerTestBase + public class ContainerInstanceDeserializerTests : ResourceDeserializerTest { private readonly ContainerInstanceDeserializer _deserializer; public ContainerInstanceDeserializerTests() { - _deserializer = new ContainerInstanceDeserializer(new Mock().Object); + _deserializer = new ContainerInstanceDeserializer(NullLogger.Instance); } protected override IDeserializer CreateDeserializer() { - return new ContainerInstanceDeserializer(new Mock().Object); + return new ContainerInstanceDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_ContainerGroupSupplied_SetsContainerGroup() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "containerGroup: promitor-group", "promitor-group", @@ -37,7 +37,7 @@ public void Deserialize_ContainerGroupSupplied_SetsContainerGroup() [Fact] public void Deserialize_ContainerGroupNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-resource-group", c => c.ContainerGroup); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerRegistryDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerRegistryDeserializerTests.cs index 8445fede5..2245c602f 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerRegistryDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerRegistryDeserializerTests.cs @@ -1,6 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; @@ -10,19 +9,19 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] - public class ContainerRegistryDeserializerTests : ResourceDeserializerTestBase + public class ContainerRegistryDeserializerTests : ResourceDeserializerTest { private readonly ContainerRegistryDeserializer _deserializer; public ContainerRegistryDeserializerTests() { - _deserializer = new ContainerRegistryDeserializer(new Mock().Object); + _deserializer = new ContainerRegistryDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_RegistryNameSupplied_SetsRegistryName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "registryName: promitor-registry", "promitor-registry", @@ -32,7 +31,7 @@ public void Deserialize_RegistryNameSupplied_SetsRegistryName() [Fact] public void Deserialize_RegistryNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", c => c.RegistryName); @@ -40,7 +39,7 @@ public void Deserialize_RegistryNameNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new ContainerRegistryDeserializer(new Mock().Object); + return new ContainerRegistryDeserializer(NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs index 0068ec54d..2c09e8608 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; @@ -10,19 +11,19 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] - public class CosmosDbDeserializerTests : ResourceDeserializerTestBase + public class CosmosDbDeserializerTests : ResourceDeserializerTest { private readonly CosmosDbDeserializer _deserializer; public CosmosDbDeserializerTests() { - _deserializer = new CosmosDbDeserializer(new Mock().Object); + _deserializer = new CosmosDbDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_DbNameSupplied_SetsDbName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "dbName: promitor-cosmos", "promitor-cosmos", @@ -32,7 +33,7 @@ public void Deserialize_DbNameSupplied_SetsDbName() [Fact] public void Deserialize_DbNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", c => c.DbName); @@ -40,7 +41,7 @@ public void Deserialize_DbNameNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new CosmosDbDeserializer(new Mock().Object); + return new CosmosDbDeserializer(NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs index 0e4f057b1..d4cc93337 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; @@ -8,19 +9,19 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { - public class GenericResourceDeserializerTests : ResourceDeserializerTestBase + public class GenericResourceDeserializerTests : ResourceDeserializerTest { private readonly GenericResourceDeserializer _deserializer; public GenericResourceDeserializerTests() { - _deserializer = new GenericResourceDeserializer(new Mock().Object); + _deserializer = new GenericResourceDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_FilterSupplied_SetsFilter() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "filter: EntityName eq 'orders'", "EntityName eq 'orders'", @@ -30,7 +31,7 @@ public void Deserialize_FilterSupplied_SetsFilter() [Fact] public void Deserialize_FilterNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.Filter); @@ -39,7 +40,7 @@ public void Deserialize_FilterNotSupplied_Null() [Fact] public void Deserialize_ResourceUriSupplied_SetsResourceUri() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "resourceUri: Microsoft.ServiceBus/namespaces/promitor-messaging", "Microsoft.ServiceBus/namespaces/promitor-messaging", @@ -49,7 +50,7 @@ public void Deserialize_ResourceUriSupplied_SetsResourceUri() [Fact] public void Deserialize_ResourceUriNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.ResourceUri); @@ -57,7 +58,7 @@ public void Deserialize_ResourceUriNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new GenericResourceDeserializer(new Mock().Object); + return new GenericResourceDeserializer(NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/NetworkInterfaceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/NetworkInterfaceDeserializerTests.cs index 03a97ce4b..03dd73e33 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/NetworkInterfaceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/NetworkInterfaceDeserializerTests.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; @@ -10,7 +11,7 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] - public class NetworkInterfaceDeserializerTests : ResourceDeserializerTestBase + public class NetworkInterfaceDeserializerTests : ResourceDeserializerTest { private readonly NetworkInterfaceDeserializer _deserializer; @@ -22,7 +23,7 @@ public NetworkInterfaceDeserializerTests() [Fact] public void Deserialize_NetworkInterfaceNameSupplied_SetsNetworkInterfaceName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "networkInterfaceName: promitor-nic", "promitor-nic", @@ -32,7 +33,7 @@ public void Deserialize_NetworkInterfaceNameSupplied_SetsNetworkInterfaceName() [Fact] public void Deserialize_NetworkInterfaceNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.NetworkInterfaceName); @@ -40,7 +41,7 @@ public void Deserialize_NetworkInterfaceNameNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new NetworkInterfaceDeserializer(new Mock().Object); + return new NetworkInterfaceDeserializer(NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/PostgreSqlDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/PostgreSqlDeserializerTests.cs index 86b067ebf..d1b5e1c26 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/PostgreSqlDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/PostgreSqlDeserializerTests.cs @@ -1,5 +1,4 @@ -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; @@ -8,19 +7,19 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { - public class PostgreSqlDeserializerTests : ResourceDeserializerTestBase + public class PostgreSqlDeserializerTests : ResourceDeserializerTest { private readonly PostgreSqlDeserializer _deserializer; public PostgreSqlDeserializerTests() { - _deserializer = new PostgreSqlDeserializer(new Mock().Object); + _deserializer = new PostgreSqlDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_ServerNameSupplied_SetsServerName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "serverName: promitor-db", "promitor-db", @@ -30,7 +29,7 @@ public void Deserialize_ServerNameSupplied_SetsServerName() [Fact] public void Deserialize_ServerNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.ServerName); @@ -38,7 +37,7 @@ public void Deserialize_ServerNameNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new PostgreSqlDeserializer(new Mock().Object); + return new PostgreSqlDeserializer(NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/RedisCacheDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/RedisCacheDeserializerTests.cs index 8149e5859..cf99496d4 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/RedisCacheDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/RedisCacheDeserializerTests.cs @@ -1,6 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; @@ -10,19 +9,19 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] - public class RedisCacheDeserializerTests : ResourceDeserializerTestBase + public class RedisCacheDeserializerTests : ResourceDeserializerTest { private readonly RedisCacheDeserializer _deserializer; public RedisCacheDeserializerTests() { - _deserializer = new RedisCacheDeserializer(new Mock().Object); + _deserializer = new RedisCacheDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_CacheNameSupplied_SetsCacheName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "cacheName: promitor-cache", "promitor-cache", @@ -32,7 +31,7 @@ public void Deserialize_CacheNameSupplied_SetsCacheName() [Fact] public void Deserialize_CacheNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.CacheName); @@ -40,7 +39,7 @@ public void Deserialize_CacheNameNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new RedisCacheDeserializer(new Mock().Object); + return new RedisCacheDeserializer(NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTestBase.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTest.cs similarity index 84% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTestBase.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTest.cs index d53cef019..e02a8d0d2 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTestBase.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ResourceDeserializerTest.cs @@ -4,7 +4,7 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { - public abstract class ResourceDeserializerTestBase + public abstract class ResourceDeserializerTest { protected abstract IDeserializer CreateDeserializer(); @@ -13,7 +13,7 @@ public void Deserialize_ResourceGroupNameSupplied_SetsResourceGroupName() { var deserializer = CreateDeserializer(); - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( deserializer, "resourceGroupName: promitor-resource-group", "promitor-resource-group", @@ -25,7 +25,7 @@ public void Deserialize_ResourceGroupNameNotSupplied_Null() { var deserializer = CreateDeserializer(); - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( deserializer, "someProperty: someValue", c => c.ResourceGroupName); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ServiceBusQueueDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ServiceBusQueueDeserializerTests.cs index e7da19772..e04b797d8 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ServiceBusQueueDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ServiceBusQueueDeserializerTests.cs @@ -1,6 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; @@ -10,19 +9,19 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] - public class ServiceBusQueueDeserializerTests : ResourceDeserializerTestBase + public class ServiceBusQueueDeserializerTests : ResourceDeserializerTest { private readonly ServiceBusQueueDeserializer _deserializer; public ServiceBusQueueDeserializerTests() { - _deserializer = new ServiceBusQueueDeserializer(new Mock().Object); + _deserializer = new ServiceBusQueueDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_QueueNameSupplied_SetsQueueName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "queueName: promitor-queue", "promitor-queue", @@ -32,7 +31,7 @@ public void Deserialize_QueueNameSupplied_SetsQueueName() [Fact] public void Deserialize_QueueNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.QueueName); @@ -41,7 +40,7 @@ public void Deserialize_QueueNameNotSupplied_Null() [Fact] public void Deserialize_NamespaceSupplied_SetsNamespace() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "namespace: promitor-sb", "promitor-sb", @@ -51,7 +50,7 @@ public void Deserialize_NamespaceSupplied_SetsNamespace() [Fact] public void Deserialize_NamespaceNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.Namespace); @@ -59,7 +58,7 @@ public void Deserialize_NamespaceNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new ServiceBusQueueDeserializer(new Mock().Object); + return new ServiceBusQueueDeserializer(NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/StorageQueueDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/StorageQueueDeserializerTests.cs index f2244220a..535fb4240 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/StorageQueueDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/StorageQueueDeserializerTests.cs @@ -1,4 +1,4 @@ -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; @@ -9,7 +9,7 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { - public class StorageQueueDeserializerTests : ResourceDeserializerTestBase + public class StorageQueueDeserializerTests : ResourceDeserializerTest { private readonly Mock> _secretDeserializer; @@ -19,13 +19,13 @@ public StorageQueueDeserializerTests() { _secretDeserializer = new Mock>(); - _deserializer = new StorageQueueDeserializer(_secretDeserializer.Object, new Mock().Object); + _deserializer = new StorageQueueDeserializer(_secretDeserializer.Object, NullLogger.Instance); } [Fact] public void Deserialize_AccountNameSupplied_SetsAccountName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "accountName: promitor-acct", "promitor-acct", @@ -35,7 +35,7 @@ public void Deserialize_AccountNameSupplied_SetsAccountName() [Fact] public void Deserialize_AccountNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.AccountName); @@ -44,7 +44,7 @@ public void Deserialize_AccountNameNotSupplied_Null() [Fact] public void Deserialize_QueueNameSupplied_SetsQueueName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "queueName: orders", "orders", @@ -54,7 +54,7 @@ public void Deserialize_QueueNameSupplied_SetsQueueName() [Fact] public void Deserialize_QueueNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.QueueName); @@ -83,7 +83,7 @@ public void Deserialize_SasTokenSupplied_UsesDeserializer() [Fact] public void Deserialize_SasTokenNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.SasToken); @@ -91,7 +91,7 @@ public void Deserialize_SasTokenNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new StorageQueueDeserializer(new Mock>().Object, new Mock().Object); + return new StorageQueueDeserializer(new Mock>().Object, NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/VirtualMachineDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/VirtualMachineDeserializerTests.cs index ed0077d93..4c377e8ad 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/VirtualMachineDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/VirtualMachineDeserializerTests.cs @@ -1,6 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; @@ -10,19 +9,19 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1.Providers { [Category("Unit")] - public class VirtualMachineDeserializerTests : ResourceDeserializerTestBase + public class VirtualMachineDeserializerTests : ResourceDeserializerTest { private readonly VirtualMachineDeserializer _deserializer; public VirtualMachineDeserializerTests() { - _deserializer = new VirtualMachineDeserializer(new Mock().Object); + _deserializer = new VirtualMachineDeserializer(NullLogger.Instance); } [Fact] public void Deserialize_VirtualMachineNameSupplied_SetsName() { - DeserializerTestHelpers.AssertPropertySet( + YamlAssert.PropertySet( _deserializer, "virtualMachineName: promitor-vm", "promitor-vm", @@ -32,7 +31,7 @@ public void Deserialize_VirtualMachineNameSupplied_SetsName() [Fact] public void Deserialize_VirtualMachineNameNotSupplied_Null() { - DeserializerTestHelpers.AssertPropertyNull( + YamlAssert.PropertyNull( _deserializer, "resourceGroupName: promitor-group", r => r.VirtualMachineName); @@ -40,7 +39,7 @@ public void Deserialize_VirtualMachineNameNotSupplied_Null() protected override IDeserializer CreateDeserializer() { - return new VirtualMachineDeserializer(new Mock().Object); + return new VirtualMachineDeserializer(NullLogger.Instance); } } } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1DeserializerFactory.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1DeserializerFactory.cs new file mode 100644 index 000000000..9b5cebadd --- /dev/null +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1DeserializerFactory.cs @@ -0,0 +1,30 @@ +using Microsoft.Extensions.Logging.Abstractions; +using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; + +namespace Promitor.Scraper.Tests.Unit.Serialization.v1 +{ + /// + /// Used to create a deserializer for use by tests. + /// + public static class V1DeserializerFactory + { + public static V1Deserializer CreateDeserializer() + { + var logger = NullLogger.Instance; + return new V1Deserializer( + new AzureMetadataDeserializer(logger), + new MetricDefaultsDeserializer( + new AggregationDeserializer(logger), + new ScrapingDeserializer(logger), + logger), + new MetricDefinitionDeserializer( + new AzureMetricConfigurationDeserializer( + new MetricAggregationDeserializer(logger), + logger), + new ScrapingDeserializer(logger), + new AzureResourceDeserializerFactory(new SecretDeserializer(logger), logger), + logger), + logger); + } + } +} diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1IntegrationTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1SerializationTests.cs similarity index 90% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1IntegrationTests.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1SerializationTests.cs index 9255b16d0..151ecc402 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1IntegrationTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/V1SerializationTests.cs @@ -4,8 +4,7 @@ using System.Linq; using AutoMapper; using Microsoft.Azure.Management.Monitor.Fluent.Models; -using Microsoft.Extensions.Logging; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Model.Metrics.ResourceTypes; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; @@ -17,34 +16,25 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1 { + /// + /// This class contains tests that run the full end-to-end serialization and deserialization + /// process to try to catch anything that the individual unit tests for the deserializers haven't + /// caught. + /// [Category("Unit")] - public class V1IntegrationTests + public class V1SerializationTests { private readonly V1Deserializer _v1Deserializer; private readonly ConfigurationSerializer _configurationSerializer; private readonly MetricsDeclarationV1 _metricsDeclaration; - public V1IntegrationTests() + public V1SerializationTests() { - var logger = new Mock(); var mapperConfiguration = new MapperConfiguration(c => c.AddProfile()); var mapper = mapperConfiguration.CreateMapper(); - _v1Deserializer = new V1Deserializer( - new AzureMetadataDeserializer(logger.Object), - new MetricDefaultsDeserializer( - new AggregationDeserializer(logger.Object), - new ScrapingDeserializer(logger.Object), - logger.Object), - new MetricDefinitionDeserializer( - new AzureMetricConfigurationDeserializer( - new MetricAggregationDeserializer(logger.Object), - logger.Object), - new ScrapingDeserializer(logger.Object), - new AzureResourceDeserializerFactory(new SecretDeserializer(logger.Object), logger.Object), - logger.Object), - logger.Object); - _configurationSerializer = new ConfigurationSerializer(logger.Object, mapper, _v1Deserializer); + _v1Deserializer = V1DeserializerFactory.CreateDeserializer(); + _configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper, _v1Deserializer); _metricsDeclaration = new MetricsDeclarationV1 { @@ -131,9 +121,9 @@ public V1IntegrationTests() } [Fact] - public void CanDeserializeSerializedModel() + public void Deserialize_SerializedModel_CanDeserialize() { - // This test creates a v2 model, serializes it to yaml, and then verifies that + // This test creates a v1 model, serializes it to yaml, and then verifies that // the V1Deserializer can deserialize it. // Arrange @@ -183,7 +173,7 @@ public void CanDeserializeSerializedModel() } [Fact] - public void CanDeserializeToRuntimeModel() + public void Deserialize_SerializedYaml_CanDeserializeToRuntimeModel() { // Arrange var yaml = _configurationSerializer.Serialize(_metricsDeclaration); diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/DeserializerTestHelpers.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/YamlAssert.cs similarity index 93% rename from src/Promitor.Scraper.Tests.Unit/Serialization/v1/DeserializerTestHelpers.cs rename to src/Promitor.Scraper.Tests.Unit/Serialization/v1/YamlAssert.cs index 71fc829e8..491aa4bbc 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/DeserializerTestHelpers.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/YamlAssert.cs @@ -5,7 +5,7 @@ namespace Promitor.Scraper.Tests.Unit.Serialization.v1 { - public static class DeserializerTestHelpers + public static class YamlAssert { /// /// Deserializes the yaml using the deserializer, and asserts that the @@ -17,7 +17,7 @@ public static class DeserializerTestHelpers /// The yaml to deserialize. /// The expected result. /// The property to check. - public static void AssertPropertySet( + public static void PropertySet( IDeserializer deserializer, string yamlText, TResult expected, Func propertyAccessor) { // Arrange @@ -41,7 +41,7 @@ public static void AssertPropertySet( /// /// /// - public static void AssertPropertySet( + public static void PropertySet( IDeserializer deserializer, string yamlText, TResult expected, Func propertyAccessor) where TObject: TBaseObject { @@ -66,7 +66,7 @@ public static void AssertPropertySet( /// The element to find the properties under. /// The expected result. /// The property to check. - public static void AssertPropertySet( + public static void PropertySet( IDeserializer deserializer, string yamlText, string yamlElement, TResult expected, Func propertyAccessor) { // Arrange @@ -86,7 +86,7 @@ public static void AssertPropertySet( /// The deserializer. /// The yaml to deserialize. /// The property to check. - public static void AssertPropertyNull( + public static void PropertyNull( IDeserializer deserializer, string yamlText, Func propertyAccessor) { // Arrange @@ -107,7 +107,7 @@ public static void AssertPropertyNull( /// The deserializer. /// The yaml to deserialize. /// The property to check. - public static void AssertPropertyNull( + public static void PropertyNull( IDeserializer deserializer, string yamlText, Func propertyAccessor) where TObject: TBaseObject { @@ -130,7 +130,7 @@ public static void AssertPropertyNull( /// The yaml to deserialize. /// The property to check. /// The element to look for the property under. - public static void AssertPropertyNull( + public static void PropertyNull( IDeserializer deserializer, string yamlText, string yamlElement, Func propertyAccessor) { // Arrange diff --git a/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs b/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs index f1a2c756f..43271fc7a 100644 --- a/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs +++ b/src/Promitor.Scraper.Tests.Unit/Stubs/MetricsDeclarationProviderStub.cs @@ -1,11 +1,7 @@ using AutoMapper; -using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using Moq; using Promitor.Core.Scraping.Configuration.Providers; -using Promitor.Core.Scraping.Configuration.Serialization; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Core; -using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; +using Promitor.Scraper.Tests.Unit.Serialization.v1; namespace Promitor.Scraper.Tests.Unit.Stubs { @@ -13,31 +9,11 @@ public class MetricsDeclarationProviderStub : MetricsDeclarationProvider { private readonly string _rawMetricsDeclaration; - public MetricsDeclarationProviderStub(string rawMetricsDeclaration, IMapper mapper) : base(configuration: null, logger: NullLogger.Instance, mapper: mapper, v2Deserializer: CreateDeserializer()) + public MetricsDeclarationProviderStub(string rawMetricsDeclaration, IMapper mapper) : base(configuration: null, logger: NullLogger.Instance, mapper: mapper, v1Deserializer: V1DeserializerFactory.CreateDeserializer()) { _rawMetricsDeclaration = rawMetricsDeclaration; } - private static IDeserializer CreateDeserializer() - { - var logger = new Mock(); - - return new V1Deserializer( - new AzureMetadataDeserializer(logger.Object), - new MetricDefaultsDeserializer( - new AggregationDeserializer(logger.Object), - new ScrapingDeserializer(logger.Object), - logger.Object), - new MetricDefinitionDeserializer( - new AzureMetricConfigurationDeserializer( - new MetricAggregationDeserializer(logger.Object), - logger.Object), - new ScrapingDeserializer(logger.Object), - new AzureResourceDeserializerFactory(new SecretDeserializer(logger.Object), logger.Object), - logger.Object), - logger.Object); - } - public override string ReadRawDeclaration() { return _rawMetricsDeclaration; From b6d868a34156c4f31daa36c6393988d41cafe21c Mon Sep 17 00:00:00 2001 From: Adam Connelly Date: Tue, 27 Aug 2019 18:56:02 +0100 Subject: [PATCH 32/32] Fixing build issues - Removed TODO. - Removed unnecessary using directives. --- .../Configuration/Serialization/Deserializer.cs | 3 +-- .../Serialization/v1/Core/ScrapingDeserializer.cs | 1 - .../v1/Providers/ContainerInstanceDeserializerTests.cs | 1 - .../Serialization/v1/Providers/CosmosDbDeserializerTests.cs | 2 -- .../v1/Providers/GenericResourceDeserializerTests.cs | 4 +--- 5 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs index cfc2322e6..c48bb0c52 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/Deserializer.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Runtime.Serialization; using GuardNet; using Microsoft.Extensions.Logging; diff --git a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs index ba85dbccf..6f46a6cf9 100644 --- a/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs +++ b/src/Promitor.Core.Scraping/Configuration/Serialization/v1/Core/ScrapingDeserializer.cs @@ -20,7 +20,6 @@ public override ScrapingV1 Deserialize(YamlMappingNode node) if (scraping.Schedule == null) { - // TODO: this will log an error if this deserializer is reused to deserialize the scraping settings for a metric instead of the global scraping settings. Need to fix that! Logger.LogError("No default metric scraping schedule was configured!"); } diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs index 7f0b240ea..84453b953 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/ContainerInstanceDeserializerTests.cs @@ -1,6 +1,5 @@ using System.ComponentModel; using Microsoft.Extensions.Logging.Abstractions; -using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs index 2c09e8608..d18c079e2 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/CosmosDbDeserializerTests.cs @@ -1,7 +1,5 @@ using System.ComponentModel; -using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using Moq; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes; diff --git a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs index d4cc93337..54053491f 100644 --- a/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs +++ b/src/Promitor.Scraper.Tests.Unit/Serialization/v1/Providers/GenericResourceDeserializerTests.cs @@ -1,6 +1,4 @@ -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Moq; +using Microsoft.Extensions.Logging.Abstractions; using Promitor.Core.Scraping.Configuration.Serialization; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model; using Promitor.Core.Scraping.Configuration.Serialization.v1.Model.ResourceTypes;