Beispiel #1
0
        protected async Task OnIsDue(UptimeConfiguration configuration, CancellationToken cancellationToken)
        {
            string uptimeRaw = await File.ReadAllTextAsync("/proc/uptime", Encoding.UTF8, cancellationToken);
            string uptimeSecondsString = uptimeRaw.Split(' ')[0];
            decimal uptimeSeconds = decimal.Parse(uptimeSecondsString, CultureInfo.InvariantCulture);
            var uptimeTimeSpan = TimeSpan.FromSeconds((double)uptimeSeconds);
            var uptime = $"{Math.Floor(uptimeTimeSpan.TotalDays).ToString("n0", CultureInfo.InvariantCulture)} days, {uptimeTimeSpan.Hours.ToString("n0", CultureInfo.InvariantCulture).PadLeft(2, '0')}:{uptimeTimeSpan.Minutes.ToString("n0", CultureInfo.InvariantCulture).PadLeft(2, '0')}:{uptimeTimeSpan.Seconds.ToString("n0", CultureInfo.InvariantCulture).PadLeft(2, '0')}";
            await Mediator.Publish(new OutboundMeasurement()
            {
                Name = "uptime",
                Item = new UptimeMeasurement()
                {
                    Timestamp = DateTime.UtcNow,
                    Hostname = System.Net.Dns.GetHostName(),
                    Since = DateTime.UtcNow - uptimeTimeSpan,
                    Total = uptimeTimeSpan,
                    TotalHumanReadable = uptime,
                },
            }, cancellationToken);
            await Mediator.Publish(new SensorMeasurement()
            {
                Sensor = "uptime",
                Value = uptime,
            }, cancellationToken);

            MeasurementTimingService.ResetDue(configuration);
        }
Beispiel #2
0
 public Uptime(IMediator mediator, UptimeConfiguration configuration, IMeasurementTimingService measurementTimingService)
 {
     Mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));
     Configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
     MeasurementTimingService = measurementTimingService ?? throw new ArgumentNullException(nameof(measurementTimingService));
 }