@cryptotaxi247 / netdata-1 / commits / 7bdec01f0

Add IPv4 UDP charts to macOS plugin

Vladimir Kobal committed Jan 9, 2017 at 14:25 UTC 7bdec01f04eaa39078e479742a0e3bdd6c98a800
1 file changed +65 -1
src/macos_sysctl.c
+65 -1
@@ -6,6 +6,11 @@
6 #include <sys/socketvar.h>
7 #include <netinet/tcp_var.h>
8 #include <netinet/tcp_fsm.h>
9 +// NEEDED BY do_udp..., do_ip...
10 +#include <netinet/ip_var.h>
11 +// NEEDED BY do_udp...
12 +#include <netinet/udp.h>
13 +#include <netinet/udp_var.h>
14
15 #define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var))
16
@@ -19,7 +24,8 @@ int do_macos_sysctl(int update_every, usec_t dt) {
24
25 static int do_loadavg = -1, do_swap = -1, do_bandwidth = -1,
26 do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1, do_ecn = -1,
22 - do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1;
27 + do_tcpext_syscookies = -1, do_tcpext_ofo = -1, do_tcpext_connaborts = -1,
28 + do_udp_packets = -1, do_udp_errors = -1;
29
30
31 if (unlikely(do_loadavg == -1)) {
@@ -33,6 +39,8 @@ int do_macos_sysctl(int update_every, usec_t dt) {
39 do_tcpext_syscookies = config_get_boolean_ondemand("plugin:macos:sysctl", "TCP SYN cookies", CONFIG_ONDEMAND_ONDEMAND);
40 do_tcpext_ofo = config_get_boolean_ondemand("plugin:macos:sysctl", "TCP out-of-order queue", CONFIG_ONDEMAND_ONDEMAND);
41 do_tcpext_connaborts = config_get_boolean_ondemand("plugin:macos:sysctl", "TCP connection aborts", CONFIG_ONDEMAND_ONDEMAND);
42 + do_udp_packets = config_get_boolean("plugin:macos:sysctl", "ipv4 UDP packets", 1);
43 + do_udp_errors = config_get_boolean("plugin:macos:sysctl", "ipv4 UDP errors", 1);
44 }
45
46 RRDSET *st;
@@ -63,6 +71,9 @@ int do_macos_sysctl(int update_every, usec_t dt) {
71 struct tcpstat tcpstat;
72 uint64_t tcps_states[TCP_NSTATES];
73
74 + // NEEDED BY: do_udp...
75 + struct udpstat udpstat;
76 +
77 if (last_loadavg_usec <= dt) {
78 if (likely(do_loadavg)) {
79 if (unlikely(GETSYSCTL("vm.loadavg", sysload))) {
@@ -324,6 +335,59 @@ int do_macos_sysctl(int update_every, usec_t dt) {
335 }
336 }
337
338 + // --------------------------------------------------------------------
339 +
340 + // see http://net-snmp.sourceforge.net/docs/mibs/udp.html
341 + if (likely(do_udp_packets || do_udp_errors)) {
342 + if (unlikely(GETSYSCTL("net.inet.udp.stats", udpstat))) {
343 + do_udp_packets = 0;
344 + error("DISABLED: ipv4.udppackets");
345 + do_udp_errors = 0;
346 + error("DISABLED: ipv4.udperrors");
347 + } else {
348 + if (likely(do_udp_packets)) {
349 + st = rrdset_find("ipv4.udppackets");
350 + if (unlikely(!st)) {
351 + st = rrdset_create("ipv4", "udppackets", NULL, "udp", NULL, "IPv4 UDP Packets",
352 + "packets/s", 2601, update_every, RRDSET_TYPE_LINE);
353 +
354 + rrddim_add(st, "InDatagrams", "received", 1, 1, RRDDIM_INCREMENTAL);
355 + rrddim_add(st, "OutDatagrams", "sent", -1, 1, RRDDIM_INCREMENTAL);
356 + } else
357 + rrdset_next(st);
358 +
359 + rrddim_set(st, "InDatagrams", udpstat.udps_ipackets);
360 + rrddim_set(st, "OutDatagrams", udpstat.udps_opackets);
361 + rrdset_done(st);
362 + }
363 +
364 + // --------------------------------------------------------------------
365 +
366 + if (likely(do_udp_errors)) {
367 + st = rrdset_find("ipv4.udperrors");
368 + if (unlikely(!st)) {
369 + st = rrdset_create("ipv4", "udperrors", NULL, "udp", NULL, "IPv4 UDP Errors", "events/s",
370 + 2701, update_every, RRDSET_TYPE_LINE);
371 + st->isdetail = 1;
372 +
373 + rrddim_add(st, "RcvbufErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
374 + rrddim_add(st, "InErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
375 + rrddim_add(st, "NoPorts", NULL, 1, 1, RRDDIM_INCREMENTAL);
376 + rrddim_add(st, "InCsumErrors", NULL, 1, 1, RRDDIM_INCREMENTAL);
377 + rrddim_add(st, "IgnoredMulti", NULL, 1, 1, RRDDIM_INCREMENTAL);
378 + } else
379 + rrdset_next(st);
380 +
381 + rrddim_set(st, "InErrors", udpstat.udps_hdrops + udpstat.udps_badlen);
382 + rrddim_set(st, "NoPorts", udpstat.udps_noport);
383 + rrddim_set(st, "RcvbufErrors", udpstat.udps_fullsock);
384 + rrddim_set(st, "InCsumErrors", udpstat.udps_badsum + udpstat.udps_nosum);
385 + rrddim_set(st, "IgnoredMulti", udpstat.udps_filtermcast);
386 + rrdset_done(st);
387 + }
388 + }
389 + }
390 +
391 return 0;
392 }
393