public void CollectAllMetrics2X() { var noopLogger = new NoopLogger(); var mockPayloadSender = new MockPayloadSender(); using (var collector = new MetricsCollector(noopLogger, mockPayloadSender, new TestAgentConfigurationReader(noopLogger))) { collector.CollectAllMetrics(); collector.CollectAllMetrics(); } }
public void CollectAllMetrics2X() { var noopLogger = new NoopLogger(); var mockPayloadSender = new MockPayloadSender(); using (var collector = new MetricsCollector(noopLogger, mockPayloadSender, new MockConfigSnapshot(noopLogger))) { collector.CollectAllMetrics(); collector.CollectAllMetrics(); } }
public void CollectAllMetrics_ShouldNotDisableProvider_WhenAnyValueIsSamplesIsValid() { const int iterations = MetricsCollector.MaxTryWithoutSuccess * 2; // Arrange var logger = new NoopLogger(); var mockPayloadSender = new MockPayloadSender(); using var metricsCollector = new MetricsCollector(logger, mockPayloadSender, new ConfigStore(new MockConfigSnapshot(logger, "Information"), _logger)); var metricsProviderMock = new Mock <IMetricsProvider>(); metricsProviderMock.Setup(x => x.IsMetricAlreadyCaptured).Returns(true); metricsProviderMock.Setup(x => x.GetSamples()) .Returns(() => new List <MetricSample> { new MetricSample("key1", double.NaN), new MetricSample("key2", 0.95) }); metricsProviderMock.SetupProperty(x => x.ConsecutiveNumberOfFailedReads); metricsCollector.MetricsProviders.Clear(); metricsCollector.MetricsProviders.Add(metricsProviderMock.Object); // Act foreach (var _ in Enumerable.Range(0, iterations)) { metricsCollector.CollectAllMetrics(); } // Assert mockPayloadSender.Metrics.Count.Should().Be(iterations); mockPayloadSender.Metrics.Should().OnlyContain(x => x.Samples.Count() == 1); metricsProviderMock.Verify(x => x.GetSamples(), Times.Exactly(iterations)); }
public void CollectAllMetrics_ShouldDisableProvider_WhenSamplesAreInvalid(List <MetricSample> samples) { const int iterations = MetricsCollector.MaxTryWithoutSuccess * 2; // Arrange var logger = new NoopLogger(); var mockPayloadSender = new MockPayloadSender(); using var metricsCollector = new MetricsCollector(logger, mockPayloadSender, new ConfigStore(new MockConfigSnapshot(logger, "Information"), _logger)); var metricsProviderMock = new Mock <IMetricsProvider>(); metricsProviderMock.Setup(x => x.IsMetricAlreadyCaptured).Returns(true); metricsProviderMock .Setup(x => x.GetSamples()) .Returns(() => samples); metricsProviderMock.SetupProperty(x => x.ConsecutiveNumberOfFailedReads); metricsCollector.MetricsProviders.Clear(); metricsCollector.MetricsProviders.Add(metricsProviderMock.Object); // Act foreach (var _ in Enumerable.Range(0, iterations)) { metricsCollector.CollectAllMetrics(); } // Assert mockPayloadSender.Metrics.Should().BeEmpty(); metricsProviderMock.Verify(x => x.GetSamples(), Times.Exactly(MetricsCollector.MaxTryWithoutSuccess)); }
public void CollectAllMetrics() { var mockPayloadSender = new MockPayloadSender(); using (var mc = new MetricsCollector(_logger, mockPayloadSender, new ConfigStore(new MockConfigSnapshot(_logger), _logger))) mc.CollectAllMetrics(); mockPayloadSender.Metrics.Should().NotBeEmpty(); }
public void CollectAllMetrics() { var mockPayloadSender = new MockPayloadSender(); var testLogger = new TestLogger(); var mc = new MetricsCollector(testLogger, mockPayloadSender, new TestAgentConfigurationReader(testLogger)); mc.CollectAllMetrics(); mockPayloadSender.Metrics.Should().NotBeEmpty(); }
public void ProviderWithException() { var mockPayloadSender = new MockPayloadSender(); var testLogger = new TestLogger(LogLevel.Information); using (var mc = new MetricsCollector(testLogger, mockPayloadSender, new ConfigStore(new MockConfigSnapshot(disableMetrics: "*"), testLogger))) { mc.MetricsProviders.Clear(); var providerWithException = new MetricsProviderWithException(); mc.MetricsProviders.Add(providerWithException); for (var i = 0; i < MetricsCollector.MaxTryWithoutSuccess; i++) { mc.CollectAllMetrics(); } providerWithException.NumberOfGetValueCalls.Should().Be(MetricsCollector.MaxTryWithoutSuccess); testLogger.Lines.Count(line => line.Contains(MetricsProviderWithException.ExceptionMessage)) .Should() .Be(MetricsCollector.MaxTryWithoutSuccess); testLogger.Lines.Select(l => l.Contains($"Failed reading {providerWithException.DbgName} 1 times")).Should().HaveCountGreaterThan(0); testLogger.Lines.Last(line => line.Contains("Failed reading")) .Should() .Contain( $"Failed reading {providerWithException.DbgName} {MetricsCollector.MaxTryWithoutSuccess} consecutively - the agent won't try reading {providerWithException.DbgName} anymore"); //make sure GetValue() in MetricsProviderWithException is not called anymore: for (var i = 0; i < 10; i++) { mc.CollectAllMetrics(); } var logLineBeforeStage2 = testLogger.Lines.Count; //no more logs, no more calls to GetValue(): providerWithException.NumberOfGetValueCalls.Should().Be(MetricsCollector.MaxTryWithoutSuccess); testLogger.Lines.Count.Should().Be(logLineBeforeStage2); } }
public void ProviderWithException() { var mockPayloadSender = new MockPayloadSender(); var testLogger = new TestLogger(LogLevel.Information); var mc = new MetricsCollector(testLogger, mockPayloadSender, new TestAgentConfigurationReader(testLogger, "Information")); mc.MetricsProviders.Clear(); var providerWithException = new MetricsProviderWithException(); mc.MetricsProviders.Add(providerWithException); for (var i = 0; i < MetricsCollector.MaxTryWithoutSuccess; i++) { mc.CollectAllMetrics(); } providerWithException.NumberOfGetValueCalls.Should().Be(MetricsCollector.MaxTryWithoutSuccess); // *2 because exceptions are logged in a new line, + 2 because 1) printing the metricsinterval and 2) printing that the given metrics // wont be collected anymore: testLogger.Lines.Count.Should().Be(MetricsCollector.MaxTryWithoutSuccess * 2 + 2); testLogger.Lines[1].Should().Contain($"Failed reading {providerWithException.DbgName} 1 times"); testLogger.Lines.Last() .Should() .Contain( $"Failed reading {providerWithException.DbgName} {MetricsCollector.MaxTryWithoutSuccess} consecutively - the agent won't try reading {providerWithException.DbgName} anymore"); //make sure GetValue() in MetricsProviderWithException is not called anymore: for (var i = 0; i < 10; i++) { mc.CollectAllMetrics(); } //no more logs, no more call to GetValue(): providerWithException.NumberOfGetValueCalls.Should().Be(MetricsCollector.MaxTryWithoutSuccess); testLogger.Lines.Count.Should().Be(MetricsCollector.MaxTryWithoutSuccess * 2 + 2); }
public void DisableMetrics_DisableCpuMetrics() { var mockPayloadSender = new MockPayloadSender(); Environment.SetEnvironmentVariable(EnvVarNames.DisableMetrics, "*cpu*"); using var metricsProvider = new MetricsCollector(new NoopLogger(), mockPayloadSender, new EnvironmentConfigurationReader()); metricsProvider.CollectAllMetrics(); mockPayloadSender.Metrics.Should().NotBeEmpty(); var firstMetrics = mockPayloadSender.Metrics.First(); firstMetrics.Should().NotBeNull(); firstMetrics.Samples.Should().NotContain(n => n.KeyValue.Key.Contains("cpu")); //These are collected on all platforms, with the given config they always should be there firstMetrics.Samples.Should() .Contain(n => n.KeyValue.Key.Equals("system.process.memory.size", StringComparison.InvariantCultureIgnoreCase)); firstMetrics.Samples.Should() .Contain(n => n.KeyValue.Key.Equals("system.process.memory.rss.bytes", StringComparison.InvariantCultureIgnoreCase)); }
public void CollectAllMetrics2X() { _metricsCollector.CollectAllMetrics(); _metricsCollector.CollectAllMetrics(); }