Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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"
                            }
                        }
                    }
                }
            };
        }