Prometheus

This commit is contained in:
2025-12-10 11:31:20 +01:00
parent e5007dd657
commit a0f5055edf

View File

@@ -8,11 +8,11 @@
#include "main.hpp"
#include "AutomForArduino.cpp"
#include <prometheus/exposer.h>
#include <prometheus/registry.h>
#include <prometheus/counter.h>
#include <prometheus/gauge.h>
#include <prometheus/histogram.h>
#include <prometheus/registry.h>
#include <prometheus/exposer.h>
#include <curl/curl.h>
#include <string>
@@ -50,6 +50,29 @@ unsigned short sensor_max, sensor_high, sensor_low, sensor_min;
float TankInitalValue = 5;
using namespace prometheus;
std::shared_ptr<Registry> registry;
Gauge* debit_entree = nullptr;
Gauge* debit_sortie = nullptr;
Gauge* debit_p1 = nullptr;
Gauge* debit_p2 = nullptr;
Gauge* debit_p3 = nullptr;
Gauge* debit_p4 = nullptr;
Gauge* tank_level = nullptr;
Counter* volume_p1 = nullptr;
Counter* volume_p2 = nullptr;
Counter* volume_p3 = nullptr;
Counter* volume_p4 = nullptr;
Histogram::BucketBoundaries buckets = {
1, 2, 3, 4, 5, 6, 7, 8, 9
};
Histogram *tank_level_hist = nullptr;
// Réception des messages MQTT
// ************************************************************
class callback : public virtual mqtt::callback {
@@ -398,13 +421,66 @@ double SimulConsoBrown(double valeur_precedente)
*/
void InitPrometheus()
{
static Exposer exposer{"0.0.0.0:8099"};
// Le registre central
registry = std::make_shared<Registry>();
exposer.RegisterCollectable(registry);
auto& level_family = BuildGauge()
.Name("geii_level")
.Help("Volume en m3")
.Register(*registry);
tank_level = &level_family.Add({});
auto& debit_family = BuildGauge()
.Name("geii_debit")
.Help("Débit en l/s")
.Register(*registry);
debit_entree = &debit_family.Add({{"numero", "entree"}});
debit_sortie = &debit_family.Add({{"numero", "sortie"}});
debit_p1 = &debit_family.Add({{"numero", "1"}});
debit_p2 = &debit_family.Add({{"numero", "2"}});
debit_p3 = &debit_family.Add({{"numero", "3"}});
debit_p4 = &debit_family.Add({{"numero", "4"}});
auto& volume_family = BuildCounter()
.Name("geii_volume")
.Help("Volume en l")
.Register(*registry);
volume_p1 = &volume_family.Add({{"numero", "1"}});
volume_p2 = &volume_family.Add({{"numero", "2"}});
volume_p3 = &volume_family.Add({{"numero", "3"}});
volume_p4 = &volume_family.Add({{"numero", "4"}});
auto& hist_family = BuildHistogram()
.Name("geii_hist")
.Help("histogramme du reservoir en m3")
.Register(*registry);
tank_level_hist = &hist_family.Add({}, buckets);
}
void ProcessPrometheus()
{
debit_entree->Set(_digital[IN_FLOW_OUT].dvalue);
debit_sortie->Set(_digital[IN_FLOW_IN].dvalue);
debit_p1->Set(_digital[IN_FLOW_1].dvalue);
debit_p2->Set(_digital[IN_FLOW_2].dvalue);
debit_p3->Set(_digital[IN_FLOW_3].dvalue);
debit_p4->Set(_digital[IN_FLOW_4].dvalue);
volume_p1->Increment(_digital[IN_FLOW_1].dvalue * dt);
volume_p2->Increment(_digital[IN_FLOW_2].dvalue * dt);
volume_p3->Increment(_digital[IN_FLOW_3].dvalue * dt);
volume_p4->Increment(_digital[IN_FLOW_4].dvalue * dt);
tank_level->Set(_digital[IN_TANK_LEVEL].dvalue);
tank_level_hist->Observe(_digital[IN_TANK_LEVEL].dvalue);
}
void ProcessMQTT(mqtt::async_client* client)