-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHeartbeatService.cs
More file actions
39 lines (32 loc) · 981 Bytes
/
HeartbeatService.cs
File metadata and controls
39 lines (32 loc) · 981 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Threading;
using Microsoft.Extensions.Hosting;
namespace FileOrganizer;
internal sealed class HeartbeatService : IDisposable
{
private readonly IHostApplicationLifetime _lifetime;
private readonly Timer _timer;
private long _lastBeatTicks;
public HeartbeatService(IHostApplicationLifetime lifetime)
{
_lifetime = lifetime;
Beat();
_timer = new Timer(CheckIdleWindow, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(15));
}
public void Beat()
{
Interlocked.Exchange(ref _lastBeatTicks, DateTimeOffset.UtcNow.UtcTicks);
}
public void Dispose()
{
_timer.Dispose();
}
private void CheckIdleWindow(object? _)
{
var lastBeat = new DateTimeOffset(Interlocked.Read(ref _lastBeatTicks), TimeSpan.Zero);
if (DateTimeOffset.UtcNow - lastBeat > TimeSpan.FromHours(12))
{
_lifetime.StopApplication();
}
}
}