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 <MetricDefinitionV1> { cosmosDbMetricDefinition } }; var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, Mapper); // 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); }
/// <summary> /// Allows a v1 version of the config to be serialized. /// </summary> /// <param name="metricsDeclaration">A v1 version of the config.</param> /// <returns>The serialized yaml.</returns> public string Serialize(MetricsDeclarationV1 metricsDeclaration) { Guard.NotNull(metricsDeclaration, nameof(metricsDeclaration)); var serializer = YamlSerialization.CreateSerializer(); var rawMetricsDeclaration = serializer.Serialize(metricsDeclaration); return(rawMetricsDeclaration); }
public string Build(IMapper mapper) { var metricsDeclaration = new MetricsDeclarationV1 { Version = SpecVersion.v1.ToString(), AzureMetadata = _azureMetadata, MetricDefaults = _metricDefaults, Metrics = _metrics }; var configurationSerializer = new ConfigurationSerializer(NullLogger.Instance, mapper); return(configurationSerializer.Serialize(metricsDeclaration)); }
public MetricsDeclarationV1 InterpretYamlStream(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 <MetricDefinitionV1> 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); }
public V1SerializationTests() { var mapperConfiguration = new MapperConfiguration(c => c.AddProfile <V1MappingProfile>()); var mapper = mapperConfiguration.CreateMapper(); _v1Deserializer = V1DeserializerFactory.CreateDeserializer(); _configurationSerializer = new ConfigurationSerializer(NullLogger <ConfigurationSerializer> .Instance, mapper, _v1Deserializer); _metricsDeclaration = new MetricsDeclarationV1 { AzureMetadata = new AzureMetadataV1 { TenantId = "tenant", SubscriptionId = "subscription", ResourceGroupName = "promitor-group" }, MetricDefaults = new MetricDefaultsV1 { Aggregation = new AggregationV1 { Interval = TimeSpan.FromMinutes(7) }, Scraping = new ScrapingV1 { Schedule = "1 2 3 4 5" }, Labels = new Dictionary <string, string> { { "geo", "china" } } }, Metrics = new List <MetricDefinitionV1> { new MetricDefinitionV1 { 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 <string, string> { { "app", "promitor" } }, AzureMetricConfiguration = new AzureMetricConfigurationV1 { MetricName = "ActiveMessages", Aggregation = new MetricAggregationV1 { Type = AggregationType.Average } }, Resources = new List <AzureResourceDefinitionV1> { new GenericResourceV1 { ResourceUri = "Microsoft.ServiceBus/namespaces/promitor-messaging", Filter = "EntityName eq 'orders'" }, new GenericResourceV1 { ResourceUri = "Microsoft.ServiceBus/namespaces/promitor-messaging", Filter = "EntityName eq 'accounts'" } } }, new MetricDefinitionV1 { Name = "promitor_demo_servicebusqueue_queue_size", Description = "Amount of active messages of the 'orders' queue (determined with ServiceBusNamespace provider)", ResourceType = ResourceType.ServiceBusNamespace, AzureMetricConfiguration = new AzureMetricConfigurationV1 { MetricName = "ActiveMessages", Aggregation = new MetricAggregationV1 { Type = AggregationType.Average, Interval = TimeSpan.FromMinutes(15) } }, Scraping = new ScrapingV1 { Schedule = "5 4 3 2 1" }, Resources = new List <AzureResourceDefinitionV1> { new ServiceBusNamespaceResourceV1 { Namespace = "promitor-messaging", QueueName = "orders", ResourceGroupName = "promitor-demo-group" } }, ResourceDiscoveryGroups = new List <AzureResourceDiscoveryGroupDefinitionV1> { new AzureResourceDiscoveryGroupDefinitionV1 { Name = "example-resource-collection" } } } } }; }