Add ClearMetrics Dbus method.

This commit is contained in:
Simon Kelley
2022-09-16 12:58:41 +01:00
parent 9403664616
commit a5cbe6d112
4 changed files with 34 additions and 3 deletions

View File

@@ -257,6 +257,10 @@ GetServerMetrics
Returns per-DNS-server metrics. Returns per-DNS-server metrics.
ClearMetrics
------------
Clear call metric counters, global and per-server.
2. SIGNALS 2. SIGNALS
---------- ----------

View File

@@ -94,6 +94,8 @@ const char* introspection_xml_template =
" <method name=\"GetServerMetrics\">\n" " <method name=\"GetServerMetrics\">\n"
" <arg name=\"metrics\" direction=\"out\" type=\"a{ss}\"/>\n" " <arg name=\"metrics\" direction=\"out\" type=\"a{ss}\"/>\n"
" </method>\n" " </method>\n"
" <method name=\"ClearMetrics\">\n"
" </method>\n"
" </interface>\n" " </interface>\n"
"</node>\n"; "</node>\n";
@@ -708,7 +710,7 @@ static DBusMessage *dbus_get_server_metrics(DBusMessage* message)
add_dict_int(&dict_array, "failed_queries", serv->failed_queries); add_dict_int(&dict_array, "failed_queries", serv->failed_queries);
add_dict_int(&dict_array, "nxdomain", serv->nxdomain_replies); add_dict_int(&dict_array, "nxdomain", serv->nxdomain_replies);
add_dict_int(&dict_array, "retries", serv->retrys); add_dict_int(&dict_array, "retries", serv->retrys);
add_dict_int(&dict_array, "latency", sigma_latency/count_latency; add_dict_int(&dict_array, "latency", sigma_latency/count_latency);
dbus_message_iter_close_container(&server_array, &dict_array); dbus_message_iter_close_container(&server_array, &dict_array);
} }
@@ -797,6 +799,10 @@ DBusHandlerResult message_handler(DBusConnection *connection,
{ {
reply = dbus_get_server_metrics(message); reply = dbus_get_server_metrics(message);
} }
else if (strcmp(method, "ClearMetrics") == 0)
{
clear_metrics();
}
else if (strcmp(method, "ClearCache") == 0) else if (strcmp(method, "ClearCache") == 0)
clear_cache = 1; clear_cache = 1;
else else

View File

@@ -44,3 +44,23 @@ const char * metric_names[] = {
const char* get_metric_name(int i) { const char* get_metric_name(int i) {
return metric_names[i]; return metric_names[i];
} }
void clear_metrics(void)
{
int i;
struct server *serv;
for (i = 0; i < __METRIC_MAX; i++)
daemon->metrics[i] = 0;
for (serv = daemon->servers; serv; serv = serv->next)
{
serv->queries = 0;
serv->failed_queries = 0;
serv->failed_queries = 0;
serv->retrys = 0;
serv->nxdomain_replies = 0;
serv->query_latency = 0;
}
}

View File

@@ -43,3 +43,4 @@ enum {
}; };
const char* get_metric_name(int); const char* get_metric_name(int);
void clear_metrics(void);