Move metrics out of daemon into llarp::Context

pull/487/head
Michael 5 years ago
parent 3715c28616
commit 57d6668e55
No known key found for this signature in database
GPG Key ID: 2D51757B47E2434C

@ -3,9 +3,6 @@
#include <llarp.h>
#include <util/fs.hpp>
#include <util/logger.hpp>
#include <util/metrics_core.hpp>
#include <util/metrics_publishers.hpp>
#include <util/scheduler.hpp>
#include <getopt.h>
#include <signal.h>
@ -252,23 +249,10 @@ main(int argc, char *argv[])
signal(SIGHUP, handle_signal);
#endif
llarp::thread::Scheduler scheduler;
llarp::metrics::DefaultManagerGuard metricsGuard;
llarp::metrics::PublisherScheduler publisherScheduler(
scheduler, metricsGuard.instance());
metricsGuard.instance()->addGlobalPublisher(
std::make_shared< llarp::metrics::StreamPublisher >(std::cerr));
publisherScheduler.setDefault(absl::Seconds(30));
scheduler.start();
code = llarp_main_setup(ctx);
if(code == 0)
code = llarp_main_run(ctx);
llarp_main_free(ctx);
scheduler.stop();
}
#ifdef _WIN32
::WSACleanup();

@ -21,17 +21,35 @@ namespace llarp
struct AbstractRouter;
struct RouterContact;
namespace metrics
{
class DefaultManagerGuard;
class PublisherScheduler;
} // namespace metrics
namespace thread
{
class Scheduler;
}
struct Context
{
Context();
~Context();
// These come first, in this order.
// This ensures we get metric collection on shutdown
std::unique_ptr< thread::Scheduler > m_scheduler;
std::unique_ptr< metrics::DefaultManagerGuard > m_metricsManager;
std::unique_ptr< metrics::PublisherScheduler > m_metricsPublisher;
int num_nethreads = 1;
bool singleThreaded = false;
std::unique_ptr< llarp::Crypto > crypto;
std::unique_ptr< llarp::AbstractRouter > router;
std::unique_ptr< Crypto > crypto;
std::unique_ptr< AbstractRouter > router;
std::unique_ptr< llarp_threadpool > worker;
std::unique_ptr< llarp::Logic > logic;
std::unique_ptr< llarp::Config > config;
std::unique_ptr< Logic > logic;
std::unique_ptr< Config > config;
std::unique_ptr< llarp_nodedb > nodedb;
std::unique_ptr< llarp_ev_loop > mainloop;
std::string nodedb_dir;

@ -10,6 +10,9 @@
#include <nodedb.hpp>
#include <router/router.hpp>
#include <util/logger.h>
#include <util/metrics.hpp>
#include <util/metrics_publishers.hpp>
#include <util/scheduler.hpp>
#include <getopt.h>
#include <signal.h>
@ -22,10 +25,26 @@
namespace llarp
{
Context::Context()
: m_scheduler(std::make_unique< thread::Scheduler >())
, m_metricsManager(std::make_unique< metrics::DefaultManagerGuard >())
, m_metricsPublisher(std::make_unique< metrics::PublisherScheduler >(
*m_scheduler, m_metricsManager->instance()))
{
m_metricsManager->instance()->addGlobalPublisher(
std::make_shared< llarp::metrics::StreamPublisher >(std::cerr));
m_metricsPublisher->setDefault(absl::Seconds(30));
m_scheduler->start();
}
Context::~Context()
{
llarp_ev_loop *ptr = mainloop.release();
llarp_ev_loop_free(&ptr);
m_scheduler->stop();
}
void
@ -339,8 +358,8 @@ extern "C"
{
cSetLogLevel(eLogDebug);
}
llarp_main *m = new llarp_main;
m->ctx.reset(new llarp::Context());
llarp_main *m = new llarp_main;
m->ctx = std::make_unique< llarp::Context >();
m->ctx->singleThreaded = !multiProcess;
if(!m->ctx->LoadConfig(fname))
{

Loading…
Cancel
Save