Skip to content

Commit 7f05315

Browse files
committed
patched application logic #23
1 parent 9f6a58b commit 7f05315

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

src/NTorSpectator.Observer/Mastodon/Reporter.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.Extensions.Options;
33
using NTorSpectator.Observer.Services;
44
using NTorSpectator.Services;
5+
using NTorSpectator.Services.Models;
56

67
namespace NTorSpectator.Observer.Mastodon;
78

@@ -70,4 +71,17 @@ public async Task ReportCameUp(string siteUri)
7071
await _mastodonClient.Toot(new(sb.ToString()));
7172
_logger.LogInformation("Posted a new status about came up site");
7273
}
74+
75+
public async Task PublishReportData(Report report)
76+
{
77+
var sb = new StringBuilder();
78+
sb.AppendFormat("Observed {0} sites up and {1} sites down.\n",
79+
report.Observations.Count(x => x.IsAvailable),
80+
report.Observations.Count(x => !x.IsAvailable));
81+
sb.AppendFormat("Since previous report {0} sites came up, {1} gone down",
82+
report.Events.Count(x => x.Kind == AvailabilityEvent.EventType.Up),
83+
report.Events.Count(x => x.Kind == AvailabilityEvent.EventType.Down));
84+
await _mastodonClient.Toot(new(sb.ToString()));
85+
_logger.LogInformation("New report published!");
86+
}
7387
}

src/NTorSpectator.Observer/Services/SpectatorJob.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@ public class SpectatorJob : IJob
2424
private readonly ISitesCatalogue _sitesCatalogue;
2525
private readonly TorControlManager _torControl;
2626
private readonly ISiteObserver _siteObserver;
27+
private readonly IReporter _reporter;
2728

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)
2930
{
3031
_logger = logger;
3132
_sitesCatalogue = sitesCatalogue;
3233
_torControl = torControl;
3334
_siteObserver = siteObserver;
35+
_reporter = reporter;
3436
}
3537

3638
public async Task Execute(IJobExecutionContext context)
@@ -42,6 +44,7 @@ public async Task Execute(IJobExecutionContext context)
4244
_logger.LogDebug("Got {Count} sites to observe", sites.Count);
4345

4446
var siteQueue = new Queue<QueuedSite>(sites.Select(x => new QueuedSite(x, 0)));
47+
var report = new Report();
4548
while(siteQueue.TryDequeue(out var queuedSite))
4649
{
4750
QueueLength.Set(siteQueue.Count);
@@ -63,8 +66,17 @@ public async Task Execute(IJobExecutionContext context)
6366
continue;
6467
}
6568
}
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+
6880
SiteStatus.WithLabels(queuedSite.Site.SiteUri).Set(observations.IsOk ? 1 : 0);
6981
_logger.LogInformation("Site observed");
7082
}
@@ -74,6 +86,10 @@ public async Task Execute(IJobExecutionContext context)
7486
}
7587
}
7688
_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!");
7793
sw.Stop();
7894
TotalSessionDuration.Set(sw.ElapsedMilliseconds);
7995
}

0 commit comments

Comments
 (0)