private void FillRepositoryWithPreviousResults(IMetricsRepository repository) { Enumerable.Range(1, 31) .ToList() .ForEach(pastDay => { var pastResultsEU = new Dictionary <IAnalyzer <IMetric>, IMetric> { { Initializers.Size(), new DoubleMetric(MetricEntity.Dataset, "*", "Size", Math.Floor(pastDay / 3.0)) }, { Initializers.Mean("sales"), new DoubleMetric(MetricEntity.Column, "sales", "Mean", pastDay * 7) } }; var pastResultsNA = new Dictionary <IAnalyzer <IMetric>, IMetric> { { Initializers.Size(), new DoubleMetric(MetricEntity.Dataset, "*", "Size", pastDay) }, { Initializers.Mean("sales"), new DoubleMetric(MetricEntity.Column, "sales", "Mean", pastDay * 9) } }; var analyzerContextEU = new AnalyzerContext(pastResultsEU); var analyzerContextNA = new AnalyzerContext(pastResultsNA); long dateTime = CreateDate(2018, 7, pastDay); repository.Save(new ResultKey(dateTime, new Dictionary <string, string> { { "marketplace", "EU" } }), analyzerContextEU); repository.Save(new ResultKey(dateTime, new Dictionary <string, string> { { "marketplace", "NA" } }), analyzerContextNA); }); }
private VerificationResult CreateAnomalyChecksAndRunEverything( DataFrame data, IMetricsRepository repository, Check otherCheck, IEnumerable <IAnalyzer <IMetric> > additionalRequiredAnalyzers) { // We only want to use historic data with the EU tag for the anomaly checks since the new // data point is from the EU marketplace var filterEU = new Dictionary <string, string> { { "marketplace", "EU" } }; // We only want to use data points before the date time associated with the current // data point and only ones that are from 2018 var afterDateTime = CreateDate(2018, 1, 1); var beforeDateTime = CreateDate(2018, 8, 1); // Config for the size anomaly check var sizeAnomalyCheckConfig = new AnomalyCheckConfig(CheckLevel.Error, "Size only increases", filterEU, afterDateTime, beforeDateTime); var sizeAnomalyDetectionStrategy = new AbsoluteChangeStrategy(0); // Config for the mean sales anomaly check var meanSalesAnomalyCheckConfig = new AnomalyCheckConfig( CheckLevel.Warning, "Sales mean within 2 standard deviations", filterEU, afterDateTime, beforeDateTime ); var meanSalesAnomalyDetectionStrategy = new OnlineNormalStrategy(upperDeviationFactor: 2, lowerDeviationFactor: Option <double> .None, ignoreAnomalies: false); // ResultKey to be used when saving the results of this run var currentRunResultKey = new ResultKey(CreateDate(2018, 8, 1), new Dictionary <string, string> { { "marketplace", "EU" } }); return(new VerificationSuite() .OnData(data) .AddCheck(otherCheck) .AddRequiredAnalyzers(additionalRequiredAnalyzers) .UseRepository(repository) // Add the Size anomaly check .AddAnomalyCheck(sizeAnomalyDetectionStrategy, Initializers.Size(), sizeAnomalyCheckConfig) // Add the Mean sales anomaly check .AddAnomalyCheck(meanSalesAnomalyDetectionStrategy, Initializers.Mean("sales"), meanSalesAnomalyCheckConfig) // Save new data point in the repository after we calculated everything .SaveOrAppendResult(currentRunResultKey) .Run()); }
private static void Evaluate(SparkSession session, Action <AnalyzerContext, IMetricsRepository> func) { DataFrame data = FixtureSupport.GetDFFull(session); AnalyzerContext results = CreateAnalysis().Run(data, Option <IStateLoader> .None, Option <IStatePersister> .None); IMetricsRepository repository = CreateRepository(); func(results, repository); }
public MetricsStore( IMetricsRepository <Metric> metricRepository, ILogger <MetricsStore> logger, IDbQueryConfiguration dbQuery, ICacheManager cacheManager) { _metricRepository = metricRepository; _cacheManager = cacheManager; _dbQuery = dbQuery; _logger = logger; }
private void TestAnomalyDetection( SparkSession session, IMetricsRepository repository) { var data = GetTestData(session); // Fill repository with some fake results from previous runs for July 2018 FillRepositoryWithPreviousResults(repository); // Some other checks and analyzers we are interested in not related to the anomaly detection var(otherCheck, additionalRequiredAnalyzers) = GetNormalCheckAndRequiredAnalyzers(); // This method is where the interesting stuff happens var verificationResult = CreateAnomalyChecksAndRunEverything(data, repository, otherCheck, additionalRequiredAnalyzers); PrintConstraintResults(verificationResult); AssertAnomalyCheckResultsAreCorrect(verificationResult); }
public QueueConsumerServiceTests() { var logger = new Mock <ILogger>(); var loggerFactory = new Mock <ILoggerFactory>(); loggerFactory.Setup(c => c.CreateLogger(It.IsAny <string>())).Returns(logger.Object); _loggerFactory = loggerFactory.Object; var metricsRepo = new Mock <IMetricsRepository>(); _metricsRepo = metricsRepo.Object; var model = new Mock <IModel>(); var connection = new Mock <IConnection>(); connection.Setup(c => c.CreateModel()).Returns(model.Object); var connectonFactory = new Mock <ConnectionFactory>(); connectonFactory.Setup(c => c.CreateConnection()).Returns(connection.Object); _connectionFactory = connectonFactory.Object; }
/// <summary> /// Set a metrics repository associated with the current data to enable features like reusing previously computed results and storing the results of the current run. /// </summary> /// <param name="metricsRepository">A metrics repository to store and load results associated with the run</param> /// <returns></returns> public VerificationRunBuilderWithRepository UseRepository(IMetricsRepository metricsRepository) => new VerificationRunBuilderWithRepository(this, new Option <IMetricsRepository>(metricsRepository));
public QueueConsumerService(ILoggerFactory loggerFactory, IMetricsRepository metricsRepository) { _metricsRepository = metricsRepository; _logger = loggerFactory.CreateLogger <QueueConsumerService>(); }
public ServiceBusMetricsController(IMetricsRepository <ServiceBusModel> serviceBusMetricsRepository) { _serviceBusMetricsRepository = serviceBusMetricsRepository; }
public MetricsModel(IMetricsRepository metricsRepo) { _metricsRepo = metricsRepo; }
public MetricGetHandler(IMetricsRepository repository = null) { _repository = repository ?? new MetricRepository(); }
public QueueMetricsController(IMetricsRepository <QueueMetricModel> queuesMetricRepository) { _queuesMetricRepository = queuesMetricRepository; }
public MetricsService(IMetricsRepository metricsRepository) { _metricsRepository = metricsRepository; }
public MetricsService(IMetricsRepository metricsRepo, IUnitOfWork unitOfWork) { _metricsRepo = metricsRepo; _unitOfWork = unitOfWork; }
public MetricsController(IMetricsRepository metricsRepository) { _metricsRepository = metricsRepository; }