Separate kern.cp_time module
Vladimir Kobal committed
Mar 7, 2017 at 16:32 UTC
98c99c7de02c880daa00d425bb64542fb45f0a18
3 files changed
+74
-40
src/freebsd_sysctl.c
+72
-40
@@ -34,7 +34,9 @@
34
35
int system_pagesize = PAGE_SIZE;
36
37
+// --------------------------------------------------------------------------------------------------------------------
38
// FreeBSD plugin initialization
39
+
40
int freebsd_plugin_init()
41
{
42
system_pagesize = getpagesize();
@@ -46,6 +48,9 @@ int freebsd_plugin_init()
48
return 0;
49
}
50
51
+// --------------------------------------------------------------------------------------------------------------------
52
+// vm.loadavg
53
+
54
// FreeBSD calculates load averages once every 5 seconds
55
#define MIN_LOADAVG_UPDATE_EVERY 5
56
@@ -61,6 +66,9 @@ int do_vm_loadavg(int update_every, usec_t dt){
66
error("DISABLED: vm.loadavg module");
67
return 1;
68
} else {
69
+
70
+ // --------------------------------------------------------------------
71
+
72
static RRDSET *st = NULL;
73
static RRDDIM *rd_load1 = NULL, *rd_load2 = NULL, *rd_load3 = NULL;
74
@@ -96,6 +104,9 @@ int do_vm_loadavg(int update_every, usec_t dt){
104
return 0;
105
}
106
107
+// --------------------------------------------------------------------------------------------------------------------
108
+// vm.vmtotal
109
+
110
int do_vm_vmtotal(int update_every, usec_t dt) {
111
static int do_all_processes = -1, do_processes = -1, do_committed = -1;
112
@@ -119,6 +130,9 @@ int do_vm_vmtotal(int update_every, usec_t dt) {
130
error("DISABLED: vm.vmtotal module");
131
return 1;
132
} else {
133
+
134
+ // --------------------------------------------------------------------
135
+
136
if (likely(do_all_processes)) {
137
static RRDSET *st = NULL;
138
static RRDDIM *rd = NULL;
@@ -209,6 +223,61 @@ int do_vm_vmtotal(int update_every, usec_t dt) {
223
return 0;
224
}
225
226
+// --------------------------------------------------------------------------------------------------------------------
227
+// kern.cp_time
228
+
229
+int do_kern_cp_time(int update_every, usec_t dt) {
230
+ if (unlikely(CPUSTATES != 5)) {
231
+ error("FREEBSD: There are %d CPU states (5 was expected)", CPUSTATES);
232
+ error("DISABLED: system.cpu chart");
233
+ error("DISABLED: kern.cp_time module");
234
+ return 1;
235
+ } else {
236
+ static int mib[2] = {0, 0};
237
+ long cp_time[CPUSTATES];
238
+
239
+ if (unlikely(GETSYSCTL_SIMPLE("kern.cp_time", mib, cp_time))) {
240
+ error("DISABLED: system.cpu chart");
241
+ error("DISABLED: kern.cp_time module");
242
+ return 1;
243
+ } else {
244
+ static RRDSET *st = NULL;
245
+ static RRDDIM *rd_nice = NULL, *rd_system = NULL, *rd_user = NULL, *rd_interrupt = NULL, *rd_idle = NULL;
246
+
247
+ if (unlikely(!st)) {
248
+ st = rrdset_create_localhost("system",
249
+ "cpu",
250
+ NULL,
251
+ "cpu",
252
+ "system.cpu",
253
+ "Total CPU utilization",
254
+ "percentage",
255
+ 100, update_every,
256
+ RRDSET_TYPE_STACKED
257
+ );
258
+
259
+ rd_nice = rrddim_add(st, "nice", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
260
+ rd_system = rrddim_add(st, "system", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
261
+ rd_user = rrddim_add(st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
262
+ rd_interrupt = rrddim_add(st, "interrupt", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
263
+ rd_idle = rrddim_add(st, "idle", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
264
+ rrddim_hide(st, "idle");
265
+ }
266
+ else rrdset_next(st);
267
+
268
+ rrddim_set_by_pointer(st, rd_nice, cp_time[1]);
269
+ rrddim_set_by_pointer(st, rd_system, cp_time[2]);
270
+ rrddim_set_by_pointer(st, rd_user, cp_time[0]);
271
+ rrddim_set_by_pointer(st, rd_interrupt, cp_time[3]);
272
+ rrddim_set_by_pointer(st, rd_idle, cp_time[4]);
273
+ rrdset_done(st);
274
+ }
275
+ }
276
+}
277
+
278
+// --------------------------------------------------------------------------------------------------------------------
279
+// old sources
280
+
281
// NEEDED BY: do_disk_io
282
#define RRD_TYPE_DISK "disk"
283
@@ -216,7 +285,7 @@ int do_vm_vmtotal(int update_every, usec_t dt) {
285
#define IFA_DATA(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
286
287
int do_freebsd_sysctl_old(int update_every, usec_t dt) {
219
- static int do_cpu = -1, do_cpu_cores = -1, do_interrupts = -1, do_context = -1, do_forks = -1, do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1,
288
+ static int do_cpu_cores = -1, do_interrupts = -1, do_context = -1, do_forks = -1, do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1,
289
do_pgfaults = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
290
do_dev_intr = -1, do_soft_intr = -1, do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
291
do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
@@ -227,8 +296,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
296
do_icmp6 = -1, do_icmp6_redir = -1, do_icmp6_errors = -1, do_icmp6_echos = -1, do_icmp6_router = -1,
297
do_icmp6_neighbor = -1, do_icmp6_types = -1, do_space = -1, do_inodes = -1, do_uptime = -1;
298
230
- if (unlikely(do_cpu == -1)) {
231
- do_cpu = config_get_boolean("plugin:freebsd:sysctl", "cpu utilization", 1);
299
+ if (unlikely(do_uptime == -1)) {
300
do_cpu_cores = config_get_boolean("plugin:freebsd:sysctl", "per cpu core utilization", 1);
301
do_interrupts = config_get_boolean("plugin:freebsd:sysctl", "cpu interrupts", 1);
302
do_dev_intr = config_get_boolean("plugin:freebsd:sysctl", "device interrupts", 1);
@@ -287,7 +355,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
355
size_t size;
356
char title[4096 + 1];
357
290
- // NEEDED BY: do_cpu, do_cpu_cores
358
+ // NEEDED BY: do_cpu_cores
359
long cp_time[CPUSTATES];
360
361
// NEEDED BY: du_cpu_cores, do_netisr, do_netisr_per_core
@@ -427,42 +495,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
495
496
// --------------------------------------------------------------------
497
430
- if (likely(do_cpu)) {
431
- if (unlikely(CPUSTATES != 5)) {
432
- error("FREEBSD: There are %d CPU states (5 was expected)", CPUSTATES);
433
- do_cpu = 0;
434
- error("DISABLED: system.cpu");
435
- } else {
436
- if (unlikely(GETSYSCTL_BY_NAME("kern.cp_time", cp_time))) {
437
- do_cpu = 0;
438
- error("DISABLED: system.cpu");
439
- } else {
440
-
441
- st = rrdset_find_bytype_localhost("system", "cpu");
442
- if (unlikely(!st)) {
443
- st = rrdset_create_localhost("system", "cpu", NULL, "cpu", "system.cpu", "Total CPU utilization", "percentage", 100, update_every, RRDSET_TYPE_STACKED);
444
-
445
- rrddim_add(st, "nice", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
446
- rrddim_add(st, "system", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
447
- rrddim_add(st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
448
- rrddim_add(st, "interrupt", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
449
- rrddim_add(st, "idle", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
450
- rrddim_hide(st, "idle");
451
- }
452
- else rrdset_next(st);
453
-
454
- rrddim_set(st, "nice", cp_time[1]);
455
- rrddim_set(st, "system", cp_time[2]);
456
- rrddim_set(st, "user", cp_time[0]);
457
- rrddim_set(st, "interrupt", cp_time[3]);
458
- rrddim_set(st, "idle", cp_time[4]);
459
- rrdset_done(st);
460
- }
461
- }
462
- }
463
-
464
- // --------------------------------------------------------------------
465
-
498
if (likely(do_cpu_cores)) {
499
if (unlikely(CPUSTATES != 5)) {
500
error("FREEBSD: There are %d CPU states (5 was expected)", CPUSTATES);
src/plugin_freebsd.c
+1
@@ -18,6 +18,7 @@ static struct freebsd_module {
18
// system metrics
19
{ .name = "vm.loadavg", .dim = "loadavg", .enabled = 1, .func = do_vm_loadavg },
20
{ .name = "vm.vmtotal", .dim = "vmtotal", .enabled = 1, .func = do_vm_vmtotal },
21
+ { .name = "kern.cp_time", .dim = "cp_time", .enabled = 1, .func = do_kern_cp_time },
22
23
// the terminator of this array
24
{ .name = NULL, .dim = NULL, .enabled = 0, .func = NULL }
src/plugin_freebsd.h
+1
@@ -9,6 +9,7 @@ extern int freebsd_plugin_init();
9
10
extern int do_vm_loadavg(int update_every, usec_t dt);
11
extern int do_vm_vmtotal(int update_every, usec_t dt);
12
+extern int do_kern_cp_time(int update_every, usec_t dt);
13
extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
14
15
#define GETSYSCTL_MIB(name, mib) getsysctl_mib(name, mib, sizeof(mib)/sizeof(int))