add validity time parameter

master
Dirk Heilig 2024-09-09 19:03:43 +02:00
parent f1fd06b16f
commit c011f62af5
2 changed files with 20 additions and 2 deletions

View File

@ -24,6 +24,7 @@ The payload needs to be an object containing only the following keys:
- `name` (string): the name of the metric - `name` (string): the name of the metric
- `value` (number): the value of the metric - `value` (number): the value of the metric
- `labels` (object, optional): an object containing the labels for the metric (key-value pairs of strings) - `labels` (object, optional): an object containing the labels for the metric (key-value pairs of strings)
- `valid_seconds` (number, optional, defaults to 60): the number of seconds the metric is valid. After this time, the metric will be removed from the export. (which will results in a gap in prometheus)
According to prometheus conventions, the metric name and the label names need to be a lower or upper case letter or a underscore followed by all case leters, numbers or underscores. According to prometheus conventions, the metric name and the label names need to be a lower or upper case letter or a underscore followed by all case leters, numbers or underscores.

View File

@ -173,8 +173,25 @@ function precheck(Message $message): bool
return false; return false;
} }
} }
if (!isset($payload["valid_seconds"])) {
$payload["valid_seconds"] = 60;
}
if (!is_numeric($payload["valid_seconds"])) {
error("valid_seconds must be a number");
return false;
}
if ($payload["valid_seconds"] < 1) {
error("valid_seconds must be at least 1");
return false;
}
if ($payload["valid_seconds"] > 60 * 60 * 48) {
error("valid_seconds must be at most 48 hours");
return false;
}
foreach (array_keys($payload) as $key) { foreach (array_keys($payload) as $key) {
if (!in_array($key, ["name", "value", "labels"])) { if (!in_array($key, ["name", "value", "labels", "valid_seconds"])) {
error("Unknown key: $key"); error("Unknown key: $key");
return false; return false;
} }
@ -307,7 +324,7 @@ function filter(): void
{ {
global $data, $stats; global $data, $stats;
$data = array_filter($data, function ($entry) { $data = array_filter($data, function ($entry) {
return $entry["timestamp"] > time() - 60; return $entry["timestamp"] > time() - $entry["valid_seconds"];
}); });
// remove stats older than 24h // remove stats older than 24h
foreach ($stats as $key => $values) { foreach ($stats as $key => $values) {