示例#1
0
        public async Task <ActionResult> SendReport()
        {
            var report = new AzureMLAnomalyReport
            {
                Date                      = DateTime.UtcNow,
                AnomalyGroups             = new List <AzureMLAnomalyGroup>(),
                CollectedDataTypeOfReport = CollectedDataType.AggregationForHour
            };

            var reportMessage = new InstanceAnomalyReportMessage
            {
                AnomalyReportId = Guid.NewGuid(),
                InstanceId      = Guid.Parse("11c1b774-b459-4cc1-9f70-a54c8964802d")
            };
            await _serviceBusProvider.SendAnomalyReportMessage(reportMessage);

            return(Ok());
        }
示例#2
0
        private async Task <MessageProcessResponse> OnAnomalyReportProcessAsync(InstanceAnomalyReportMessage arg, CancellationToken stoppingToken)
        {
            if (stoppingToken.IsCancellationRequested)
            {
                using (LogContext.PushProperty("ClassName", this.GetType().FullName))
                    using (LogContext.PushProperty("Source", this.GetType().Name))
                    {
                        _logger.LogError("Cancellation was requested, stopping token.");
                    }

                return(MessageProcessResponse.Abandon);
            }


            using (var scope = _scopeFactory.CreateScope())
            {
                var notificationService = scope.ServiceProvider.GetRequiredService <INotificationService>();
                var reportsService      = scope.ServiceProvider.GetRequiredService <IInstanceAnomalyReportsService>();
                var report = await reportsService.GetReportByIdAsync(arg.AnomalyReportId);

                var notificationRequest = new NotificationRequest
                {
                    CreatedAt  = report.Date,
                    InstanceId = report.ClientId,
                    Type       = NotificationType.Info
                };

                var htmlFileUrl = await notificationService.CreateAnomalyReportNotificationAsync(notificationRequest, report);

                if (!string.IsNullOrWhiteSpace(htmlFileUrl))
                {
                    await reportsService.UpdateReportAsync(report.Id, htmlFileUrl);

                    // return MessageProcessResponse.Abandon;
                }
            }

            _logger.LogInformation("Instance Notification Message was created.");

            return(MessageProcessResponse.Complete);
        }
示例#3
0
 public Task SendAnomalyReportMessage(InstanceAnomalyReportMessage message)
 {
     return(_azureQueueSender.SendAsync(_instanceAnomalyReportQueueClient, message));
 }
示例#4
0
        private Task SendMLReport(IEnumerable <CollectedDataDto> data, CollectedDataType reportType)
        {
            var results = (from d in data
                           group d by d.ClientId into g
                           select new { ClientId = g.Key, CollectedDatas = g.ToList() }).ToList();

            var tasks = results.Select(
                async r =>
            {
                try
                {
                    var result = await _anomalyDetector.AnalyzeData(r.CollectedDatas);
                    result.CollectedDataTypeOfReport = reportType;
                    var report = new InstanceAnomalyReport
                    {
                        Id                        = Guid.NewGuid(),
                        ClientId                  = r.ClientId,
                        Date                      = result.Date,
                        AnomalyGroups             = result.AnomalyGroups,
                        CollectedDataTypeOfReport = result.CollectedDataTypeOfReport
                    };
                    await _reportsRepository.AddReportAsync(report);
                    var reportMessage =
                        new InstanceAnomalyReportMessage
                    {
                        AnomalyReportId = report.Id,
                        InstanceId      = r.ClientId
                    };
                    Debug.WriteLine($"Generated id of report {report.Id}");
                    await _serviceBusProvider.SendAnomalyReportMessage(reportMessage);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, $"Unhandled error occurred while analyzing Anomalies of instance with id: {r?.ClientId}");
                    // TODO: Maybe send notification to user about that error that analyzing Anomalies of instance with id was unsuccessful
                }
            });

            return(Task.WhenAll(tasks));

            //var res = Parallel.ForEach(
            //    results,
            //    async obj =>
            //        {
            //            try
            //            {
            //                var result = await _anomalyDetector.AnalyzeData(obj.CollectedDatas);
            //                result.CollectedDataTypeOfReport = reportType;
            //                var report = new InstanceAnomalyReport
            //                {
            //                    Id = Guid.NewGuid(),
            //                    ClientId = obj.ClientId,
            //                    Date = result.Date,
            //                    AnomalyGroups = result.AnomalyGroups,
            //                    CollectedDataTypeOfReport =
            //                                         result.CollectedDataTypeOfReport
            //                };
            //                await _reportsRepository.AddReportAsync(report);
            //                var reportMessage =
            //                    new InstanceAnomalyReportMessage { AnomalyReportId = report.Id, InstanceId = obj.ClientId };
            //                Debug.WriteLine($"Generated id of report {report.Id}");
            //                await _serviceBusProvider.SendAnomalyReportMessage(reportMessage);
            //            }
            //            catch (Exception ex)
            //            {
            //                _logger.LogError(ex, $"Unhandled error occurred while analyzing Anomalies of instance with id: {obj?.ClientId}");
            //                // TODO: Maybe send notification to user about that error that analyzing Anomalies of instance with id was unsuccessful
            //            }
            //        });
        }