protected async Task OnIsDue(HddUsageConfiguration configuration, CancellationToken cancellationToken) { var items = await ReadFromDf(cancellationToken); foreach (var device in configuration.Items.Where(t => t.Enable)) { var path = device.Path; var alias = device.Alias; var item = items.FirstOrDefault(t => t.device == path); if (item == default) { Console.WriteLine($"Warn: got no sensor readings for {path}"); continue; } (var _, var bytesTotal, var bytesUsed, var bytesAvailable) = item; await Mediator.Publish(new OutboundMeasurement() { Name = "hdd-usage", Item = new HddUsageMeasurement() { Timestamp = DateTime.UtcNow, Hostname = System.Net.Dns.GetHostName(), Hdd = path, Alias = alias, Total = bytesTotal, Available = bytesAvailable, Used = bytesUsed, TotalHumanReadable = GetBytesHumanReadable(bytesTotal), AvailableHumanReadable = GetBytesHumanReadable(bytesAvailable), UsedHumanReadable = GetBytesHumanReadable(bytesUsed), }, }, cancellationToken); await Mediator.Publish(new SensorMeasurement() { Sensor = $"hdd/{alias}/size/bytes", Value = $"{bytesTotal}", }, cancellationToken); await Mediator.Publish(new SensorMeasurement() { Sensor = $"hdd/{alias}/size", Value = GetBytesHumanReadable(bytesTotal), }, cancellationToken); await Mediator.Publish(new SensorMeasurement() { Sensor = $"hdd/{alias}/used/bytes", Value = $"{bytesUsed}", }, cancellationToken); await Mediator.Publish(new SensorMeasurement() { Sensor = $"hdd/{alias}/used", Value = GetBytesHumanReadable(bytesUsed), }, cancellationToken); await Mediator.Publish(new SensorMeasurement() { Sensor = $"hdd/{alias}/available/bytes", Value = $"{bytesAvailable}", }, cancellationToken); await Mediator.Publish(new SensorMeasurement() { Sensor = $"hdd/{alias}/available", Value = GetBytesHumanReadable(bytesAvailable), }, cancellationToken); } MeasurementTimingService.ResetDue(configuration); }
public HddUsage(IMediator mediator, HddUsageConfiguration configuration, IMeasurementTimingService measurementTimingService) { Mediator = mediator ?? throw new ArgumentNullException(nameof(mediator)); Configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); MeasurementTimingService = measurementTimingService ?? throw new ArgumentNullException(nameof(measurementTimingService)); }