public Task AddReportAsync(InstanceAnomalyReport report)
        {
            if (report != null)
            {
                return(_repository.AddReportAsync(report));
            }

            return(Task.CompletedTask);
        }
Beispiel #2
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
            //            }
            //        });
        }