示例#1
0
        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);
        }
示例#2
0
 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));
 }