poco/Prometheus/include/Poco/Prometheus/MetricsServer.h
2022-05-17 08:18:54 +02:00

81 lines
2.3 KiB
C++

//
// MetricsServer.h
//
// Library: Prometheus
// Package: HTTP
// Module: MetricsServer
//
// Definition of the MetricsServer class.
//
// Copyright (c) 2022, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Prometheus_MetricsServer_INCLUDED
#define Prometheus_MetricsServer_INCLUDED
#include "Poco/Prometheus/Prometheus.h"
#include "Poco/Net/HTTPServer.h"
#include "Poco/Net/HTTPServerParams.h"
#include "Poco/Net/ServerSocket.h"
namespace Poco {
namespace Prometheus {
class Registry;
class Prometheus_API MetricsServer
/// A basic HTTP server for handling Prometheus metrics scraping
/// requests, based on Poco::Net::HTTPServer.
{
public:
static const Poco::UInt16 DEFAULT_PORT; /// 9100
static const std::string DEFAULT_PATH; /// "/metrics"
MetricsServer(Poco::UInt16 port = DEFAULT_PORT, const std::string& path = DEFAULT_PATH);
/// Creates a HTTPServer for serving metrics using the default Registry, listening
/// on the given port number and the given path.
MetricsServer(const Registry& registry, Poco::UInt16 port = DEFAULT_PORT, const std::string& path = DEFAULT_PATH);
/// Creates a HTTPServer for serving metrics using the given Registry, listening
/// on the given port number and the given path.
MetricsServer(const Registry& registry, Poco::Net::ServerSocket& socket, Poco::Net::HTTPServerParams::Ptr pServerParams = defaultParams(), const std::string& path = DEFAULT_PATH);
/// Creates a HTTPServer for serving metrics using the given Registry, listening
/// on the server socket (which can be a properly configured Poco::Net::SecureServerSocket
/// to enable HTTPS), and the given path.
~MetricsServer() = default;
/// Destroys the HTTPServer.
void start();
/// Starts the underlying Poco::Net::HTTPServer.
void stop();
/// Stops the underlying Poco::Net::HTTPServer.
protected:
static Poco::Net::HTTPServerParams::Ptr defaultParams();
private:
Poco::Net::HTTPServer _httpServer;
MetricsServer(const MetricsServer&) = delete;
MetricsServer(MetricsServer&&) = delete;
MetricsServer& operator = (const MetricsServer&) = delete;
MetricsServer& operator = (MetricsServer&&) = delete;
};
} } // namespace Poco::Prometheus
#endif // Prometheus_MetricsServer_INCLUDED