Lines 100.00% 9 / 9
Functions and Methods 100.00% 1 / 1
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
DaemonMetricSource 100.00% 9 / 9 100.00% 1 / 1 1 100.00% 1 / 1
 collectMetrics 100.00% 9 / 9 100.00% 1 / 1 1
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Runtime\Metrics\Source;
6
7use Stewart\Runtime\Control\Protocol\Status\RuntimeSnapshot;
8use Stewart\Runtime\Metrics\Exposition\MetricFamily;
9use Stewart\Runtime\Metrics\Exposition\MetricLabels;
10use Stewart\Runtime\Metrics\Exposition\MetricType;
11use Stewart\Runtime\Metrics\Exposition\PrometheusNumber;
12use Stewart\Runtime\Metrics\RuntimeMetricSource;
13
14final readonly class DaemonMetricSource implements RuntimeMetricSource
15{
16    /** @return list<MetricFamily> */
17    public function collectMetrics(RuntimeSnapshot $snapshot): array
18    {
19        $daemon = $snapshot->daemon;
20        $none = MetricLabels::none();
21        $build = MetricLabels::fromLabel('version', $daemon->version)->withLabel('ha_version', $daemon->haVersion ?? '');
22
23        return [
24            MetricFamily::createWithSample('stewart_build_info', 'Stewart and Home Assistant versions; always 1.', MetricType::Gauge, $build, 1),
25            MetricFamily::createWithSample('stewart_start_time_seconds', 'Unix time the daemon started.', MetricType::Gauge, $none, PrometheusNumber::convertToEpochSeconds($daemon->startedAt)),
26            MetricFamily::createWithSample('stewart_broker_memory_bytes', 'Memory the broker process holds.', MetricType::Gauge, $none, $daemon->memoryBytes),
27            MetricFamily::createWithSample('stewart_ha_entities', 'Entities in the Home Assistant state cache.', MetricType::Gauge, $none, $daemon->entities),
28        ];
29    }
30}