diff --git a/main.cpp b/main.cpp index 088d48d..5b999f3 100644 --- a/main.cpp +++ b/main.cpp @@ -8,11 +8,11 @@ #include "main.hpp" #include "AutomForArduino.cpp" +#include +#include #include #include #include -#include -#include #include #include @@ -50,6 +50,29 @@ unsigned short sensor_max, sensor_high, sensor_low, sensor_min; float TankInitalValue = 5; +using namespace prometheus; +std::shared_ptr 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(); + 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)