Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
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]);
        }