|
1 | 1 | using Microsoft.Extensions.Logging;
|
| 2 | +using NTorSpectator.Services.Models; |
2 | 3 | using NTorSpectator.Services.Persistent;
|
3 | 4 |
|
4 | 5 | namespace NTorSpectator.Services.Logic;
|
5 | 6 |
|
6 |
| -public class SiteObserver : ISiteObserver |
| 7 | +internal class SiteObserver : ISiteObserver |
7 | 8 | {
|
8 |
| - private readonly IReporter _reporter; |
9 |
| - private readonly IObservesRepository _repo; |
| 9 | + private readonly IObservesRepository _observationsRepository; |
10 | 10 | private readonly ILogger<SiteObserver> _logger;
|
| 11 | + private readonly IReportsRepository _reportsRepository; |
11 | 12 |
|
12 |
| - public SiteObserver(IReporter reporter, IObservesRepository repo, ILogger<SiteObserver> logger) |
| 13 | + public SiteObserver(IReporter reporter, IObservesRepository observationsRepository, ILogger<SiteObserver> logger, IReportsRepository reportsRepository) |
13 | 14 | {
|
14 |
| - _reporter = reporter; |
15 |
| - _repo = repo; |
| 15 | + _observationsRepository = observationsRepository; |
16 | 16 | _logger = logger;
|
| 17 | + _reportsRepository = reportsRepository; |
17 | 18 | }
|
18 | 19 |
|
19 |
| - public async Task AddNewObservation(string siteUri, bool isAvailable) |
| 20 | + public async Task<AvailabilityEvent?> GenerateEvent(Observation observation) |
20 | 21 | {
|
21 |
| - using var _ = _logger.BeginScope(new Dictionary<string, object> { { "SiteUri", siteUri }, { "IsAvailable", isAvailable } }); |
| 22 | + using var _ = _logger.BeginScope(new Dictionary<string, object> { { "SiteUri", observation.SiteUri }, { "IsAvailable", observation.IsAvailable } }); |
22 | 23 | _logger.LogDebug("Got new observation to save");
|
23 |
| - var previousObservation = await _repo.GetLastObservationForSite(siteUri); |
24 |
| - await _repo.AddNewObservation(siteUri, isAvailable, DateTime.UtcNow); |
25 |
| - _logger.LogInformation("Saved new observation"); |
| 24 | + var previousObservation = await _observationsRepository.GetLastObservationForSite(observation.SiteUri); |
26 | 25 | if (previousObservation is null)
|
27 | 26 | {
|
28 | 27 | _logger.LogDebug("This is first observation for site. Won't compare with previous");
|
29 |
| - return; |
| 28 | + return null; |
30 | 29 | }
|
31 | 30 |
|
32 |
| - if (previousObservation.IsAvailable == isAvailable) |
| 31 | + if (previousObservation.IsAvailable == observation.IsAvailable) |
33 | 32 | {
|
34 |
| - _logger.LogDebug("Site availability has not changed, nothing to report"); |
35 |
| - return; |
| 33 | + _logger.LogDebug("Site availability has not changed, won't create event"); |
| 34 | + return null; |
36 | 35 | }
|
37 | 36 |
|
38 |
| - if (isAvailable) |
| 37 | + _logger.LogDebug("Site availability changed! Will create new event"); |
| 38 | + return new() |
39 | 39 | {
|
40 |
| - await _reporter.ReportCameUp(siteUri); |
41 |
| - _logger.LogInformation("Reported site came up"); |
42 |
| - } |
43 |
| - else |
44 |
| - { |
45 |
| - await _reporter.ReportWentDown(siteUri, previousObservation.ObservedAt); |
46 |
| - _logger.LogInformation("Reported site went down"); |
47 |
| - } |
48 |
| - |
| 40 | + SiteUri = observation.SiteUri, |
| 41 | + OccuredAt = observation.ObservedAt, |
| 42 | + Kind = observation.IsAvailable ? AvailabilityEvent.EventType.Up : AvailabilityEvent.EventType.Down |
| 43 | + }; |
49 | 44 | }
|
| 45 | + |
| 46 | + public Task SaveReport(Report report) => _reportsRepository.SaveReport(report); |
50 | 47 | }
|
0 commit comments