Skip to content
Snippets Groups Projects
Commit 0cf94240 authored by Sergey Yakubov's avatar Sergey Yakubov
Browse files

fix discovery, add metrics to receiver

parent 5b38e181
No related branches found
No related tags found
No related merge requests found
Showing
with 5988 additions and 10 deletions
wget https://raw.githubusercontent.com/cesanta/mongoose/7.4/mongoose.c
wget https://raw.githubusercontent.com/cesanta/mongoose/7.4/mongoose.h
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
package server
import (
"asapo_discovery/request_handler"
"asapo_discovery/common"
"asapo_discovery/request_handler"
"github.com/prometheus/client_golang/prometheus"
)
var requestHandler request_handler.Agent
......@@ -10,6 +11,15 @@ var requestHandler request_handler.Agent
var settings common.Settings
var (
nReqests = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "http_requests",
Help: "Number of discovery requests",
},
)
)
func SetHandler(rh request_handler.Agent) error {
requestHandler = rh
err := requestHandler.Init(settings)
......
......@@ -13,15 +13,6 @@ import (
"strconv"
)
var (
nReqests = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "http_requests",
Help: "Number of discovery requests",
},
)
)
func init() {
prometheus.MustRegister(nReqests)
}
......
......@@ -28,6 +28,8 @@ set(RECEIVER_CORE_FILES
src/file_processors/write_file_processor.cpp
src/file_processors/file_processor.cpp
src/file_processors/receive_file_processor.cpp
src/metrics/receiver_prometheus_metrics.cpp
src/metrics/receiver_mongoose_server.cpp
)
set(RDS_FILES
......
......@@ -12,6 +12,9 @@
#include "receiver_data_server/net_server/rds_tcp_server.h"
#include "receiver_data_server/net_server/rds_fabric_server.h"
#include "metrics/receiver_prometheus_metrics.h"
#include "metrics/receiver_mongoose_server.h"
asapo::Error ReadConfigFile(int argc, char* argv[]) {
if (argc != 2) {
std::cerr << "Usage: " << argv[0] << " <config file>" << std::endl;
......@@ -88,10 +91,18 @@ int StartReceiver(const asapo::ReceiverConfig* config, asapo::SharedCache cache,
return 0;
}
asapo::Error StartMetricsServer() {
auto srv = std::unique_ptr<asapo::ReceiverMetricsServer>(new asapo::ReceiverMongooseServer());
auto* provider = new asapo::ReceiverPrometheusMetrics();
srv->ListenAndServe("7009", std::unique_ptr<asapo::ReceiverMetricsProvider>(provider));
return nullptr;
}
int main (int argc, char* argv[]) {
asapo::ExitAfterPrintVersionIfNeeded("ASAPO Receiver", argc, argv);
// StartMetricsServer();
auto err = ReadConfigFile(argc, argv);
const auto& logger = asapo::GetDefaultReceiverLogger();
if (err) {
......
#ifndef ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_PROVIDER_H_
#define ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_PROVIDER_H_
#include <string>
namespace asapo {
class ReceiverMetricsProvider {
public:
virtual std::string Metrics() const = 0;
virtual ~ReceiverMetricsProvider() = default;
};
}
#endif //ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_PROVIDER_H_
#ifndef ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_SERVER_H_
#define ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_SERVER_H_
#include "asapo/common/error.h"
#include "receiver_metrics_provider.h"
namespace asapo {
class ReceiverMetricsServer {
public:
virtual Error ListenAndServe(std::string port, std::unique_ptr<ReceiverMetricsProvider> provider) = 0;
virtual ~ReceiverMetricsServer() = default;
};
}
#endif //ASAPO_RECEIVER_SRC_METRICS_RECEIVER_METRICS_SERVER_H_
#include "receiver_mongoose_server.h"
#include "../../../3d_party/mongoose/mongoose.h"
#include "../../../3d_party/mongoose/mongoose.c"
namespace asapo {
static void fn(struct mg_connection* c, int ev, void* ev_data, void* fn_data) {
auto provider = static_cast<const ReceiverMetricsProvider*>(fn_data);
if (ev == MG_EV_HTTP_MSG) {
struct mg_http_message* hm = (struct mg_http_message*) ev_data;
if (mg_http_match_uri(hm, "/metrics")) {
mg_http_reply(c, 200, "", "{\"result\": %s}\n", provider->Metrics().c_str());
} else {
mg_http_reply(c, 404, "", "%s", "Not found\n");
}
}
}
asapo::Error asapo::ReceiverMongooseServer::ListenAndServe(std::string port,
std::unique_ptr<ReceiverMetricsProvider> provider) {
struct mg_mgr mgr; // Event manager
mg_mgr_init(&mgr); // Initialise event manager
auto uri = "0.0.0.0:" + port;
if (mg_http_listen(&mgr, uri.c_str(), fn, (void*) provider.get()) == NULL) {
LOG(LL_ERROR, ("Cannot listen on %s. Use http://ADDR:PORT or :PORT",
port.c_str()));
exit(EXIT_FAILURE);
}
for (;;) mg_mgr_poll(&mgr, 1000); // Infinite event loop
mg_mgr_free(&mgr);
return nullptr;
}
}
#ifndef ASAPO_RECEIVER_SRC_METRICS_RECEIVER_MONGOOSE_SERVER_H_
#define ASAPO_RECEIVER_SRC_METRICS_RECEIVER_MONGOOSE_SERVER_H_
#include "receiver_metrics_server.h"
namespace asapo {
class ReceiverMongooseServer final : public ReceiverMetricsServer {
public:
Error ListenAndServe(std::string port, std::unique_ptr<ReceiverMetricsProvider> provider) override;
};
}
#endif //ASAPO_RECEIVER_SRC_METRICS_RECEIVER_MONGOOSE_SERVER_H_
#include "receiver_prometheus_metrics.h"
namespace asapo {
std::string ReceiverPrometheusMetrics::Metrics() const {
return "hello";
}
}
#ifndef ASAPO_RECEIVER_SRC_METRICS_RECEIVER_PROMETHEUS_METRICS_H_
#define ASAPO_RECEIVER_SRC_METRICS_RECEIVER_PROMETHEUS_METRICS_H_
#include "receiver_metrics_provider.h"
namespace asapo {
class ReceiverPrometheusMetrics final : public ReceiverMetricsProvider {
public:
std::string Metrics() const override;
};
}
#endif //ASAPO_RECEIVER_SRC_METRICS_RECEIVER_PROMETHEUS_METRICS_H_
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment