diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5dfbd0d..cc177ce 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -37,6 +37,10 @@ jobs: key: ${{ matrix.os }}-composer-${{ matrix.php-versions }}-${{ hashFiles('**/composer.lock') }} restore-keys: ${{ matrix.os }}-composer-${{ matrix.php-versions }}- + - name: Run composer + run: | + composer update + - name: Run codestyle check env: PHP_CS_FIXER_IGNORE_ENV: 1 diff --git a/README.md b/README.md index 03de7e7..98248b3 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,77 @@ Offers a modern, clean PHP 8.1 API, with support for **default label values**, b composer require danog/better-prometheus ``` +## Usage + +```php + values, not just keys. +$counter = $registry->getOrRegisterCounter( + 'test', + 'some_counter', + 'it increases', + // Note: these are default label key+values, they will be sent verbatim, no changes + ['someLabel' => 'defaultValue'] +); + +// Specify some additional labels post-construction like this (both keys and values)... +$counter->incBy(3, ['type' => 'blue']); + +// ...or add some more default labels to the counter, creating a new counter: +$newCounter = $counter->addLabels(['someOtherLabel' => 'someOtherDefaultValue']); +assert($newCounter !== $counter); // true +$counter->incBy(3, ['type' => 'blue']); + + + +// Gauges can also be used +$gauge = $registry->getOrRegisterGauge( + 'test', + 'some_gauge', + 'it sets', + ['someLabel' => 'defaultValue'] +); +$gauge->set(2.5, ['type' => 'blue']); + + + +// As well as histograms +$histogram = $registry->getOrRegisterHistogram( + 'test', + 'some_histogram', + 'it observes', + ['someLabel' => 'defaultValue'], + // [0.1, 1, 2, 3.5, 4, 5, 6, 7, 8, 9] +); +$histogram->observe(3.5, ['type' => 'blue']); + + +// And suummaries +$summary = $registry->getOrRegisterSummary( + 'test', + 'some_summary', + 'it observes a sliding window', + ['someLabel' => 'defaultValue'], + // 84600, + // [0.01, 0.05, 0.5, 0.95, 0.99] +); + +$summary->observe(5, ['type' => 'blue']); +``` + ## API documentation See [here »](https://github.com/danog/better-prometheus/blob/master/docs/docs/index.md) for the full API documentation. \ No newline at end of file diff --git a/lib/BetterCollector.php b/lib/BetterCollector.php index 3dceba0..58d0091 100644 --- a/lib/BetterCollector.php +++ b/lib/BetterCollector.php @@ -45,9 +45,9 @@ abstract class BetterCollector } } - /** + /** * Create a new instance of this collector, with these additional labels. - * + * * @param array $labels */ abstract public function addLabels(array $labels): static; diff --git a/lib/BetterCollectorRegistry.php b/lib/BetterCollectorRegistry.php index 6193487..ae1a88d 100644 --- a/lib/BetterCollectorRegistry.php +++ b/lib/BetterCollectorRegistry.php @@ -10,6 +10,8 @@ use Prometheus\MetricFamilySamples; use Prometheus\Storage\Adapter; /** + * A better collector registry. + * * @api */ final class BetterCollectorRegistry @@ -47,7 +49,6 @@ final class BetterCollectorRegistry public readonly Adapter $storageAdapter, bool $registerDefaultMetrics = true ) { - $this->storageAdapter = $storageAdapter; if ($registerDefaultMetrics) { $this->defaultGauge = $this->getOrRegisterGauge( "", @@ -69,7 +70,7 @@ final class BetterCollectorRegistry /** * @psalm-suppress TooManyArguments - * + * * @return list */ public function getMetricFamilySamples(bool $sortMetrics = true): array