public void CalculatedMetricReportsErrorWhenProjectionIsNotDouble()
        {
            // ARRANGE
            var metricInfo = new CalculatedMetricInfo()
            {
                Id            = "Metric1",
                TelemetryType = TelemetryType.Request,
                Projection    = "Id",
                Aggregation   = AggregationType.Sum,
                FilterGroups  = new FilterConjunctionGroupInfo[0]
            };

            var telemetry = new RequestTelemetry()
            {
                Id = "NotDoubleValue"
            };

            CollectionConfigurationError[] errors;
            var metric = new CalculatedMetric <RequestTelemetry>(metricInfo, out errors);

            // ACT
            try
            {
                metric.Project(telemetry);
            }
            catch (ArgumentOutOfRangeException e)
            {
                // ASSERT
                Assert.IsTrue(e.ToString().Contains("Id"));
                return;
            }

            Assert.Fail();
        }
        public void CalculatedMetricHandlesNullFiltersCorrectly()
        {
            // ARRANGE
            var metricInfo = new CalculatedMetricInfo()
            {
                Id            = "Metric1",
                TelemetryType = TelemetryType.Request,
                Projection    = "Name",
                Aggregation   = AggregationType.Sum,
                FilterGroups  = null
            };

            var telemetryThatMustPass = new RequestTelemetry()
            {
                Name = "Both the words 'dog' and 'CAT' are here, which satisfies both filters"
            };

            // ACT
            CollectionConfigurationError[] errors;
            var metric = new CalculatedMetric <RequestTelemetry>(metricInfo, out errors);

            // ASSERT
            Assert.AreEqual(0, errors.Length);

            Assert.IsTrue(metric.CheckFilters(telemetryThatMustPass, out errors));
            Assert.AreEqual(0, errors.Length);
        }
        public void CalculatedMetricProjectsCorrectlyWhenTimeSpan()
        {
            // ARRANGE
            var metricInfo = new CalculatedMetricInfo()
            {
                Id            = "Metric1",
                TelemetryType = TelemetryType.Request,
                Projection    = "Duration",
                Aggregation   = AggregationType.Avg,
                FilterGroups  = new FilterConjunctionGroupInfo[0]
            };

            var telemetry = new RequestTelemetry()
            {
                Duration = TimeSpan.FromMilliseconds(120)
            };

            // ACT
            CollectionConfigurationError[] errors;
            var    metric     = new CalculatedMetric <RequestTelemetry>(metricInfo, out errors);
            double projection = metric.Project(telemetry);

            // ASSERT
            Assert.AreEqual(AggregationType.Avg, metric.AggregationType);
            Assert.AreEqual(0, errors.Length);
            Assert.AreEqual(120, projection);
        }
        public void CalculatedMetricProjectsCorrectlyWhenCustomMetric()
        {
            // ARRANGE
            var metricInfo = new CalculatedMetricInfo()
            {
                Id            = "Metric1",
                TelemetryType = TelemetryType.Request,
                Projection    = "CustomMetrics.Metric1",
                Aggregation   = AggregationType.Sum,
                FilterGroups  = new FilterConjunctionGroupInfo[0]
            };

            var telemetry = new RequestTelemetry()
            {
                Metrics = { ["Metric1"] = 1.75d }
            };

            // ACT
            CollectionConfigurationError[] errors;
            var    metric     = new CalculatedMetric <RequestTelemetry>(metricInfo, out errors);
            double projection = metric.Project(telemetry);

            // ASSERT
            Assert.AreEqual(AggregationType.Sum, metric.AggregationType);
            Assert.AreEqual(0, errors.Length);
            Assert.AreEqual(1.75d, projection);
        }
        public void CalculatedMetricProjectsCorrectlyWhenTrain()
        {
            // ARRANGE
            var metricInfo = new CalculatedMetricInfo()
            {
                Id            = "Metric1",
                TelemetryType = TelemetryType.Request,
                Projection    = "Context.Operation.Name",
                Aggregation   = AggregationType.Sum,
                FilterGroups  = new FilterConjunctionGroupInfo[0]
            };

            var telemetry = new RequestTelemetry()
            {
                Context = { Operation = { Name = "123.56" } }
            };

            // ACT
            CollectionConfigurationError[] errors;
            var    metric     = new CalculatedMetric <RequestTelemetry>(metricInfo, out errors);
            double projection = metric.Project(telemetry);

            // ASSERT
            Assert.AreEqual(AggregationType.Sum, metric.AggregationType);
            Assert.AreEqual(0, errors.Length);
            Assert.AreEqual(123.56, projection);
        }
