1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

Add MetricsBackend with prometheus counter support

This commit is contained in:
Loic Blot 2020-04-27 08:31:37 +02:00 committed by Loïc Blot
parent a36c9c3e93
commit 56bababcdf
16 changed files with 427 additions and 25 deletions

View file

@ -229,18 +229,46 @@ Server::Server(
m_nodedef(createNodeDefManager()),
m_craftdef(createCraftDefManager()),
m_thread(new ServerThread(this)),
m_uptime(0),
m_clients(m_con),
m_admin_chat(iface),
m_modchannel_mgr(new ModChannelMgr())
{
m_lag = g_settings->getFloat("dedicated_server_step");
if (m_path_world.empty())
throw ServerError("Supplied empty world path");
if (!gamespec.isValid())
throw ServerError("Supplied invalid gamespec");
#if USE_PROMETHEUS
m_metrics_backend = std::unique_ptr<MetricsBackend>(createPrometheusMetricsBackend());
#else
m_metrics_backend = std::unique_ptr<MetricsBackend>(new MetricsBackend());
#endif
m_uptime_counter = m_metrics_backend->addCounter("minetest_core_server_uptime", "Server uptime (in seconds)");
m_player_gauge = m_metrics_backend->addGauge("minetest_core_player_number", "Number of connected players");
m_timeofday_gauge = m_metrics_backend->addGauge(
"minetest_core_timeofday",
"Time of day value");
m_lag_gauge = m_metrics_backend->addGauge(
"minetest_core_latency",
"Latency value (in seconds)");
m_aom_buffer_counter = m_metrics_backend->addCounter(
"minetest_core_aom_generated_count",
"Number of active object messages generated");
m_packet_recv_counter = m_metrics_backend->addCounter(
"minetest_core_server_packet_recv",
"Processable packets received");
m_packet_recv_processed_counter = m_metrics_backend->addCounter(
"minetest_core_server_packet_recv_processed",
"Valid received packets processed");
m_lag_gauge->set(g_settings->getFloat("dedicated_server_step"));
}
Server::~Server()
@ -353,7 +381,7 @@ void Server::init()
MutexAutoLock envlock(m_env_mutex);
// Create the Map (loads map_meta.txt, overriding configured mapgen params)
ServerMap *servermap = new ServerMap(m_path_world, this, m_emerge);
ServerMap *servermap = new ServerMap(m_path_world, this, m_emerge, m_metrics_backend.get());
// Initialize scripting
infostream << "Server: Initializing Lua" << std::endl;
@ -511,9 +539,7 @@ void Server::AsyncRunStep(bool initial_step)
/*
Update uptime
*/
{
m_uptime.set(m_uptime.get() + dtime);
}
m_uptime_counter->increment(dtime);
handlePeerChanges();
@ -527,11 +553,13 @@ void Server::AsyncRunStep(bool initial_step)
*/
m_time_of_day_send_timer -= dtime;
if(m_time_of_day_send_timer < 0.0) {
if (m_time_of_day_send_timer < 0.0) {
m_time_of_day_send_timer = g_settings->getFloat("time_send_interval");
u16 time = m_env->getTimeOfDay();
float time_speed = g_settings->getFloat("time_speed");
SendTimeOfDay(PEER_ID_INEXISTENT, time, time_speed);
m_timeofday_gauge->set(time);
}
{
@ -603,7 +631,7 @@ void Server::AsyncRunStep(bool initial_step)
}
m_clients.step(dtime);
m_lag += (m_lag > dtime ? -1 : 1) * dtime/100;
m_lag_gauge->increment((m_lag_gauge->get() > dtime ? -1 : 1) * dtime/100);
#if USE_CURL
// send masterserver announce
{
@ -614,9 +642,9 @@ void Server::AsyncRunStep(bool initial_step)
ServerList::AA_START,
m_bind_addr.getPort(),
m_clients.getPlayerNames(),
m_uptime.get(),
m_uptime_counter->get(),
m_env->getGameTime(),
m_lag,
m_lag_gauge->get(),
m_gamespec.id,
Mapgen::getMapgenName(m_emerge->mgparams->mgtype),
m_modmgr->getMods(),
@ -638,6 +666,7 @@ void Server::AsyncRunStep(bool initial_step)
const RemoteClientMap &clients = m_clients.getClientList();
ScopeProfiler sp(g_profiler, "Server: update objects within range");
m_player_gauge->set(clients.size());
for (const auto &client_it : clients) {
RemoteClient *client = client_it.second;
@ -703,6 +732,8 @@ void Server::AsyncRunStep(bool initial_step)
message_list->push_back(aom);
}
m_aom_buffer_counter->increment(buffered_messages.size());
m_clients.lock();
const RemoteClientMap &clients = m_clients.getClientList();
// Route data to every client
@ -943,7 +974,9 @@ void Server::Receive()
}
peer_id = pkt.getPeerId();
m_packet_recv_counter->increment();
ProcessData(&pkt);
m_packet_recv_processed_counter->increment();
} catch (const con::InvalidIncomingDataException &e) {
infostream << "Server::Receive(): InvalidIncomingDataException: what()="
<< e.what() << std::endl;
@ -3127,7 +3160,7 @@ std::wstring Server::getStatusString()
// Version
os << L"version=" << narrow_to_wide(g_version_string);
// Uptime
os << L", uptime=" << m_uptime.get();
os << L", uptime=" << m_uptime_counter->get();
// Max lag estimate
os << L", max_lag=" << (m_env ? m_env->getMaxLagEstimate() : 0);