@cryptotaxi247 / netdata-1 / commits / 87e52f54b

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);