master
c 67 lines 1.85 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "windows_plugin.h"
4 #include "windows-internals.h"
5
6 static RRDSET *st = NULL;
7 static RRDDIM *rd_user = NULL, *rd_kernel = NULL, *rd_idle = NULL;
8
9 void do_GetSystemCPU_cleanup(void)
10 {
11 if (rd_user)
12 rrddim_free(st, rd_user);
13 if (rd_kernel)
14 rrddim_free(st, rd_kernel);
15 if (rd_idle)
16 rrddim_free(st, rd_idle);
17 if (st)
18 rrdset_free(st);
19
20 rd_user = rd_kernel = rd_idle = NULL;
21 st = NULL;
22 }
23
24 int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused)
25 {
26 FILETIME idleTime, kernelTime, userTime;
27
28 if (GetSystemTimes(&idleTime, &kernelTime, &userTime) == 0) {
29 nd_log(NDLS_COLLECTORS, NDLP_ERR, "GetSystemTimes() failed.");
30 return 1;
31 }
32
33 ULONGLONG idle = FileTimeToULL(idleTime);
34 ULONGLONG kernel = FileTimeToULL(kernelTime);
35 ULONGLONG user = FileTimeToULL(userTime);
36
37 // kernel includes idle
38 kernel -= idle;
39
40 if (!st) {
41 st = rrdset_create_localhost(
42 "system",
43 "cpu",
44 NULL,
45 "cpu",
46 "system.cpu",
47 "Total CPU utilization",
48 "percentage",
49 PLUGIN_WINDOWS_NAME,
50 "GetSystemTimes",
51 NETDATA_CHART_PRIO_SYSTEM_CPU,
52 update_every,
53 RRDSET_TYPE_STACKED);
54
55 rd_user = rrddim_add(st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
56 rd_kernel = rrddim_add(st, "system", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
57 rd_idle = rrddim_add(st, "idle", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
58 rrddim_hide(st, "idle");
59 }
60
61 rrddim_set_by_pointer(st, rd_user, (collected_number)user);
62 rrddim_set_by_pointer(st, rd_kernel, (collected_number)kernel);
63 rrddim_set_by_pointer(st, rd_idle, (collected_number)idle);
64 rrdset_done(st);
65
66 return 0;
67 }