예제 #1
0
        public async Task DoWorkAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("Starting alert scan");
            try
            {
                var scanTime     = DateTime.UtcNow;
                var scansByMiner =
                    from definition in await _alertDefinitionService.GetEnabledAsync(cancellationToken)
                    group definition by definition.MinerId into definitions
                    let miner = _minerService.GetByIdAsync(definitions.Key, cancellationToken).Result
                                select new
                {
                    Miner = miner,
                    Scans = definitions.Select(d => _scanFactory.CreateScan(d, miner, scanTime)).ToList()
                };

                foreach (var scans in scansByMiner)
                {
                    var scanPeriod = Period.Merge(scans.Scans.Select(s => s.ScanPeriod));
                    var snapshots  = (await _snapshotService.GetByMinerAsync(scans.Miner.Id, scanPeriod, cancellationToken)).ToList();

                    await ScanMinerAsync(scanTime, scans.Miner, scans.Scans, snapshots, cancellationToken);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error performing alert scan");
            }
            _logger.LogInformation("Finished alert scan");
        }