@cryptotaxi247 / netdata-1 / commits / fffacfa04

Add system interrupts chart to FreeBSD plugin

Vladimir Kobal committed Dec 30, 2016 at 01:54 UTC fffacfa0429e98c4a8191a3fca1d5c20c4664a61
1 file changed +30
src/freebsd_sysctl.c
+30
@@ -61,9 +61,11 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
61 }
62
63 RRDSET *st;
64 + RRDDIM *rd;
65
66 int system_pagesize = getpagesize(); // wouldn't it be better to get value directly from hw.pagesize?
67 int i, n;
68 + void *p;
69 int common_error = 0;
70 size_t size;
71
@@ -91,6 +93,7 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
93 size_t intrcnt_size;
94 unsigned long nintr = 0;
95 static unsigned long *intrcnt = NULL;
96 + static char *intrnames = NULL;
97 unsigned long long totalintr = 0;
98
99 // NEEDED BY: do_disk_io
@@ -380,6 +383,33 @@ int do_freebsd_sysctl(int update_every, usec_t dt) {
383
384 rrddim_set(st, "interrupts", totalintr);
385 rrdset_done(st);
386 +
387 + // --------------------------------------------------------------------
388 +
389 + size = nintr * (MAXCOMLEN +1);
390 + intrnames = reallocz(intrnames, size);
391 + if (unlikely(getsysctl("hw.intrnames", intrnames, size))) {
392 + do_interrupts = 0;
393 + error("DISABLED: system.intr");
394 + } else {
395 + st = rrdset_find_bytype("system", "interrupts");
396 + if (unlikely(!st))
397 + st = rrdset_create("system", "interrupts", NULL, "interrupts", NULL, "System interrupts", "interrupts/s",
398 + 1000, update_every, RRDSET_TYPE_STACKED);
399 + else
400 + rrdset_next(st);
401 +
402 + for (i = 0; i < nintr; i++) {
403 + p = intrnames + i * (MAXCOMLEN + 1);
404 + if (unlikely((intrcnt[i] != 0) && (*(char*)p != 0))) {
405 + rd = rrddim_find(st, p);
406 + if (unlikely(!rd))
407 + rd = rrddim_add(st, p, NULL, 1, 1, RRDDIM_INCREMENTAL);
408 + rrddim_set_by_pointer(st, rd, intrcnt[i]);
409 + }
410 + }
411 + rrdset_done(st);
412 + }
413 }
414 }
415 }