|
|
|
@ -577,6 +577,39 @@ GQueue *statistics_gather_metrics(void) { |
|
|
|
METRICs("totalerrorcount", "%u", total.errors); |
|
|
|
|
|
|
|
HEADER("}", ""); |
|
|
|
|
|
|
|
HEADER("interfaces", NULL); |
|
|
|
HEADER("[", NULL); |
|
|
|
for (GList *l = all_local_interfaces.head; l; l = l->next) { |
|
|
|
struct local_intf *lif = l->data; |
|
|
|
// only show first-order interface entries: socket families must match |
|
|
|
if (lif->logical->preferred_family != lif->spec->local_address.addr.family) |
|
|
|
continue; |
|
|
|
|
|
|
|
HEADER("{", NULL); |
|
|
|
|
|
|
|
METRICsva("name", "\"%s\"", lif->logical->name.s); |
|
|
|
METRICsva("address", "\"%s\"", sockaddr_print_buf(&lif->spec->local_address.addr)); |
|
|
|
|
|
|
|
HEADER("ports", NULL); |
|
|
|
HEADER("{", NULL); |
|
|
|
|
|
|
|
METRICs("min", "%u", lif->spec->port_pool.min); |
|
|
|
METRICs("max", "%u", lif->spec->port_pool.max); |
|
|
|
unsigned int f = g_atomic_int_get(&lif->spec->port_pool.free_ports); |
|
|
|
unsigned int l = g_atomic_int_get(&lif->spec->port_pool.last_used); |
|
|
|
unsigned int r = lif->spec->port_pool.max - lif->spec->port_pool.min + 1; |
|
|
|
METRICs("used", "%u", r - f); |
|
|
|
METRICs("used_pct", "%.2f", (double) (r - f) * 100.0 / r); |
|
|
|
METRICs("free", "%u", f); |
|
|
|
METRICs("totals", "%u", r); |
|
|
|
METRICs("last", "%u", l); |
|
|
|
|
|
|
|
HEADER("}", NULL); |
|
|
|
HEADER("}", NULL); |
|
|
|
} |
|
|
|
HEADER("]", NULL); |
|
|
|
|
|
|
|
HEADER("}", NULL); |
|
|
|
|
|
|
|
return ret; |
|
|
|
|