]> arthur.barton.de Git - netdata.git/blob - src/plugin_macos.c
2f3a9cf453ab195eb343fee8eab314bddc05d758
[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
26     // keep track of the time each module was called
27     unsigned long long sutime_macos_sysctl = 0ULL;
28     unsigned long long sutime_macos_mach_smi = 0ULL;
29
30     usec_t step = rrd_update_every * USEC_PER_SEC;
31     for(;;) {
32         usec_t now = now_realtime_usec();
33         usec_t next = now - (now % step) + step;
34
35         while(now < next) {
36             sleep_usec(next - now);
37             now = now_realtime_usec();
38         }
39
40         if(unlikely(netdata_exit)) break;
41
42         // BEGIN -- the job to be done
43
44         if(!vdo_macos_sysctl) {
45             debug(D_PROCNETDEV_LOOP, "MACOS: calling do_macos_sysctl().");
46             now = now_realtime_usec();
47             vdo_macos_sysctl = do_macos_sysctl(rrd_update_every, (sutime_macos_sysctl > 0)?now - sutime_macos_sysctl:0ULL);
48             sutime_macos_sysctl = now;
49         }
50         if(unlikely(netdata_exit)) break;
51
52         if(!vdo_macos_mach_smi) {
53             debug(D_PROCNETDEV_LOOP, "MACOS: calling do_macos_mach_smi().");
54             now = now_realtime_usec();
55             vdo_macos_mach_smi = do_macos_mach_smi(rrd_update_every, (sutime_macos_mach_smi > 0)?now - sutime_macos_mach_smi:0ULL);
56             sutime_macos_mach_smi = now;
57         }
58         if(unlikely(netdata_exit)) break;
59
60         // END -- the job is done
61
62         // --------------------------------------------------------------------
63
64         if(!vdo_cpu_netdata) {
65             global_statistics_charts();
66             registry_statistics();
67         }
68     }
69
70     info("MACOS thread exiting");
71
72     pthread_exit(NULL);
73     return NULL;
74 }