X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Ftcpconns.c;h=3f96345dac8ac1c9142d3cbba2f560d230682724;hb=db2d9257b8aac65b47bb1466aaa66b8a62345f1c;hp=765b892e265498e0299fb4f7c4f2265eef93290c;hpb=5eb71045f1d3b72b17e922a86b5014f68345b5b3;p=collectd.git diff --git a/src/tcpconns.c b/src/tcpconns.c index 765b892e..3f96345d 100644 --- a/src/tcpconns.c +++ b/src/tcpconns.c @@ -273,7 +273,9 @@ static const char *config_keys[] = static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); static int port_collect_listening = 0; +static int port_collect_total = 1; static port_entry_t *port_list_head = NULL; +static uint32_t count_total[TCP_STATE_MAX + 1]; #if KERNEL_LINUX static uint32_t sequence_number = 0; @@ -286,17 +288,22 @@ enum } linux_source = SRC_DUNNO; #endif +static void connt_prepare_vl (value_list_t *vl, value_t *values) +{ + vl->values = values; + vl->values_len = 1; + sstrncpy (vl->host, hostname_g, sizeof (vl->host)); + sstrncpy (vl->plugin, "tcpconns", sizeof (vl->plugin)); + sstrncpy (vl->type, "tcp_connections", sizeof (vl->type)); +} + static void conn_submit_port_entry (port_entry_t *pe) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; int i; - vl.values = values; - vl.values_len = 1; - sstrncpy (vl.host, hostname_g, sizeof (vl.host)); - sstrncpy (vl.plugin, "tcpconns", sizeof (vl.plugin)); - sstrncpy (vl.type, "tcp_connections", sizeof (vl.type)); + connt_prepare_vl (&vl, values); if (((port_collect_listening != 0) && (pe->flags & PORT_IS_LISTENING)) || (pe->flags & PORT_COLLECT_LOCAL)) @@ -330,10 +337,33 @@ static void conn_submit_port_entry (port_entry_t *pe) } } /* void conn_submit */ +static void conn_submit_port_total (void) +{ + value_t values[1]; + value_list_t vl = VALUE_LIST_INIT; + int i; + + connt_prepare_vl (&vl, values); + + sstrncpy (vl.plugin, "all", sizeof (vl.plugin)); + + for (i = 1; i <= TCP_STATE_MAX; i++) + { + vl.values[0].gauge = count_total[i]; + + sstrncpy (vl.type_instance, tcp_state[i], sizeof (vl.type_instance)); + + plugin_dispatch_values (&vl); + } +} + static void conn_submit_all (void) { port_entry_t *pe; + if (port_collect_total) + conn_submit_port_total (); + for (pe = port_list_head; pe != NULL; pe = pe->next) conn_submit_port_entry (pe); } /* void conn_submit_all */ @@ -372,6 +402,8 @@ static void conn_reset_port_entry (void) port_entry_t *prev = NULL; port_entry_t *pe = port_list_head; + memset (&count_total, '\0', sizeof(count_total)); + while (pe != NULL) { /* If this entry was created while reading the files (ant not when handling @@ -419,6 +451,8 @@ static int conn_handle_ports (uint16_t port_local, uint16_t port_remote, uint8_t return (-1); } + count_total[state]++; + /* Listening sockets */ if ((state == TCP_STATE_LISTEN) && (port_collect_listening != 0)) {