@cryptotaxi247 / netdata-1 / commits / 43e301c66

Add IPv4 UDP charts to FreeBSD plugin

Vladimir Kobal committed Jan 3, 2017 at 00:02 UTC 43e301c66489b9210ce4ed0c98aa7b36e70d9d83
1 file changed +64 -1
src/freebsd_sysctl.c
+64 -1
@@ -20,6 +20,10 @@
20 #include <ifaddrs.h>
21 // NEEDED BY do_tcp...
22 #include <netinet/tcp_var.h>
23 +// NEEDED BY do_udp...
24 +#include <netinet/ip_var.h>
25 +#include <netinet/udp.h>
26 +#include <netinet/udp_var.h>
27
28 // NEEDED BY: do_disk_io
29 #define RRD_TYPE_DISK "disk"
@@ -38,7 +42,8 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
42 do_pgfaults = -1, do_committed = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
43 do_dev_intr = -1, do_soft_intr = -1, do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
44 do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
41 - do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1;
45 + do_ecn = -1, do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
46 + do_udp_packets = -1, do_udp_errors = -1;
47
48 if (unlikely(do_cpu == -1)) {
49 do_cpu = config_get_boolean("plugin:freebsd:sysctl", "cpu utilization", 1);
@@ -71,6 +76,8 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
76 do_tcpext_syscookies = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP SYN cookies", CONFIG_ONDEMAND_ONDEMAND);
77 do_tcpext_ofo = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP out-of-order queue", CONFIG_ONDEMAND_ONDEMAND);
78 do_tcpext_connaborts = config_get_boolean_ondemand("plugin:freebsd:sysctl", "TCP connection aborts", CONFIG_ONDEMAND_ONDEMAND);
79 + do_udp_packets = config_get_boolean("plugin:freebsd:sysctl", "ipv4 UDP packets", 1);
80 + do_udp_errors = config_get_boolean("plugin:freebsd:sysctl", "ipv4 UDP errors", 1);
81 }
82
83 RRDSET *st;
@@ -195,6 +202,9 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
202 struct tcpstat tcpstat;
203 uint64_t tcps_states[TCP_NSTATES];
204
205 + // NEEDED BY: do_udp...
206 + struct udpstat udpstat;
207 +
208 // --------------------------------------------------------------------
209
210 if (last_loadavg_usec <= dt) {
@@ -1430,5 +1440,58 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
1440 }
1441 }
1442
1443 + // --------------------------------------------------------------------
1444 +
1445 + // see http://net-snmp.sourceforge.net/docs/mibs/udp.html
1446 + if (likely(do_udp_packets || do_udp_errors)) {
1447 + if (unlikely(GETSYSCTL("net.inet.udp.stats", udpstat))) {
1448 + do_udp_packets = 0;
1449 + error("DISABLED: ipv4.udppackets");
1450 + do_udp_errors = 0;
1451 + error("DISABLED: ipv4.udperrors");
1452 + } else {
1453 + if (likely(do_udp_packets)) {
1454 + st = rrdset_find("ipv4.udppackets");
1455 + if (unlikely(!st)) {
1456 + st = rrdset_create("ipv4", "udppackets", NULL, "udp", NULL, "IPv4 UDP Packets",
1457 + "packets/s", 2601, update_every, RRDSET_TYPE_LINE);
1458 +
1459 + rrddim_add(st, "InDatagrams", "received", 1, 1, RRDDIM_INCREMENTAL);
1460 + rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRDDIM_INCREMENTAL);
1461 + } else
1462 + rrdset_next(st);
1463 +
1464 + rrddim_set(st, "InDatagrams", udpstat.udps_ipackets);
1465 + rrddim_set(st, "OutDatagrams", udpstat.udps_opackets);
1466 + rrdset_done(st);
1467 + }
1468 +
1469 + // --------------------------------------------------------------------
1470 +
1471 + if (likely(do_udp_errors)) {
1472 + st = rrdset_find("ipv4.udperrors");
1473 + if (unlikely(!st)) {
1474 + st = rrdset_create("ipv4", "udperrors", NULL, "udp", NULL, "IPv4 UDP Errors", "events/s",
1475 + 2701, update_every, RRDSET_TYPE_LINE);
1476 + st->isdetail = 1;
1477 +
1478 + rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
1479 + rrddim_add(st, "InErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
1480 + rrddim_add(st, "NoPorts", NULL, 1, 1, RRDDIM_INCREMENTAL);
1481 + rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
1482 + rrddim_add(st, "IgnoredMulti", NULL, 1, 1, RRDDIM_INCREMENTAL);
1483 + } else
1484 + rrdset_next(st);
1485 +
1486 + rrddim_set(st, "InErrors", udpstat.udps_hdrops + udpstat.udps_badlen);
1487 + rrddim_set(st, "NoPorts", udpstat.udps_noport);
1488 + rrddim_set(st, "RcvbufErrors", udpstat.udps_fullsock);
1489 + rrddim_set(st, "InCsumErrors", udpstat.udps_badsum + udpstat.udps_nosum);
1490 + rrddim_set(st, "IgnoredMulti", udpstat.udps_filtermcast);
1491 + rrdset_done(st);
1492 + }
1493 + }
1494 + }
1495 +
1496 return 0;
1497 }