New sysctl helpers. Separate load average function
Vladimir Kobal committed
Mar 6, 2017 at 23:09 UTC
87e52f54b89622ef15311e6f32de9c7c12849b85
7 files changed
+175
-104
src/apps_plugin.c
+1
-1
@@ -1159,7 +1159,7 @@ static inline int read_proc_stat() {
1159
error("FREEBSD: There are %d CPU states (5 was expected)", CPUSTATES);
1160
goto cleanup;
1161
}
1162
- if (unlikely(GETSYSCTL("kern.cp_time", cp_time))) goto cleanup;
1162
+ if (unlikely(GETSYSCTL_BY_NAME("kern.cp_time", cp_time))) goto cleanup;
1163
#else
1164
static char filename[FILENAME_MAX + 1] = "";
1165
static procfile *ff = NULL;
src/common.c
+3
-3
@@ -1104,7 +1104,7 @@ long get_system_cpus(void) {
1104
#ifdef __APPLE__
1105
int32_t tmp_processors;
1106
1107
- if (unlikely(GETSYSCTL("hw.logicalcpu", tmp_processors))) {
1107
+ if (unlikely(GETSYSCTL_BY_NAME("hw.logicalcpu", tmp_processors))) {
1108
error("Assuming system has %d processors.", processors);
1109
} else {
1110
processors = tmp_processors;
@@ -1114,7 +1114,7 @@ long get_system_cpus(void) {
1114
#elif __FreeBSD__
1115
int32_t tmp_processors;
1116
1117
- if (unlikely(GETSYSCTL("hw.ncpu", tmp_processors))) {
1117
+ if (unlikely(GETSYSCTL_BY_NAME("hw.ncpu", tmp_processors))) {
1118
error("Assuming system has %d processors.", processors);
1119
} else {
1120
processors = tmp_processors;
@@ -1166,7 +1166,7 @@ pid_t get_system_pid_max(void) {
1166
#elif __FreeBSD__
1167
int32_t tmp_pid_max;
1168
1169
- if (unlikely(GETSYSCTL("kern.pid_max", tmp_pid_max))) {
1169
+ if (unlikely(GETSYSCTL_BY_NAME("kern.pid_max", tmp_pid_max))) {
1170
pid_max = 99999;
1171
error("Assuming system's maximum pid is %d.", pid_max);
1172
} else {
src/freebsd_sysctl.c
+91
-82
@@ -34,16 +34,11 @@
34
35
int system_pagesize = PAGE_SIZE;
36
37
-// NEEDED BY: do_disk_io
38
-#define RRD_TYPE_DISK "disk"
39
-
40
-// NEEDED BY: do_bandwidth
41
-#define IFA_DATA(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
42
-
37
// FreeBSD plugin initialization
38
int freebsd_plugin_init()
39
{
46
- if (system_pagesize = getpagesize() <= 0) {
40
+ system_pagesize = getpagesize();
41
+ if (system_pagesize <= 0) {
42
error("FREEBSD: can't get system page size");
43
return 1;
44
}
@@ -55,12 +50,55 @@ int freebsd_plugin_init()
50
#define MIN_LOADAVG_UPDATE_EVERY 5
51
52
int do_vm_loadavg(int update_every, usec_t dt){
53
+ static usec_t next_loadavg_dt = 0;
54
+ static int mib[2] = {0,0};
55
+ struct loadavg sysload;
56
+ static RRDSET *st = NULL;
57
+ static RRDDIM *rdload1 = NULL, *rdload2 = NULL, *rdload3 = NULL;
58
+
59
+ if (next_loadavg_dt <= dt) {
60
+ if (unlikely(GETSYSCTL_SIMPLE("vm.loadavg", mib, sysload))) {
61
+ error("DISABLED: system.load");
62
+ return 1;
63
+ } else if (unlikely(!st)) {
64
+ st = rrdset_create_localhost("system",
65
+ "load",
66
+ NULL,
67
+ "load",
68
+ NULL,
69
+ "System Load Average",
70
+ "load",
71
+ 100,
72
+ (update_every < MIN_LOADAVG_UPDATE_EVERY) ?
73
+ MIN_LOADAVG_UPDATE_EVERY : update_every, RRDSET_TYPE_LINE
74
+ );
75
+ rdload1 = rrddim_add(st, "load1", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
76
+ rdload2 = rrddim_add(st, "load5", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
77
+ rdload3 = rrddim_add(st, "load15", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
78
+ }
79
+ else rrdset_next(st);
80
+
81
+ rrddim_set_by_pointer(st, rdload1, (collected_number) ((double)sysload.ldavg[0] / sysload.fscale * 1000));
82
+ rrddim_set_by_pointer(st, rdload2, (collected_number) ((double)sysload.ldavg[1] / sysload.fscale * 1000));
83
+ rrddim_set_by_pointer(st, rdload3, (collected_number) ((double)sysload.ldavg[2] / sysload.fscale * 1000));
84
+ rrdset_done(st);
85
+
86
+ next_loadavg_dt = st->update_every * USEC_PER_SEC;
87
+ }
88
+ else next_loadavg_dt -= dt;
89
90
+ return 0;
91
}
92
93
+// NEEDED BY: do_disk_io
94
+#define RRD_TYPE_DISK "disk"
95
+
96
+// NEEDED BY: do_bandwidth
97
+#define IFA_DATA(s) (((struct if_data *)ifa->ifa_data)->ifi_ ## s)
98
+
99
int do_freebsd_sysctl_old(int update_every, usec_t dt) {
100
static int do_cpu = -1, do_cpu_cores = -1, do_interrupts = -1, do_context = -1, do_forks = -1, do_processes = -1,
63
- do_loadavg = -1, do_all_processes = -1, do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1,
101
+ do_all_processes = -1, do_disk_io = -1, do_swap = -1, do_ram = -1, do_swapio = -1,
102
do_pgfaults = -1, do_committed = -1, do_ipc_semaphores = -1, do_ipc_shared_mem = -1, do_ipc_msg_queues = -1,
103
do_dev_intr = -1, do_soft_intr = -1, do_netisr = -1, do_netisr_per_core = -1, do_bandwidth = -1,
104
do_tcp_sockets = -1, do_tcp_packets = -1, do_tcp_errors = -1, do_tcp_handshake = -1,
@@ -80,7 +118,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
118
do_context = config_get_boolean("plugin:freebsd:sysctl", "context switches", 1);
119
do_forks = config_get_boolean("plugin:freebsd:sysctl", "processes started", 1);
120
do_processes = config_get_boolean("plugin:freebsd:sysctl", "processes running", 1);
83
- do_loadavg = config_get_boolean("plugin:freebsd:sysctl", "enable load average", 1);
121
do_all_processes = config_get_boolean("plugin:freebsd:sysctl", "enable total processes", 1);
122
do_disk_io = config_get_boolean("plugin:freebsd:sysctl", "stats for all disks", 1);
123
do_swap = config_get_boolean("plugin:freebsd:sysctl", "system swap", 1);
@@ -135,10 +172,6 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
172
size_t size;
173
char title[4096 + 1];
174
138
- // NEEDED BY: do_loadavg
139
- static usec_t next_loadavg_dt = 0;
140
- struct loadavg sysload;
141
-
175
// NEEDED BY: do_cpu, do_cpu_cores
176
long cp_time[CPUSTATES];
177
@@ -282,37 +315,8 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
315
316
// --------------------------------------------------------------------
317
285
- if (next_loadavg_dt <= dt) {
286
- if (likely(do_loadavg)) {
287
- if (unlikely(GETSYSCTL("vm.loadavg", sysload))) {
288
- do_loadavg = 0;
289
- error("DISABLED: system.load");
290
- } else {
291
-
292
- st = rrdset_find_bytype_localhost("system", "load");
293
- if (unlikely(!st)) {
294
- st = rrdset_create_localhost("system", "load", NULL, "load", NULL, "System Load Average", "load", 100, (update_every < MIN_LOADAVG_UPDATE_EVERY) ? MIN_LOADAVG_UPDATE_EVERY : update_every, RRDSET_TYPE_LINE);
295
- rrddim_add(st, "load1", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
296
- rrddim_add(st, "load5", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
297
- rrddim_add(st, "load15", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
298
- }
299
- else rrdset_next(st);
300
-
301
- rrddim_set(st, "load1", (collected_number) ((double)sysload.ldavg[0] / sysload.fscale * 1000));
302
- rrddim_set(st, "load5", (collected_number) ((double)sysload.ldavg[1] / sysload.fscale * 1000));
303
- rrddim_set(st, "load15", (collected_number) ((double)sysload.ldavg[2] / sysload.fscale * 1000));
304
- rrdset_done(st);
305
-
306
- next_loadavg_dt = st->update_every * USEC_PER_SEC;
307
- }
308
- }
309
- }
310
- else next_loadavg_dt -= dt;
311
-
312
- // --------------------------------------------------------------------
313
-
318
if (likely(do_all_processes | do_processes | do_committed)) {
315
- if (unlikely(GETSYSCTL("vm.vmtotal", vmtotal_data))) {
319
+ if (unlikely(GETSYSCTL_BY_NAME("vm.vmtotal", vmtotal_data))) {
320
do_all_processes = 0;
321
error("DISABLED: system.active_processes");
322
do_processes = 0;
@@ -377,7 +381,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
381
do_cpu = 0;
382
error("DISABLED: system.cpu");
383
} else {
380
- if (unlikely(GETSYSCTL("kern.cp_time", cp_time))) {
384
+ if (unlikely(GETSYSCTL_BY_NAME("kern.cp_time", cp_time))) {
385
do_cpu = 0;
386
error("DISABLED: system.cpu");
387
} else {
@@ -413,12 +417,12 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
417
do_cpu_cores = 0;
418
error("DISABLED: cpu.cpuXX");
419
} else {
416
- if (unlikely(GETSYSCTL("kern.smp.cpus", ncpus))) {
420
+ if (unlikely(GETSYSCTL_BY_NAME("kern.smp.cpus", ncpus))) {
421
do_cpu_cores = 0;
422
error("DISABLED: cpu.cpuXX");
423
} else {
424
pcpu_cp_time = reallocz(pcpu_cp_time, sizeof(cp_time) * ncpus);
421
- if (unlikely(getsysctl("kern.cp_times", pcpu_cp_time, sizeof(cp_time) * ncpus))) {
425
+ if (unlikely(getsysctl_by_name("kern.cp_times", pcpu_cp_time, sizeof(cp_time) * ncpus))) {
426
do_cpu_cores = 0;
427
error("DISABLED: cpu.cpuXX");
428
} else {
@@ -460,7 +464,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
464
} else {
465
nintr = intrcnt_size / sizeof(u_long);
466
intrcnt = reallocz(intrcnt, nintr * sizeof(u_long));
463
- if (unlikely(getsysctl("hw.intrcnt", intrcnt, nintr * sizeof(u_long)))){
467
+ if (unlikely(getsysctl_by_name("hw.intrcnt", intrcnt, nintr * sizeof(u_long)))){
468
do_interrupts = 0;
469
error("DISABLED: system.intr");
470
} else {
@@ -483,7 +487,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
487
488
size = nintr * (MAXCOMLEN +1);
489
intrnames = reallocz(intrnames, size);
486
- if (unlikely(getsysctl("hw.intrnames", intrnames, size))) {
490
+ if (unlikely(getsysctl_by_name("hw.intrnames", intrnames, size))) {
491
do_interrupts = 0;
492
error("DISABLED: system.intr");
493
} else {
@@ -512,7 +516,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
516
// --------------------------------------------------------------------
517
518
if (likely(do_dev_intr)) {
515
- if (unlikely(GETSYSCTL("vm.stats.sys.v_intr", u_int_data))) {
519
+ if (unlikely(GETSYSCTL_BY_NAME("vm.stats.sys.v_intr", u_int_data))) {
520
do_dev_intr = 0;
521
error("DISABLED: system.dev_intr");
522
} else {
@@ -533,7 +537,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
537
// --------------------------------------------------------------------
538
539
if (likely(do_soft_intr)) {
536
- if (unlikely(GETSYSCTL("vm.stats.sys.v_soft", u_int_data))) {
540
+ if (unlikely(GETSYSCTL_BY_NAME("vm.stats.sys.v_soft", u_int_data))) {
541
do_soft_intr = 0;
542
error("DISABLED: system.dev_intr");
543
} else {
@@ -554,7 +558,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
558
// --------------------------------------------------------------------
559
560
if (likely(do_context)) {
557
- if (unlikely(GETSYSCTL("vm.stats.sys.v_swtch", u_int_data))) {
561
+ if (unlikely(GETSYSCTL_BY_NAME("vm.stats.sys.v_swtch", u_int_data))) {
562
do_context = 0;
563
error("DISABLED: system.ctxt");
564
} else {
@@ -575,7 +579,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
579
// --------------------------------------------------------------------
580
581
if (likely(do_forks)) {
578
- if (unlikely(GETSYSCTL("vm.stats.vm.v_forks", u_int_data))) {
582
+ if (unlikely(GETSYSCTL_BY_NAME("vm.stats.vm.v_forks", u_int_data))) {
583
do_forks = 0;
584
error("DISABLED: system.forks");
585
} else {
@@ -597,12 +601,13 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
601
// --------------------------------------------------------------------
602
603
if (likely(do_disk_io)) {
600
- if (unlikely(GETSYSCTL("kern.devstat.numdevs", numdevs))) {
604
+ if (unlikely(GETSYSCTL_BY_NAME("kern.devstat.numdevs", numdevs))) {
605
do_disk_io = 0;
606
error("DISABLED: disk.io");
607
} else {
608
devstat_data = reallocz(devstat_data, sizeof(long) + sizeof(struct devstat) * numdevs); // there is generation number before devstat structures
605
- if (unlikely(getsysctl("kern.devstat.all", devstat_data, sizeof(long) + sizeof(struct devstat) * numdevs))) {
609
+ if (unlikely(
610
+ getsysctl_by_name("kern.devstat.all", devstat_data, sizeof(long) + sizeof(struct devstat) * numdevs))) {
611
do_disk_io = 0;
612
error("DISABLED: disk.io");
613
} else {
@@ -822,14 +827,14 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
827
// --------------------------------------------------------------------
828
829
if (likely(do_ram)) {
825
- if (unlikely(GETSYSCTL("vm.stats.vm.v_active_count", vmmeter_data.v_active_count) ||
826
- GETSYSCTL("vm.stats.vm.v_inactive_count", vmmeter_data.v_inactive_count) ||
827
- GETSYSCTL("vm.stats.vm.v_wire_count", vmmeter_data.v_wire_count) ||
830
+ if (unlikely(GETSYSCTL_BY_NAME("vm.stats.vm.v_active_count", vmmeter_data.v_active_count) ||
831
+ GETSYSCTL_BY_NAME("vm.stats.vm.v_inactive_count", vmmeter_data.v_inactive_count) ||
832
+ GETSYSCTL_BY_NAME("vm.stats.vm.v_wire_count", vmmeter_data.v_wire_count) ||
833
#if __FreeBSD_version < 1200016
829
- GETSYSCTL("vm.stats.vm.v_cache_count", vmmeter_data.v_cache_count) ||
834
+ GETSYSCTL_BY_NAME("vm.stats.vm.v_cache_count", vmmeter_data.v_cache_count) ||
835
#endif
831
- GETSYSCTL("vfs.bufspace", vfs_bufspace_count) ||
832
- GETSYSCTL("vm.stats.vm.v_free_count", vmmeter_data.v_free_count))) {
836
+ GETSYSCTL_BY_NAME("vfs.bufspace", vfs_bufspace_count) ||
837
+ GETSYSCTL_BY_NAME("vm.stats.vm.v_free_count", vmmeter_data.v_free_count))) {
838
do_ram = 0;
839
error("DISABLED: system.ram");
840
} else {
@@ -863,7 +868,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
868
// --------------------------------------------------------------------
869
870
if (likely(do_swapio)) {
866
- if (unlikely(GETSYSCTL("vm.stats.vm.v_swappgsin", vmmeter_data.v_swappgsin) || GETSYSCTL("vm.stats.vm.v_swappgsout", vmmeter_data.v_swappgsout))) {
871
+ if (unlikely(GETSYSCTL_BY_NAME("vm.stats.vm.v_swappgsin", vmmeter_data.v_swappgsin) || GETSYSCTL_BY_NAME("vm.stats.vm.v_swappgsout", vmmeter_data.v_swappgsout))) {
872
do_swapio = 0;
873
error("DISABLED: system.swapio");
874
} else {
@@ -885,11 +890,11 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
890
// --------------------------------------------------------------------
891
892
if (likely(do_pgfaults)) {
888
- if (unlikely(GETSYSCTL("vm.stats.vm.v_vm_faults", vmmeter_data.v_vm_faults) ||
889
- GETSYSCTL("vm.stats.vm.v_io_faults", vmmeter_data.v_io_faults) ||
890
- GETSYSCTL("vm.stats.vm.v_cow_faults", vmmeter_data.v_cow_faults) ||
891
- GETSYSCTL("vm.stats.vm.v_cow_optim", vmmeter_data.v_cow_optim) ||
892
- GETSYSCTL("vm.stats.vm.v_intrans", vmmeter_data.v_intrans))) {
893
+ if (unlikely(GETSYSCTL_BY_NAME("vm.stats.vm.v_vm_faults", vmmeter_data.v_vm_faults) ||
894
+ GETSYSCTL_BY_NAME("vm.stats.vm.v_io_faults", vmmeter_data.v_io_faults) ||
895
+ GETSYSCTL_BY_NAME("vm.stats.vm.v_cow_faults", vmmeter_data.v_cow_faults) ||
896
+ GETSYSCTL_BY_NAME("vm.stats.vm.v_cow_optim", vmmeter_data.v_cow_optim) ||
897
+ GETSYSCTL_BY_NAME("vm.stats.vm.v_intrans", vmmeter_data.v_intrans))) {
898
do_pgfaults = 0;
899
error("DISABLED: mem.pgfaults");
900
} else {
@@ -918,13 +923,13 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
923
// --------------------------------------------------------------------
924
925
if (likely(do_ipc_semaphores)) {
921
- if (unlikely(GETSYSCTL("kern.ipc.semmni", ipc_sem.semmni))) {
926
+ if (unlikely(GETSYSCTL_BY_NAME("kern.ipc.semmni", ipc_sem.semmni))) {
927
do_ipc_semaphores = 0;
928
error("DISABLED: system.ipc_semaphores");
929
error("DISABLED: system.ipc_semaphore_arrays");
930
} else {
931
ipc_sem_data = reallocz(ipc_sem_data, sizeof(struct semid_kernel) * ipc_sem.semmni);
927
- if (unlikely(getsysctl("kern.ipc.sema", ipc_sem_data, sizeof(struct semid_kernel) * ipc_sem.semmni))) {
932
+ if (unlikely(getsysctl_by_name("kern.ipc.sema", ipc_sem_data, sizeof(struct semid_kernel) * ipc_sem.semmni))) {
933
do_ipc_semaphores = 0;
934
error("DISABLED: system.ipc_semaphores");
935
error("DISABLED: system.ipc_semaphore_arrays");
@@ -966,13 +971,14 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
971
// --------------------------------------------------------------------
972
973
if (likely(do_ipc_shared_mem)) {
969
- if (unlikely(GETSYSCTL("kern.ipc.shmmni", ipc_shm.shmmni))) {
974
+ if (unlikely(GETSYSCTL_BY_NAME("kern.ipc.shmmni", ipc_shm.shmmni))) {
975
do_ipc_shared_mem = 0;
976
error("DISABLED: system.ipc_shared_mem_segs");
977
error("DISABLED: system.ipc_shared_mem_size");
978
} else {
979
ipc_shm_data = reallocz(ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni);
975
- if (unlikely(getsysctl("kern.ipc.shmsegs", ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni))) {
980
+ if (unlikely(
981
+ getsysctl_by_name("kern.ipc.shmsegs", ipc_shm_data, sizeof(struct shmid_kernel) * ipc_shm.shmmni))) {
982
do_ipc_shared_mem = 0;
983
error("DISABLED: system.ipc_shared_mem_segs");
984
error("DISABLED: system.ipc_shared_mem_size");
@@ -1014,14 +1020,15 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1020
// --------------------------------------------------------------------
1021
1022
if (likely(do_ipc_msg_queues)) {
1017
- if (unlikely(GETSYSCTL("kern.ipc.msgmni", ipc_msq.msgmni))) {
1023
+ if (unlikely(GETSYSCTL_BY_NAME("kern.ipc.msgmni", ipc_msq.msgmni))) {
1024
do_ipc_msg_queues = 0;
1025
error("DISABLED: system.ipc_msq_queues");
1026
error("DISABLED: system.ipc_msq_messages");
1027
error("DISABLED: system.ipc_msq_size");
1028
} else {
1029
ipc_msq_data = reallocz(ipc_msq_data, sizeof(struct msqid_kernel) * ipc_msq.msgmni);
1024
- if (unlikely(getsysctl("kern.ipc.msqids", ipc_msq_data, sizeof(struct msqid_kernel) * ipc_msq.msgmni))) {
1030
+ if (unlikely(
1031
+ getsysctl_by_name("kern.ipc.msqids", ipc_msq_data, sizeof(struct msqid_kernel) * ipc_msq.msgmni))) {
1032
do_ipc_msg_queues = 0;
1033
error("DISABLED: system.ipc_msq_queues");
1034
error("DISABLED: system.ipc_msq_messages");
@@ -1081,7 +1088,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1088
// --------------------------------------------------------------------
1089
1090
if (likely(do_netisr || do_netisr_per_core)) {
1084
- if (unlikely(GETSYSCTL("kern.smp.cpus", ncpus))) {
1091
+ if (unlikely(GETSYSCTL_BY_NAME("kern.smp.cpus", ncpus))) {
1092
common_error = 1;
1093
} else if (unlikely(sysctlbyname("net.isr.workstream", NULL, &netisr_workstream_size, NULL, 0) == -1)) {
1094
error("FREEBSD: sysctl(net.isr.workstream...) failed: %s", strerror(errno));
@@ -1092,12 +1099,14 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1099
} else {
1100
num_netisr_workstreams = netisr_workstream_size / sizeof(struct sysctl_netisr_workstream);
1101
netisr_workstream = reallocz(netisr_workstream, num_netisr_workstreams * sizeof(struct sysctl_netisr_workstream));
1095
- if (unlikely(getsysctl("net.isr.workstream", netisr_workstream, num_netisr_workstreams * sizeof(struct sysctl_netisr_workstream)))){
1102
+ if (unlikely(getsysctl_by_name("net.isr.workstream", netisr_workstream,
1103
+ num_netisr_workstreams * sizeof(struct sysctl_netisr_workstream)))){
1104
common_error = 1;
1105
} else {
1106
num_netisr_works = netisr_work_size / sizeof(struct sysctl_netisr_work);
1107
netisr_work = reallocz(netisr_work, num_netisr_works * sizeof(struct sysctl_netisr_work));
1100
- if (unlikely(getsysctl("net.isr.work", netisr_work, num_netisr_works * sizeof(struct sysctl_netisr_work)))){
1108
+ if (unlikely(getsysctl_by_name("net.isr.work", netisr_work,
1109
+ num_netisr_works * sizeof(struct sysctl_netisr_work)))){
1110
common_error = 1;
1111
}
1112
}
@@ -1326,7 +1335,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1335
1336
// see http://net-snmp.sourceforge.net/docs/mibs/tcp.html
1337
if (likely(do_tcp_sockets)) {
1329
- if (unlikely(GETSYSCTL("net.inet.tcp.states", tcps_states))) {
1338
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.tcp.states", tcps_states))) {
1339
do_tcp_sockets = 0;
1340
error("DISABLED: ipv4.tcpsock");
1341
} else {
@@ -1350,7 +1359,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1359
1360
// see http://net-snmp.sourceforge.net/docs/mibs/tcp.html
1361
if (likely(do_tcp_packets || do_tcp_errors || do_tcp_handshake || do_tcpext_connaborts || do_tcpext_ofo || do_tcpext_syscookies || do_ecn)) {
1353
- if (unlikely(GETSYSCTL("net.inet.tcp.stats", tcpstat))){
1362
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.tcp.stats", tcpstat))){
1363
do_tcp_packets = 0;
1364
error("DISABLED: ipv4.tcppackets");
1365
do_tcp_errors = 0;
@@ -1524,7 +1533,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1533
1534
// see http://net-snmp.sourceforge.net/docs/mibs/udp.html
1535
if (likely(do_udp_packets || do_udp_errors)) {
1527
- if (unlikely(GETSYSCTL("net.inet.udp.stats", udpstat))) {
1536
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.udp.stats", udpstat))) {
1537
do_udp_packets = 0;
1538
error("DISABLED: ipv4.udppackets");
1539
do_udp_errors = 0;
@@ -1576,7 +1585,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1585
// --------------------------------------------------------------------
1586
1587
if (likely(do_icmp_packets || do_icmpmsg)) {
1579
- if (unlikely(GETSYSCTL("net.inet.icmp.stats", icmpstat))) {
1588
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.icmp.stats", icmpstat))) {
1589
do_icmp_packets = 0;
1590
error("DISABLED: ipv4.icmp");
1591
error("DISABLED: ipv4.icmp_errors");
@@ -1658,7 +1667,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1667
1668
// see also http://net-snmp.sourceforge.net/docs/mibs/ip.html
1669
if (likely(do_ip_packets || do_ip_fragsout || do_ip_fragsin || do_ip_errors)) {
1661
- if (unlikely(GETSYSCTL("net.inet.ip.stats", ipstat))) {
1670
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.ip.stats", ipstat))) {
1671
do_ip_packets = 0;
1672
error("DISABLED: ipv4.packets");
1673
do_ip_fragsout = 0;
@@ -1766,7 +1775,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1775
// --------------------------------------------------------------------
1776
1777
if (likely(do_ip6_packets || do_ip6_fragsout || do_ip6_fragsin || do_ip6_errors)) {
1769
- if (unlikely(GETSYSCTL("net.inet6.ip6.stats", ip6stat))) {
1778
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet6.ip6.stats", ip6stat))) {
1779
do_ip6_packets = 0;
1780
error("DISABLED: ipv6.packets");
1781
do_ip6_fragsout = 0;
@@ -1898,7 +1907,7 @@ int do_freebsd_sysctl_old(int update_every, usec_t dt) {
1907
// --------------------------------------------------------------------
1908
1909
if (likely(do_icmp6 || do_icmp6_redir || do_icmp6_errors || do_icmp6_echos || do_icmp6_router || do_icmp6_neighbor || do_icmp6_types)) {
1901
- if (unlikely(GETSYSCTL("net.inet6.icmp6.stats", icmp6stat))) {
1910
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet6.icmp6.stats", icmp6stat))) {
1911
do_icmp6 = 0;
1912
error("DISABLED: ipv6.icmp");
1913
} else {
src/macos_sysctl.c
+10
-10
@@ -210,7 +210,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
210
211
if (next_loadavg_dt <= dt) {
212
if (likely(do_loadavg)) {
213
- if (unlikely(GETSYSCTL("vm.loadavg", sysload))) {
213
+ if (unlikely(GETSYSCTL_BY_NAME("vm.loadavg", sysload))) {
214
do_loadavg = 0;
215
error("DISABLED: system.load");
216
} else {
@@ -240,7 +240,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
240
// --------------------------------------------------------------------
241
242
if (likely(do_swap)) {
243
- if (unlikely(GETSYSCTL("vm.swapusage", swap_usage))) {
243
+ if (unlikely(GETSYSCTL_BY_NAME("vm.swapusage", swap_usage))) {
244
do_swap = 0;
245
error("DISABLED: system.swap");
246
} else {
@@ -315,7 +315,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
315
316
// see http://net-snmp.sourceforge.net/docs/mibs/tcp.html
317
if (likely(do_tcp_packets || do_tcp_errors || do_tcp_handshake || do_tcpext_connaborts || do_tcpext_ofo || do_tcpext_syscookies || do_ecn)) {
318
- if (unlikely(GETSYSCTL("net.inet.tcp.stats", tcpstat))){
318
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.tcp.stats", tcpstat))){
319
do_tcp_packets = 0;
320
error("DISABLED: ipv4.tcppackets");
321
do_tcp_errors = 0;
@@ -480,7 +480,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
480
481
// see http://net-snmp.sourceforge.net/docs/mibs/udp.html
482
if (likely(do_udp_packets || do_udp_errors)) {
483
- if (unlikely(GETSYSCTL("net.inet.udp.stats", udpstat))) {
483
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.udp.stats", udpstat))) {
484
do_udp_packets = 0;
485
error("DISABLED: ipv4.udppackets");
486
do_udp_errors = 0;
@@ -532,7 +532,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
532
// --------------------------------------------------------------------
533
534
if (likely(do_icmp_packets || do_icmpmsg)) {
535
- if (unlikely(GETSYSCTL("net.inet.icmp.stats", icmpstat))) {
535
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.icmp.stats", icmpstat))) {
536
do_icmp_packets = 0;
537
error("DISABLED: ipv4.icmp");
538
error("DISABLED: ipv4.icmp_errors");
@@ -612,7 +612,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
612
613
// see also http://net-snmp.sourceforge.net/docs/mibs/ip.html
614
if (likely(do_ip_packets || do_ip_fragsout || do_ip_fragsin || do_ip_errors)) {
615
- if (unlikely(GETSYSCTL("net.inet.ip.stats", ipstat))) {
615
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet.ip.stats", ipstat))) {
616
do_ip_packets = 0;
617
error("DISABLED: ipv4.packets");
618
do_ip_fragsout = 0;
@@ -718,7 +718,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
718
// --------------------------------------------------------------------
719
720
if (likely(do_ip6_packets || do_ip6_fragsout || do_ip6_fragsin || do_ip6_errors)) {
721
- if (unlikely(GETSYSCTL("net.inet6.ip6.stats", ip6stat))) {
721
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet6.ip6.stats", ip6stat))) {
722
do_ip6_packets = 0;
723
error("DISABLED: ipv6.packets");
724
do_ip6_fragsout = 0;
@@ -850,7 +850,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
850
// --------------------------------------------------------------------
851
852
if (likely(do_icmp6 || do_icmp6_redir || do_icmp6_errors || do_icmp6_echos || do_icmp6_router || do_icmp6_neighbor || do_icmp6_types)) {
853
- if (unlikely(GETSYSCTL("net.inet6.icmp6.stats", icmp6stat))) {
853
+ if (unlikely(GETSYSCTL_BY_NAME("net.inet6.icmp6.stats", icmp6stat))) {
854
do_icmp6 = 0;
855
error("DISABLED: ipv6.icmp");
856
} else {
@@ -1073,7 +1073,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
1073
// --------------------------------------------------------------------
1074
1075
if (likely(do_uptime)) {
1076
- if (unlikely(GETSYSCTL("kern.boottime", boot_time))) {
1076
+ if (unlikely(GETSYSCTL_BY_NAME("kern.boottime", boot_time))) {
1077
do_uptime = 0;
1078
error("DISABLED: system.uptime");
1079
} else {
@@ -1095,7 +1095,7 @@ int do_macos_sysctl(int update_every, usec_t dt) {
1095
return 0;
1096
}
1097
1098
-int getsysctl(const char *name, void *ptr, size_t len)
1098
+int getsysctl_by_name(const char *name, void *ptr, size_t len)
1099
{
1100
size_t nlen = len;
1101
src/plugin_freebsd.c
+4
-4
@@ -13,13 +13,13 @@ static struct freebsd_module {
13
14
} freebsd_modules[] = {
15
16
- { .name = "freebsd_old", .dim = "freebsd_old", .func = do_freebsd_sysctl_old },
16
+ { .name = "freebsd_old", .dim = "freebsd_old", .enabled = 1, .func = do_freebsd_sysctl_old },
17
18
// system metrics
19
- { .name = "vm.loadavg", .dim = "loadavg", .func = do_vm_loadavg },
19
+ { .name = "load average", .dim = "loadavg", .enabled = 1, .func = do_vm_loadavg },
20
21
// the terminator of this array
22
- { .name = NULL, .dim = NULL, .func = NULL }
22
+ { .name = NULL, .dim = NULL, .enabled = 0, .func = NULL }
23
};
24
25
void *freebsd_main(void *ptr) {
@@ -44,7 +44,7 @@ void *freebsd_main(void *ptr) {
44
for(i = 0 ; freebsd_modules[i].name ;i++) {
45
struct freebsd_module *pm = &freebsd_modules[i];
46
47
- pm->enabled = config_get_boolean("plugin:freebsd", pm->name, 1);
47
+ pm->enabled = config_get_boolean("plugin:freebsd", pm->name, pm->enabled);
48
pm->duration = 0ULL;
49
pm->rd = NULL;
50
}
src/plugin_freebsd.h
+64
-2
@@ -10,9 +10,71 @@ extern int freebsd_plugin_init();
10
extern int do_vm_loadavg(int update_every, usec_t dt);
11
extern int do_freebsd_sysctl_old(int update_every, usec_t dt);
12
13
-#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var))
13
+#define GETSYSCTL_MIB(name, mib) getsysctl_mib(name, mib, sizeof(mib)/sizeof(int))
14
15
-static inline int getsysctl(const char *name, void *ptr, size_t len)
15
+static inline int getsysctl_mib(const char *name, int *mib, size_t len)
16
+{
17
+ size_t nlen = len;
18
+
19
+ if (unlikely(sysctlnametomib(name, mib, &nlen) == -1)) {
20
+ error("FREEBSD: sysctl(%s...) failed: %s", name, strerror(errno));
21
+ return 1;
22
+ }
23
+ if (unlikely(nlen != len)) {
24
+ error("FREEBSD: sysctl(%s...) expected %lu, got %lu", name, (unsigned long)len, (unsigned long)nlen);
25
+ return 1;
26
+ }
27
+ return 0;
28
+}
29
+
30
+#define GETSYSCTL_SIMPLE(name, mib, var) getsysctl_simple(name, mib, sizeof(mib)/sizeof(int), &(var), sizeof(var))
31
+
32
+static inline int getsysctl_simple(const char *name, int *mib, size_t miblen, void *ptr, size_t len)
33
+{
34
+ size_t nlen = len;
35
+
36
+ if (unlikely(!mib[0]))
37
+ if (unlikely(getsysctl_mib(name, mib, miblen)))
38
+ return 1;
39
+
40
+ if (unlikely(sysctl(mib, miblen, ptr, &nlen, NULL, 0) == -1)) {
41
+ error("FREEBSD: sysctl(%s...) failed: %s", name, strerror(errno));
42
+ return 1;
43
+ }
44
+ if (unlikely(nlen != len)) {
45
+ error("FREEBSD: sysctl(%s...) expected %lu, got %lu", name, (unsigned long)len, (unsigned long)nlen);
46
+ return 1;
47
+ }
48
+
49
+ return 0;
50
+}
51
+
52
+#define GETSYSCTL_SIZE(name, mib, size) getsysctl(name, mib, sizeof(mib)/sizeof(int), NULL, &(size))
53
+#define GETSYSCTL(name, mib, var, size) getsysctl(name, mib, sizeof(mib)/sizeof(int), &(var), &(size))
54
+
55
+static inline int getsysctl(const char *name, int *mib, size_t miblen, void *ptr, size_t *len)
56
+{
57
+ size_t nlen = *len;
58
+
59
+ if (unlikely(!mib[0]))
60
+ if (unlikely(getsysctl_mib(name, mib, miblen)))
61
+ return 1;
62
+
63
+ if (unlikely(sysctl(mib, miblen, ptr, len, NULL, 0) == -1)) {
64
+ error("FREEBSD: sysctl(%s...) failed: %s", name, strerror(errno));
65
+ return 1;
66
+ }
67
+ if (unlikely(nlen != *len)) {
68
+ error("FREEBSD: sysctl(%s...) expected %lu, got %lu", name, (unsigned long)*len, (unsigned long)nlen);
69
+ return 1;
70
+ }
71
+
72
+ return 0;
73
+}
74
+
75
+#define GETSYSCTL_BY_NAME(name, var) getsysctl_by_name(name, &(var), sizeof(var))
76
+
77
+static inline int getsysctl_by_name(const char *name, void *ptr, size_t len)
78
{
79
size_t nlen = len;
80
src/plugin_macos.h
+2
-2
@@ -3,9 +3,9 @@
3
4
void *macos_main(void *ptr);
5
6
-#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var))
6
+#define GETSYSCTL_BY_NAME(name, var) getsysctl(name, &(var), sizeof(var))
7
8
-extern int getsysctl(const char *name, void *ptr, size_t len);
8
+extern int getsysctl_by_name(const char *name, void *ptr, size_t len);
9
10
extern int do_macos_sysctl(int update_every, usec_t dt);
11
extern int do_macos_mach_smi(int update_every, usec_t dt);