public DeploymentMetricsApiModel(DeploymentMetrics metricsServiceModel) { if (metricsServiceModel == null) { return; } var metrics = metricsServiceModel.Metrics; this.AppliedCount = metrics.TryGetValue(APPLIED_METRICS_KEY, out var value) ? value : 0; this.TargetedCount = metrics.TryGetValue(TARGETED_METRICS_KEY, out value) ? value : 0; this.SucceededCount = metrics.TryGetValue(SUCCESSFUL_METRICS_KEY, out value) ? value : 0; this.FailedCount = metrics.TryGetValue(FAILED_METRICS_KEY, out value) ? value : 0; }
public void ReportsAccurateAvailability() { /* Setup */ Dictionary <string, double> runningTime = new Dictionary <string, double>(); Dictionary <string, double> expectedTime = new Dictionary <string, double>(); Action <double, string[]> OnSet(Dictionary <string, double> result) { return((val, tags) => { if (tags[0] == "edgeAgent") { return; // Ignore edgeAgent b/c it is calculated differently } result[tags[0]] = val; }); } var metricsProvider = new Mock <IMetricsProvider>(); var runningTimeGauge = new Mock <IMetricsGauge>(); runningTimeGauge.Setup(x => x.Set(It.IsAny <double>(), It.IsAny <string[]>())).Callback(OnSet(runningTime)); metricsProvider.Setup(x => x.CreateGauge( "total_time_running_correctly_seconds", It.IsAny <string>(), new List <string> { "module_name", MetricsConstants.MsTelemetry })) .Returns(runningTimeGauge.Object); var expectedTimeGauge = new Mock <IMetricsGauge>(); expectedTimeGauge.Setup(x => x.Set(It.IsAny <double>(), It.IsAny <string[]>())).Callback(OnSet(expectedTime)); metricsProvider.Setup(x => x.CreateGauge( "total_time_expected_running_seconds", It.IsAny <string>(), new List <string> { "module_name", MetricsConstants.MsTelemetry })) .Returns(expectedTimeGauge.Object); var systemTime = new Mock <ISystemTime>(); DateTime fakeTime = DateTime.Now; systemTime.Setup(x => x.UtcNow).Returns(() => fakeTime); DeploymentMetrics availabilityMetrics = new DeploymentMetrics(metricsProvider.Object, Path.GetTempPath(), systemTime.Object); (TestRuntimeModule[] current, TestModule[] desired) = GetTestModules(3); ModuleSet currentModuleSet = ModuleSet.Create(current as IModule[]); ModuleSet desiredModuleSet = ModuleSet.Create(desired); /* Test */ availabilityMetrics.ComputeAvailability(desiredModuleSet, currentModuleSet); Assert.Empty(runningTime); fakeTime = fakeTime.AddMinutes(10); availabilityMetrics.ComputeAvailability(desiredModuleSet, currentModuleSet); Assert.Equal(3, runningTime.Count); Assert.Equal(3, expectedTime.Count); Assert.Equal(600, runningTime[current[0].Name]); Assert.Equal(600, expectedTime[current[0].Name]); Assert.Equal(600, runningTime[current[1].Name]); Assert.Equal(600, expectedTime[current[1].Name]); Assert.Equal(600, runningTime[current[2].Name]); Assert.Equal(600, expectedTime[current[2].Name]); fakeTime = fakeTime.AddMinutes(10); current[1].RuntimeStatus = ModuleStatus.Failed; current[2].RuntimeStatus = ModuleStatus.Failed; availabilityMetrics.ComputeAvailability(desiredModuleSet, currentModuleSet); Assert.Equal(3, runningTime.Count); Assert.Equal(3, expectedTime.Count); Assert.Equal(1200, runningTime[current[0].Name]); Assert.Equal(1200, expectedTime[current[0].Name]); Assert.Equal(600, runningTime[current[1].Name]); Assert.Equal(1200, expectedTime[current[1].Name]); Assert.Equal(600, runningTime[current[2].Name]); Assert.Equal(1200, expectedTime[current[2].Name]); fakeTime = fakeTime.AddMinutes(10); current[1].RuntimeStatus = ModuleStatus.Running; availabilityMetrics.ComputeAvailability(desiredModuleSet, currentModuleSet); Assert.Equal(3, runningTime.Count); Assert.Equal(3, expectedTime.Count); Assert.Equal(1800, runningTime[current[0].Name]); Assert.Equal(1800, expectedTime[current[0].Name]); Assert.Equal(1200, runningTime[current[1].Name]); Assert.Equal(1800, expectedTime[current[1].Name]); Assert.Equal(600, runningTime[current[2].Name]); Assert.Equal(1800, expectedTime[current[2].Name]); }