]> arthur.barton.de Git - netdata.git/blob - src/plugin_macos.c
Merge pull request #1462 from vlvkobal/master
[netdata.git] / src / plugin_macos.c
1 #include "common.h"
2
3 void *macos_main(void *ptr)
4 {
5     (void)ptr;
6
7     info("MACOS Plugin thread created with task id %d", gettid());
8
9     if(pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL) != 0)
10         error("Cannot set pthread cancel type to DEFERRED.");
11
12     if(pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL) != 0)
13         error("Cannot set pthread cancel state to ENABLE.");
14
15     // disable (by default) various interface that are not needed
16     /*
17     config_get_boolean("plugin:proc:/proc/net/dev:lo", "enabled", 0);
18     config_get_boolean("plugin:proc:/proc/net/dev:fireqos_monitor", "enabled", 0);
19     */
20
21     // when ZERO, attempt to do it
22     int vdo_cpu_netdata             = !config_get_boolean("plugin:macos", "netdata server resources", 1);
23     int vdo_macos_sysctl            = !config_get_boolean("plugin:macos", "sysctl", 1);
24     int vdo_macos_mach_smi          = !config_get_boolean("plugin:macos", "mach system management interface", 1);
25     int vdo_macos_iokit             = !config_get_boolean("plugin:macos", "iokit", 1);
26
27     // keep track of the time each module was called
28     unsigned long long sutime_macos_sysctl = 0ULL;
29     unsigned long long sutime_macos_mach_smi = 0ULL;
30     unsigned long long sutime_macos_iokit = 0ULL;
31
32     usec_t step = rrd_update_every * USEC_PER_SEC;
33     for(;;) {
34         usec_t now = now_realtime_usec();
35         usec_t next = now - (now % step) + step;
36
37         while(now < next) {
38             sleep_usec(next - now);
39             now = now_realtime_usec();
40         }
41
42         if(unlikely(netdata_exit)) break;
43
44         // BEGIN -- the job to be done
45
46         if(!vdo_macos_sysctl) {
47             debug(D_PROCNETDEV_LOOP, "MACOS: calling do_macos_sysctl().");
48             now = now_realtime_usec();
49             vdo_macos_sysctl = do_macos_sysctl(rrd_update_every, (sutime_macos_sysctl > 0)?now - sutime_macos_sysctl:0ULL);
50             sutime_macos_sysctl = now;
51         }
52         if(unlikely(netdata_exit)) break;
53
54         if(!vdo_macos_mach_smi) {
55             debug(D_PROCNETDEV_LOOP, "MACOS: calling do_macos_mach_smi().");
56             now = now_realtime_usec();
57             vdo_macos_mach_smi = do_macos_mach_smi(rrd_update_every, (sutime_macos_mach_smi > 0)?now - sutime_macos_mach_smi:0ULL);
58             sutime_macos_mach_smi = now;
59         }
60         if(unlikely(netdata_exit)) break;
61
62         if(!vdo_macos_iokit) {
63             debug(D_PROCNETDEV_LOOP, "MACOS: calling do_macos_iokit().");
64             now = now_realtime_usec();
65             vdo_macos_iokit = do_macos_iokit(rrd_update_every, (sutime_macos_iokit > 0)?now - sutime_macos_iokit:0ULL);
66             sutime_macos_iokit = now;
67         }
68         if(unlikely(netdata_exit)) break;
69
70         // END -- the job is done
71
72         // --------------------------------------------------------------------
73
74         if(!vdo_cpu_netdata) {
75             global_statistics_charts();
76             registry_statistics();
77         }
78     }
79
80     info("MACOS thread exiting");
81
82     pthread_exit(NULL);
83     return NULL;
84 }