示例#6
0
 public void GetDataFromDB(string macaddress, DateTime dateDebut, DateTime dateFin, int calculationtype)
 {
     DBConnexion();
     try
     {
         RequestGenerator rg      = new RequestGenerator();
         MySqlCommand     command = connection.CreateCommand();
         command.CommandText = rg.buildSelectRequest(macaddress, dateDebut, dateFin, calculationtype);
         MySqlDataReader reader;
         reader = command.ExecuteReader();
         while (reader.Read())
         {
             CalculatedMetric cm = new CalculatedMetric();
             cm.DateEnd                    = DateTime.ParseExact(reader["DateEnd"].ToString(), "yyyy-MM-dd HH:mm tt", null);
             cm.DateStart                  = DateTime.ParseExact(reader["DateStart"].ToString(), "yyyy-MM-dd HH:mm tt", null);
             cm.Devicemacaddress           = reader["Devicemacaddress"].ToString();
             cm.Metric_Calculation_Type_ID = Convert.ToInt32(reader["Metric_Calculation_Type_ID"].ToString());
             cm.Calculated_Metric_Value    = reader["Calculated_Metric_Value"].ToString();
             list_calc.Add(cm);
         }
         connection.Close();
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
        public DataGenerator(int number)
        {
            Random rnd = new Random();

            list = new List <CalculatedMetric>();

            for (int i = 0; i < number; i++)
            {
                int nb_deb;
                int nb_fin;
                nb_deb = rnd.Next(1, 50);
                nb_fin = rnd.Next(1, 50);
                while (nb_deb > nb_fin)
                {
                    nb_deb = rnd.Next(1, 200);
                    nb_fin = rnd.Next(1, 200);
                }

                CalculatedMetric cm = new CalculatedMetric();
                cm.DateEnd                    = MethodesGlobales.GoodDateAdd(DateTime.Now, nb_fin);
                cm.DateStart                  = MethodesGlobales.GoodDateAdd(DateTime.Now, nb_deb);
                cm.Devicemacaddress           = GetRandomMacAddress();
                cm.Metric_Calculation_Type_ID = 1;
                cm.Calculated_Metric_Value    = rnd.Next(1, 20).ToString();
                list.Add(cm);
            }
        }
示例#8
0
        public CalculatedMetric ApplyCalculation(List <CalculatedMetric> metrics, int calcType)
        {
            CalculatedMetric cmFinal = new CalculatedMetric();
            int longueur             = metrics.Count();

            switch (calcType)
            {
            case 1:
                int total = 0;
                foreach (CalculatedMetric m in metrics)
                {
                    total = total + int.Parse(m.Calculated_Metric_Value);
                }

                cmFinal.Calculated_Metric_Value = CalcMoyenne(longueur, total).ToString();
                cmFinal.Devicemacaddress        = longueur.ToString();
                break;

            case 2:
                List <int> l = new List <int>();
                foreach (CalculatedMetric m in metrics)
                {
                    l.Add(int.Parse(m.Calculated_Metric_Value));
                }
                cmFinal.Calculated_Metric_Value = CalcMedian(l).ToString();
                cmFinal.Devicemacaddress        = longueur.ToString();
                break;
            }
            return(cmFinal);
        }
        public void CalculatedMetricReportsErrorsForInvalidFilters()
        {
            // ARRANGE
            var filterInfo1 = new FilterInfo()
            {
                FieldName = "Name", Predicate = Predicate.Equal, Comparand = "Sky"
            };
            var filterInfo2 = new FilterInfo()
            {
                FieldName = "NonExistentField", Predicate = Predicate.Equal, Comparand = "Comparand"
            };
            var metricInfo = new CalculatedMetricInfo()
            {
                Id            = "Metric1",
                TelemetryType = TelemetryType.Request,
                Projection    = "Name",
                Aggregation   = AggregationType.Avg,
                FilterGroups  = new[] { new FilterConjunctionGroupInfo()
                                        {
                                            Filters = new[] { filterInfo1, filterInfo2 }
                                        } }
            };

            // ACT
            CollectionConfigurationError[] errors;
            var metric = new CalculatedMetric <RequestTelemetry>(metricInfo, out errors);

            // ASSERT
            Assert.AreEqual(CollectionConfigurationErrorType.FilterFailureToCreateUnexpected, errors.Single().ErrorType);
            Assert.AreEqual(
                "Failed to create a filter NonExistentField Equal Comparand.",
                errors.Single().Message);
            Assert.IsTrue(errors.Single().FullException.Contains("Error finding property NonExistentField in the type Microsoft.ApplicationInsights.DataContracts.RequestTelemetry"));
            Assert.AreEqual(4, errors[0].Data.Count);
            Assert.AreEqual("Metric1", errors[0].Data["MetricId"]);
            Assert.AreEqual("NonExistentField", errors[0].Data["FilterFieldName"]);
            Assert.AreEqual(Predicate.Equal.ToString(), errors[0].Data["FilterPredicate"]);
            Assert.AreEqual("Comparand", errors[0].Data["FilterComparand"]);

            // we must be left with the one valid filter only
            Assert.IsTrue(metric.CheckFilters(new RequestTelemetry()
            {
                Name = "sky"
            }, out errors));
            Assert.AreEqual(0, errors.Length);

            Assert.IsFalse(metric.CheckFilters(new RequestTelemetry()
            {
                Name = "sky1"
            }, out errors));
            Assert.AreEqual(0, errors.Length);
        }
        public void CalculatedMetricFiltersCorrectly()
        {
            // ARRANGE
            var filterInfo1 = new FilterInfo()
            {
                FieldName = "Name", Predicate = Predicate.Contains, Comparand = "dog"
            };
            var filterInfo2 = new FilterInfo()
            {
                FieldName = "Name", Predicate = Predicate.Contains, Comparand = "cat"
            };
            var metricInfo = new CalculatedMetricInfo()
            {
                Id            = "Metric1",
                TelemetryType = TelemetryType.Request,
                Projection    = "Name",
                Aggregation   = AggregationType.Sum,
                FilterGroups  = new[] { new FilterConjunctionGroupInfo()
                                        {
                                            Filters = new[] { filterInfo1, filterInfo2 }
                                        } }
            };

            var telemetryThatMustPass = new RequestTelemetry()
            {
                Name = "Both the words 'dog' and 'CAT' are here, which satisfies both filters"
            };
            var telemetryThatMustFail1 = new RequestTelemetry()
            {
                Name = "This value only contains the word 'dog', but not the other one"
            };
            var telemetryThatMustFail2 = new RequestTelemetry()
            {
                Name = "This value only contains the word 'cat', but not the other one"
            };

            // ACT
            CollectionConfigurationError[] errors;
            var metric = new CalculatedMetric <RequestTelemetry>(metricInfo, out errors);

            // ASSERT
            Assert.AreEqual(0, errors.Length);

            Assert.IsTrue(metric.CheckFilters(telemetryThatMustPass, out errors));
            Assert.AreEqual(0, errors.Length);

            Assert.IsFalse(metric.CheckFilters(telemetryThatMustFail1, out errors));
            Assert.AreEqual(0, errors.Length);

            Assert.IsFalse(metric.CheckFilters(telemetryThatMustFail2, out errors));
            Assert.AreEqual(0, errors.Length);
        }
        public void CalculatedMetricPerformsLogicalConnectionsBetweenFiltersCorrectly()
        {
            // ARRANGE
            var filterInfoDog = new FilterInfo()
            {
                FieldName = "Name", Predicate = Predicate.Contains, Comparand = "dog"
            };
            var filterInfoCat = new FilterInfo()
            {
                FieldName = "Name", Predicate = Predicate.Contains, Comparand = "cat"
            };
            var filterInfoApple = new FilterInfo()
            {
                FieldName = "Name", Predicate = Predicate.Contains, Comparand = "apple"
            };
            var filterInfoOrange = new FilterInfo()
            {
                FieldName = "Name", Predicate = Predicate.Contains, Comparand = "orange"
            };
            var metricInfo = new CalculatedMetricInfo()
            {
                Id            = "Metric1",
                TelemetryType = TelemetryType.Request,
                Projection    = "Name",
                Aggregation   = AggregationType.Sum,
                FilterGroups  =
                    new[]
                {
                    new FilterConjunctionGroupInfo()
                    {
                        Filters = new[] { filterInfoDog, filterInfoCat }
                    },
                    new FilterConjunctionGroupInfo()
                    {
                        Filters = new[] { filterInfoApple, filterInfoOrange }
                    }
                }
            };

            var telemetryThatMustPass1 = new RequestTelemetry()
            {
                Name = "Both the words 'dog' and 'CAT' are here, which satisfies the first OR."
            };
            var telemetryThatMustPass2 = new RequestTelemetry()
            {
                Name = "Both the words 'apple' and 'ORANGE' are here, which satisfies the second OR."
            };
            var telemetryThatMustPass3 = new RequestTelemetry()
            {
                Name = "All four words are here: 'dog', 'cat', 'apple', and 'orange'!"
            };
            var telemetryThatMustFail1 = new RequestTelemetry()
            {
                Name = "This value only contains the words 'dog' and 'apple', which is not enough to satisfy any of the OR conditions."
            };
            var telemetryThatMustFail2 = new RequestTelemetry()
            {
                Name = "This value only contains the word 'cat' and 'orange', which is not enough to satisfy any of the OR conditions."
            };
            var telemetryThatMustFail3 = new RequestTelemetry()
            {
                Name = "None of the words are here!"
            };

            // ACT
            CollectionConfigurationError[] errors;
            var metric = new CalculatedMetric <RequestTelemetry>(metricInfo, out errors);

            // ASSERT
            Assert.AreEqual(0, errors.Length);

            Assert.IsTrue(metric.CheckFilters(telemetryThatMustPass1, out errors));
            Assert.AreEqual(0, errors.Length);

            Assert.IsTrue(metric.CheckFilters(telemetryThatMustPass2, out errors));
            Assert.AreEqual(0, errors.Length);

            Assert.IsTrue(metric.CheckFilters(telemetryThatMustPass3, out errors));
            Assert.AreEqual(0, errors.Length);

            Assert.IsFalse(metric.CheckFilters(telemetryThatMustFail1, out errors));
            Assert.AreEqual(0, errors.Length);

            Assert.IsFalse(metric.CheckFilters(telemetryThatMustFail2, out errors));
            Assert.AreEqual(0, errors.Length);

            Assert.IsFalse(metric.CheckFilters(telemetryThatMustFail3, out errors));
            Assert.AreEqual(0, errors.Length);
        }