@@ -24,13 +24,15 @@ public class SpectatorJob : IJob
24
24
private readonly ISitesCatalogue _sitesCatalogue ;
25
25
private readonly TorControlManager _torControl ;
26
26
private readonly ISiteObserver _siteObserver ;
27
+ private readonly IReporter _reporter ;
27
28
28
- public SpectatorJob ( ILogger < SpectatorJob > logger , ISitesCatalogue sitesCatalogue , TorControlManager torControl , ISiteObserver siteObserver )
29
+ public SpectatorJob ( ILogger < SpectatorJob > logger , ISitesCatalogue sitesCatalogue , TorControlManager torControl , ISiteObserver siteObserver , IReporter reporter )
29
30
{
30
31
_logger = logger ;
31
32
_sitesCatalogue = sitesCatalogue ;
32
33
_torControl = torControl ;
33
34
_siteObserver = siteObserver ;
35
+ _reporter = reporter ;
34
36
}
35
37
36
38
public async Task Execute ( IJobExecutionContext context )
@@ -42,6 +44,7 @@ public async Task Execute(IJobExecutionContext context)
42
44
_logger . LogDebug ( "Got {Count} sites to observe" , sites . Count ) ;
43
45
44
46
var siteQueue = new Queue < QueuedSite > ( sites . Select ( x => new QueuedSite ( x , 0 ) ) ) ;
47
+ var report = new Report ( ) ;
45
48
while ( siteQueue . TryDequeue ( out var queuedSite ) )
46
49
{
47
50
QueueLength . Set ( siteQueue . Count ) ;
@@ -63,8 +66,17 @@ public async Task Execute(IJobExecutionContext context)
63
66
continue ;
64
67
}
65
68
}
66
- _logger . LogDebug ( "Site seems to be up" ) ;
67
- await _siteObserver . AddNewObservation ( queuedSite . Site . SiteUri , observations . IsOk ) ;
69
+
70
+ var observationModel = new Observation { SiteUri = queuedSite . Site . SiteUri , ObservedAt = DateTime . UtcNow , IsAvailable = observations . IsOk } ;
71
+ var maybeEvent = await _siteObserver . GenerateEvent ( observationModel ) ;
72
+
73
+ report . Observations . Add ( observationModel ) ;
74
+ if ( maybeEvent is { } siteEvent )
75
+ {
76
+ _logger . LogDebug ( "Should report site state change" ) ;
77
+ report . Events . Add ( siteEvent ) ;
78
+ }
79
+
68
80
SiteStatus . WithLabels ( queuedSite . Site . SiteUri ) . Set ( observations . IsOk ? 1 : 0 ) ;
69
81
_logger . LogInformation ( "Site observed" ) ;
70
82
}
@@ -74,6 +86,10 @@ public async Task Execute(IJobExecutionContext context)
74
86
}
75
87
}
76
88
_logger . LogDebug ( "The queue is finally empty, observations finished" ) ;
89
+ await _siteObserver . SaveReport ( report ) ;
90
+ _logger . LogInformation ( "Report saved!" ) ;
91
+ await _reporter . PublishReportData ( report ) ;
92
+ _logger . LogInformation ( "Report published!" ) ;
77
93
sw . Stop ( ) ;
78
94
TotalSessionDuration . Set ( sw . ElapsedMilliseconds ) ;
79
95
}
0 commit comments