Add prometheus
This commit is contained in:
parent
6a240dae33
commit
b5126ab4dc
@ -65,12 +65,13 @@ include_directories(${PROJECT_SOURCE_DIR}/nv_ds_logger_manager.hpp)
|
|||||||
include_directories(${PROJECT_SOURCE_DIR}/sink_manager.hpp)
|
include_directories(${PROJECT_SOURCE_DIR}/sink_manager.hpp)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/message_handling.hpp)
|
include_directories(${PROJECT_SOURCE_DIR}/message_handling.hpp)
|
||||||
include_directories(${PROJECT_SOURCE_DIR}/rtsp_streaming_manager.hpp)
|
include_directories(${PROJECT_SOURCE_DIR}/rtsp_streaming_manager.hpp)
|
||||||
|
include_directories(${PROJECT_SOURCE_DIR}/metrics_manager.hpp)
|
||||||
|
|
||||||
set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp src/streammux_manager.cpp
|
set(SOURCES src/main.cpp src/camera_manager.cpp src/pipeline_manager.cpp src/streammux_manager.cpp
|
||||||
src/source_bin.cpp src/gstds_example_manager.cpp src/tiler_manager.cpp
|
src/source_bin.cpp src/gstds_example_manager.cpp src/tiler_manager.cpp
|
||||||
src/nv_video_convert_manager.cpp src/nv_osd_manager.cpp src/queue_manager.cpp
|
src/nv_video_convert_manager.cpp src/nv_osd_manager.cpp src/queue_manager.cpp
|
||||||
src/nv_ds_logger_manager.cpp src/sink_manager.cpp src/message_handling.cpp
|
src/nv_ds_logger_manager.cpp src/sink_manager.cpp src/message_handling.cpp
|
||||||
src/rtsp_streaming_manager.cpp)
|
src/rtsp_streaming_manager.cpp src/metrics_manager.cpp)
|
||||||
# Create the executable
|
# Create the executable
|
||||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||||
|
|
||||||
|
|||||||
53
src/main.cpp
53
src/main.cpp
@ -4,14 +4,9 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
// prometheus-cpp headers
|
|
||||||
#include <prometheus/counter.h>
|
|
||||||
#include <prometheus/exposer.h>
|
|
||||||
#include <prometheus/gauge.h>
|
|
||||||
#include <prometheus/histogram.h>
|
|
||||||
#include <prometheus/registry.h>
|
|
||||||
|
|
||||||
#include "camera_manager.hpp"
|
#include "camera_manager.hpp"
|
||||||
|
#include "metrics_manager.hpp"
|
||||||
#include "pipeline_manager.hpp"
|
#include "pipeline_manager.hpp"
|
||||||
|
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
@ -22,13 +17,6 @@ gboolean *check_finished_streams = NULL;
|
|||||||
gboolean *g_source_enabled = NULL;
|
gboolean *g_source_enabled = NULL;
|
||||||
guint num_sources; // number of input cameras
|
guint num_sources; // number of input cameras
|
||||||
GstElement **g_source_bin_list = NULL;
|
GstElement **g_source_bin_list = NULL;
|
||||||
std::atomic<bool> running{true};
|
|
||||||
prometheus::Gauge *my_gauge = nullptr;
|
|
||||||
std::shared_ptr<prometheus::Registry> registry;
|
|
||||||
prometheus::Family<prometheus::Gauge> *gauge_family = nullptr;
|
|
||||||
std::unique_ptr<prometheus::Exposer> exposer = nullptr;
|
|
||||||
prometheus::Counter *counter = nullptr;
|
|
||||||
prometheus::Family<prometheus::Counter> *counter_family = nullptr;
|
|
||||||
|
|
||||||
void allocate_memory_variables_cameras(const int MAX_NUM_SOURCES) {
|
void allocate_memory_variables_cameras(const int MAX_NUM_SOURCES) {
|
||||||
g_source_id_list = (gint *)g_malloc0(sizeof(gint) * MAX_NUM_SOURCES);
|
g_source_id_list = (gint *)g_malloc0(sizeof(gint) * MAX_NUM_SOURCES);
|
||||||
@ -65,43 +53,24 @@ int load_rtsp_address(CameraManager *camera_manager, fs::path file_path) {
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
void metrics_loop(prometheus::Gauge *my_gauge) {
|
|
||||||
while (running) {
|
|
||||||
std::cout << "metrics_loop" << std::endl;
|
|
||||||
counter->Increment();
|
|
||||||
// simulate updating a metric
|
|
||||||
my_gauge->Set(static_cast<double>(rand() % 100));
|
|
||||||
std::this_thread::sleep_for(std::chrono::seconds(2));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
if (argc < 1) {
|
if (argc < 1) {
|
||||||
std::cerr << "Usage: " << argv[0] << " <RTSP_URL>" << std::endl;
|
std::cerr << "Usage: " << argv[0] << " <RTSP_URL>" << std::endl;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string address_prometheus = "0.0.0.0:8080";
|
// MetricsManager* metric_manager = new MetricsManager();
|
||||||
exposer = std::make_unique<prometheus::Exposer>(address_prometheus);
|
std::shared_ptr<MetricsManager> metric_manager =
|
||||||
|
std::make_shared<MetricsManager>("0.0.0.0:8080");
|
||||||
|
metric_manager->setup_prometheus(); // Calls the metrics_loop method
|
||||||
|
|
||||||
// Set up Prometheus as before...
|
std::thread metrics_thread(&MetricsManager::metrics_loop, metric_manager);
|
||||||
registry = std::make_shared<prometheus::Registry>();
|
|
||||||
gauge_family = &prometheus::BuildGauge()
|
|
||||||
.Name("frame_delay")
|
|
||||||
.Help("Delay between frames")
|
|
||||||
.Register(*registry);
|
|
||||||
|
|
||||||
my_gauge = &gauge_family->Add({{"source", "camera1"}});
|
// std::thread metrics_thread(metric_manager->metrics_loop); //,
|
||||||
|
// metric_manager->my_gauge
|
||||||
|
|
||||||
counter_family = &prometheus::BuildCounter()
|
// std::thread metrics_thread(&MetricsManager::metrics_loop,
|
||||||
.Name("frames_received_total")
|
// metric_manager.get());
|
||||||
.Help("Total frames received")
|
|
||||||
.Register(*registry);
|
|
||||||
|
|
||||||
counter = &counter_family->Add({{"label", "value"}});
|
|
||||||
exposer->RegisterCollectable(registry);
|
|
||||||
|
|
||||||
std::thread metrics_thread(metrics_loop, my_gauge);
|
|
||||||
|
|
||||||
CameraManager *camera_manager = new CameraManager();
|
CameraManager *camera_manager = new CameraManager();
|
||||||
// Path handling works across platforms
|
// Path handling works across platforms
|
||||||
@ -125,7 +94,7 @@ int main(int argc, char *argv[]) {
|
|||||||
pipeline_manager->create_pipeline_elements(num_sources, url_camera);
|
pipeline_manager->create_pipeline_elements(num_sources, url_camera);
|
||||||
|
|
||||||
// On shutdown:
|
// On shutdown:
|
||||||
running = false;
|
metric_manager->running = false;
|
||||||
metrics_thread.join(); // optional: wait on thread before exiting
|
metrics_thread.join(); // optional: wait on thread before exiting
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
42
src/metrics_manager.cpp
Normal file
42
src/metrics_manager.cpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
#include "metrics_manager.hpp"
|
||||||
|
|
||||||
|
MetricsManager::MetricsManager() {}
|
||||||
|
|
||||||
|
MetricsManager::MetricsManager(const std::string& address)
|
||||||
|
: address_prometheus(address) // <- initialize const member here
|
||||||
|
{}
|
||||||
|
void MetricsManager::setup_prometheus() {
|
||||||
|
// Start the HTTP server on 0.0.0.0:8080
|
||||||
|
exposer = std::make_unique<prometheus::Exposer>(address_prometheus);
|
||||||
|
|
||||||
|
// Set up Prometheus as before...
|
||||||
|
registry = std::make_shared<prometheus::Registry>();
|
||||||
|
gauge_family = &prometheus::BuildGauge()
|
||||||
|
.Name("frame_delay")
|
||||||
|
.Help("Delay between frames")
|
||||||
|
.Register(*registry);
|
||||||
|
|
||||||
|
my_gauge = &gauge_family->Add({{"source", "camera1"}});
|
||||||
|
|
||||||
|
counter_family = &prometheus::BuildCounter()
|
||||||
|
.Name("frames_received_total")
|
||||||
|
.Help("Total frames received")
|
||||||
|
.Register(*registry);
|
||||||
|
|
||||||
|
counter = &counter_family->Add({{"label", "value"}});
|
||||||
|
exposer->RegisterCollectable(registry);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MetricsManager::metrics_loop() { // prometheus::Gauge *my_gauge
|
||||||
|
while (running) {
|
||||||
|
std::cout << "metrics_loop" << std::endl;
|
||||||
|
counter->Increment();
|
||||||
|
// simulate updating a metric
|
||||||
|
my_gauge->Set(static_cast<double>(rand() % 100));
|
||||||
|
std::this_thread::sleep_for(std::chrono::seconds(2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MetricsManager::~MetricsManager() {
|
||||||
|
std::cout << "MetricsManager destroyed" << std::endl;
|
||||||
|
}
|
||||||
29
src/metrics_manager.hpp
Normal file
29
src/metrics_manager.hpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// prometheus-cpp headers
|
||||||
|
#include <prometheus/counter.h>
|
||||||
|
#include <prometheus/exposer.h>
|
||||||
|
#include <prometheus/gauge.h>
|
||||||
|
#include <prometheus/histogram.h>
|
||||||
|
#include <prometheus/registry.h>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
class MetricsManager {
|
||||||
|
private:
|
||||||
|
const std::string address_prometheus;
|
||||||
|
|
||||||
|
public:
|
||||||
|
std::atomic<bool> running{true};
|
||||||
|
prometheus::Gauge *my_gauge = nullptr;
|
||||||
|
std::shared_ptr<prometheus::Registry> registry;
|
||||||
|
prometheus::Family<prometheus::Gauge> *gauge_family = nullptr;
|
||||||
|
std::unique_ptr<prometheus::Exposer> exposer = nullptr;
|
||||||
|
prometheus::Counter *counter = nullptr;
|
||||||
|
prometheus::Family<prometheus::Counter> *counter_family = nullptr;
|
||||||
|
|
||||||
|
void metrics_loop();
|
||||||
|
void setup_prometheus();
|
||||||
|
MetricsManager();
|
||||||
|
MetricsManager(const std::string &address);
|
||||||
|
~MetricsManager(); // keep only if you define it
|
||||||
|
};
|
||||||
Loading…
x
Reference in New Issue
Block a user