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