Format Windows.plugin (#19554)
* format_windows: Format GetSystemCPU.[c] * format_windows: Format GetSystemRAM.[c] * format_windows: Format GetSystemUptime.[c] * format_windows: Format perflib-hyperv.[c] * format_windows: Format perflib-memory.[c] * format_windows: Format perflib-mssql.[c] * format_windows: Format perflib-network.[c] * format_windows: Format perflib-objects.[c] * format_windows: Format perflib-processes.[c] * format_windows: Format perflib-processor.[c] * format_windows: Format perflib-rrd.[ch] * format_windows: Format perflib-storage.[ch] * format_windows: Format perflib-thermalzone.[ch] * format_windows: Format perflib-web-service.[c] * format_windows: Format windows-internals.[h]
thiagoftsm committed
Feb 2, 2025 at 12:15 UTC
768ad06d7e1cef93f0f16df0a67b7b216a9c2c52
16 files changed
+1101
-913
src/collectors/windows.plugin/GetSystemCPU.c
+19
-19
@@ -3,10 +3,11 @@
3
#include "windows_plugin.h"
4
#include "windows-internals.h"
5
6
-int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused) {
6
+int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused)
7
+{
8
FILETIME idleTime, kernelTime, userTime;
9
9
- if(GetSystemTimes(&idleTime, &kernelTime, &userTime) == 0) {
10
+ if (GetSystemTimes(&idleTime, &kernelTime, &userTime) == 0) {
11
netdata_log_error("GetSystemTimes() failed.");
12
return 1;
13
}
@@ -20,21 +21,20 @@ int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused) {
21
22
static RRDSET *st = NULL;
23
static RRDDIM *rd_user = NULL, *rd_kernel = NULL, *rd_idle = NULL;
23
- if(!st) {
24
+ if (!st) {
25
st = rrdset_create_localhost(
25
- "system"
26
- , "cpu"
27
- , NULL
28
- , "cpu"
29
- , "system.cpu"
30
- , "Total CPU utilization"
31
- , "percentage"
32
- , PLUGIN_WINDOWS_NAME
33
- , "GetSystemTimes"
34
- , NETDATA_CHART_PRIO_SYSTEM_CPU
35
- , update_every
36
- , RRDSET_TYPE_STACKED
37
- );
26
+ "system",
27
+ "cpu",
28
+ NULL,
29
+ "cpu",
30
+ "system.cpu",
31
+ "Total CPU utilization",
32
+ "percentage",
33
+ PLUGIN_WINDOWS_NAME,
34
+ "GetSystemTimes",
35
+ NETDATA_CHART_PRIO_SYSTEM_CPU,
36
+ update_every,
37
+ RRDSET_TYPE_STACKED);
38
39
rd_user = rrddim_add(st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
40
rd_kernel = rrddim_add(st, "system", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
@@ -42,9 +42,9 @@ int do_GetSystemCPU(int update_every, usec_t dt __maybe_unused) {
42
rrddim_hide(st, "idle");
43
}
44
45
- rrddim_set_by_pointer(st, rd_user, (collected_number )user);
46
- rrddim_set_by_pointer(st, rd_kernel, (collected_number )kernel);
47
- rrddim_set_by_pointer(st, rd_idle, (collected_number )idle);
45
+ rrddim_set_by_pointer(st, rd_user, (collected_number)user);
46
+ rrddim_set_by_pointer(st, rd_kernel, (collected_number)kernel);
47
+ rrddim_set_by_pointer(st, rd_idle, (collected_number)idle);
48
rrdset_done(st);
49
50
return 0;
src/collectors/windows.plugin/GetSystemRAM.c
+3
-2
@@ -7,8 +7,9 @@
7
#define _COMMON_PLUGIN_MODULE_NAME "GetSystemRam"
8
#include "../common-contexts/common-contexts.h"
9
10
-int do_GetSystemRAM(int update_every, usec_t dt __maybe_unused) {
11
- MEMORYSTATUSEX memStat = { 0 };
10
+int do_GetSystemRAM(int update_every, usec_t dt __maybe_unused)
11
+{
12
+ MEMORYSTATUSEX memStat = {0};
13
memStat.dwLength = sizeof(memStat);
14
15
if (!GlobalMemoryStatusEx(&memStat)) {
src/collectors/windows.plugin/GetSystemUptime.c
+14
-14
@@ -3,26 +3,26 @@
3
#include "windows_plugin.h"
4
#include "windows-internals.h"
5
6
-int do_GetSystemUptime(int update_every, usec_t dt __maybe_unused) {
6
+int do_GetSystemUptime(int update_every, usec_t dt __maybe_unused)
7
+{
8
ULONGLONG uptime = GetTickCount64(); // in milliseconds
9
10
static RRDSET *st = NULL;
11
static RRDDIM *rd_uptime = NULL;
12
if (!st) {
13
st = rrdset_create_localhost(
13
- "system"
14
- , "uptime"
15
- , NULL
16
- , "uptime"
17
- , "system.uptime"
18
- , "System Uptime"
19
- , "seconds"
20
- , PLUGIN_WINDOWS_NAME
21
- , "GetSystemUptime"
22
- , NETDATA_CHART_PRIO_SYSTEM_UPTIME
23
- , update_every
24
- , RRDSET_TYPE_LINE
25
- );
14
+ "system",
15
+ "uptime",
16
+ NULL,
17
+ "uptime",
18
+ "system.uptime",
19
+ "System Uptime",
20
+ "seconds",
21
+ PLUGIN_WINDOWS_NAME,
22
+ "GetSystemUptime",
23
+ NETDATA_CHART_PRIO_SYSTEM_UPTIME,
24
+ update_every,
25
+ RRDSET_TYPE_LINE);
26
27
rd_uptime = rrddim_add(st, "uptime", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
28
}
src/collectors/windows.plugin/perflib-hyperv.c
+153
-113
@@ -7,7 +7,7 @@
7
#define _COMMON_PLUGIN_MODULE_NAME "PerflibHyperV"
8
#include "../common-contexts/common-contexts.h"
9
10
-#define HYPERV "hyperv"
10
+#define HYPERV "hyperv"
11
12
static void get_and_sanitize_instance_value(
13
PERF_DATA_BLOCK *pDataBlock,
@@ -72,15 +72,16 @@ struct hypervisor_memory {
72
COUNTER_DATA GuestAvailableMemory;
73
};
74
75
-void initialize_hyperv_memory_keys(struct hypervisor_memory *p) {
75
+void initialize_hyperv_memory_keys(struct hypervisor_memory *p)
76
+{
77
p->CurrentPressure.key = "Current Pressure";
78
p->PhysicalMemory.key = "Physical Memory";
79
p->GuestVisiblePhysicalMemory.key = "Guest Visible Physical Memory";
80
p->GuestAvailableMemory.key = "Guest Available Memory";
81
}
82
82
-
83
-void dict_hyperv_memory_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
83
+void dict_hyperv_memory_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
84
+{
85
struct hypervisor_memory *p = value;
86
initialize_hyperv_memory_keys(p);
87
}
@@ -97,7 +98,6 @@ struct hypervisor_partition {
98
99
COUNTER_DATA PhysicalPagesAllocated;
100
COUNTER_DATA RemotePhysicalPages;
100
-
101
};
102
103
void initialize_hyperv_partition_keys(struct hypervisor_partition *p)
@@ -106,7 +106,8 @@ void initialize_hyperv_partition_keys(struct hypervisor_partition *p)
106
p->RemotePhysicalPages.key = "Remote Physical Pages";
107
}
108
109
-void dict_hyperv_partition_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
109
+void dict_hyperv_partition_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
110
+{
111
struct hypervisor_partition *p = value;
112
initialize_hyperv_partition_keys(p);
113
}
@@ -120,16 +121,17 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
121
return false;
122
123
PERF_INSTANCE_DEFINITION *pi = NULL;
123
- for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
124
+ for (LONG i = 0; i < pObjectType->NumInstances; i++) {
125
pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
126
if (!pi)
127
break;
128
128
- get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
129
+ get_and_sanitize_instance_value(
130
+ pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
131
132
struct hypervisor_memory *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
133
132
- if(!p->collected_metadata) {
134
+ if (!p->collected_metadata) {
135
p->collected_metadata = true;
136
}
137
@@ -140,13 +142,13 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
142
143
if (!p->charts_created) {
144
p->charts_created = true;
143
- if(!p->st_vm_memory_physical) {
145
+ if (!p->st_vm_memory_physical) {
146
p->st_vm_memory_physical = rrdset_create_localhost(
147
"vm_memory_physical",
148
windows_shared_buffer,
149
NULL,
150
HYPERV,
149
- HYPERV".vm_memory_physical",
151
+ HYPERV ".vm_memory_physical",
152
"VM assigned memory",
153
"bytes",
154
_COMMON_PLUGIN_NAME,
@@ -160,7 +162,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
162
windows_shared_buffer,
163
NULL,
164
HYPERV,
163
- HYPERV".vm_memory_physical_guest_visible",
165
+ HYPERV ".vm_memory_physical_guest_visible",
166
"VM guest visible memory",
167
"bytes",
168
_COMMON_PLUGIN_NAME,
@@ -174,7 +176,7 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
176
windows_shared_buffer,
177
NULL,
178
HYPERV,
177
- HYPERV".vm_memory_pressure_current",
179
+ HYPERV ".vm_memory_pressure_current",
180
"VM Memory Pressure",
181
"percentage",
182
_COMMON_PLUGIN_NAME,
@@ -184,13 +186,20 @@ static bool do_hyperv_memory(PERF_DATA_BLOCK *pDataBlock, int update_every, void
186
RRDSET_TYPE_LINE);
187
188
p->rd_CurrentPressure = rrddim_add(p->st_pressure, "pressure", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
187
- p->rd_PhysicalMemory = rrddim_add(p->st_vm_memory_physical, "assigned", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
188
- p->rd_GuestVisiblePhysicalMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "visible", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
189
- p->rd_GuestAvailableMemory = rrddim_add(p->st_vm_memory_physical_guest_visible, "available", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
189
+ p->rd_PhysicalMemory =
190
+ rrddim_add(p->st_vm_memory_physical, "assigned", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
191
+ p->rd_GuestVisiblePhysicalMemory = rrddim_add(
192
+ p->st_vm_memory_physical_guest_visible, "visible", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
193
+ p->rd_GuestAvailableMemory = rrddim_add(
194
+ p->st_vm_memory_physical_guest_visible, "available", NULL, 1024 * 1024, 1, RRD_ALGORITHM_ABSOLUTE);
195
196
rrdlabels_add(p->st_vm_memory_physical->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
197
rrdlabels_add(p->st_pressure->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
193
- rrdlabels_add(p->st_vm_memory_physical_guest_visible->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
198
+ rrdlabels_add(
199
+ p->st_vm_memory_physical_guest_visible->rrdlabels,
200
+ "vm_name",
201
+ windows_shared_buffer,
202
+ RRDLABEL_SRC_AUTO);
203
}
204
}
205
@@ -215,21 +224,21 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
224
return false;
225
226
PERF_INSTANCE_DEFINITION *pi = NULL;
218
- for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
227
+ for (LONG i = 0; i < pObjectType->NumInstances; i++) {
228
pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
229
if (!pi)
230
break;
231
223
- get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
232
+ get_and_sanitize_instance_value(
233
+ pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
234
235
struct hypervisor_partition *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
236
227
- if(!p->collected_metadata) {
228
-
237
+ if (!p->collected_metadata) {
238
p->collected_metadata = true;
239
}
240
232
- if(strcasecmp(windows_shared_buffer, "_Total") == 0)
241
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0)
242
continue;
243
244
GET_INSTANCE_COUNTER(RemotePhysicalPages);
@@ -266,11 +275,15 @@ static bool do_hyperv_vid_partition(PERF_DATA_BLOCK *pDataBlock, int update_ever
275
update_every,
276
RRDSET_TYPE_LINE);
277
269
- p->rd_PhysicalPagesAllocated = rrddim_add(p->st_vm_vid_physical_pages_allocated, "allocated", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
270
- p->rd_RemotePhysicalPages = rrddim_add(p->st_vm_vid_remote_physical_pages, "remote_physical", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
278
+ p->rd_PhysicalPagesAllocated =
279
+ rrddim_add(p->st_vm_vid_physical_pages_allocated, "allocated", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
280
+ p->rd_RemotePhysicalPages =
281
+ rrddim_add(p->st_vm_vid_remote_physical_pages, "remote_physical", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
282
272
- rrdlabels_add(p->st_vm_vid_physical_pages_allocated->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
273
- rrdlabels_add(p->st_vm_vid_remote_physical_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
283
+ rrdlabels_add(
284
+ p->st_vm_vid_physical_pages_allocated->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
285
+ rrdlabels_add(
286
+ p->st_vm_vid_remote_physical_pages->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
287
}
288
289
SETP_DIM_VALUE(st_vm_vid_remote_physical_pages, RemotePhysicalPages);
@@ -399,7 +412,8 @@ struct hypervisor_root_partition {
412
};
413
414
// Initialize the keys for the root partition metrics
402
-void initialize_hyperv_root_partition_keys(struct hypervisor_root_partition *p) {
415
+void initialize_hyperv_root_partition_keys(struct hypervisor_root_partition *p)
416
+{
417
p->DeviceSpacePages4K.key = "4K device pages";
418
p->DeviceSpacePages2M.key = "2M device pages";
419
p->DeviceSpacePages1G.key = "1G device pages";
@@ -422,7 +436,11 @@ void initialize_hyperv_root_partition_keys(struct hypervisor_root_partition *p)
436
}
437
438
// Callback function for inserting root partition metrics into the dictionary
425
-void dict_hyperv_root_partition_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
439
+void dict_hyperv_root_partition_insert_cb(
440
+ const DICTIONARY_ITEM *item __maybe_unused,
441
+ void *value,
442
+ void *data __maybe_unused)
443
+{
444
struct hypervisor_root_partition *p = value;
445
initialize_hyperv_root_partition_keys(p);
446
}
@@ -442,9 +460,10 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
460
if (!pi)
461
break;
462
445
- get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
463
+ get_and_sanitize_instance_value(
464
+ pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
465
447
- if(strcasecmp(windows_shared_buffer, "_Total") == 0)
466
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0)
467
continue;
468
469
struct hypervisor_root_partition *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
@@ -472,7 +491,6 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
491
GET_INSTANCE_COUNTER(VirtualTLBPages);
492
GET_INSTANCE_COUNTER(VirtualTLBFlushEntiresSec);
493
475
-
494
// Create charts
495
if (!p->charts_created) {
496
p->charts_created = true;
@@ -680,9 +698,9 @@ static bool do_hyperv_root_partition(PERF_DATA_BLOCK *pDataBlock, int update_eve
698
699
// Set the data for each dimension
700
683
- SETP_DIM_VALUE(st_device_space_pages,DeviceSpacePages4K);
684
- SETP_DIM_VALUE(st_device_space_pages,DeviceSpacePages2M);
685
- SETP_DIM_VALUE(st_device_space_pages,DeviceSpacePages1G);
701
+ SETP_DIM_VALUE(st_device_space_pages, DeviceSpacePages4K);
702
+ SETP_DIM_VALUE(st_device_space_pages, DeviceSpacePages2M);
703
+ SETP_DIM_VALUE(st_device_space_pages, DeviceSpacePages1G);
704
705
SETP_DIM_VALUE(st_gpa_space_pages, GPASpacePages4K);
706
SETP_DIM_VALUE(st_gpa_space_pages, GPASpacePages2M);
@@ -744,9 +762,9 @@ struct hypervisor_storage_device {
762
COUNTER_DATA ErrorCount;
763
};
764
747
-
765
// Initialize the keys for the root partition metrics
749
-void initialize_hyperv_storage_device_keys(struct hypervisor_storage_device *p) {
766
+void initialize_hyperv_storage_device_keys(struct hypervisor_storage_device *p)
767
+{
768
p->ReadOperationsSec.key = "Read Operations/Sec";
769
p->WriteOperationsSec.key = "Write Operations/Sec";
770
@@ -756,7 +774,11 @@ void initialize_hyperv_storage_device_keys(struct hypervisor_storage_device *p)
774
}
775
776
// Callback function for inserting root partition metrics into the dictionary
759
-void dict_hyperv_storage_device_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
777
+void dict_hyperv_storage_device_insert_cb(
778
+ const DICTIONARY_ITEM *item __maybe_unused,
779
+ void *value,
780
+ void *data __maybe_unused)
781
+{
782
struct hypervisor_storage_device *p = value;
783
initialize_hyperv_storage_device_keys(p);
784
}
@@ -769,16 +791,16 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
791
if (!pObjectType)
792
return false;
793
772
-
794
PERF_INSTANCE_DEFINITION *pi = NULL;
795
for (LONG i = 0; i < pObjectType->NumInstances; i++) {
796
pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
797
if (!pi)
798
break;
799
779
- get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
800
+ get_and_sanitize_instance_value(
801
+ pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
802
781
- if(strcasecmp(windows_shared_buffer, "_Total") == 0)
803
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0)
804
continue;
805
806
struct hypervisor_storage_device *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
@@ -796,14 +818,14 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
818
GET_INSTANCE_COUNTER(ErrorCount);
819
820
if (!p->charts_created) {
799
- p->charts_created = true;
821
+ p->charts_created = true;
822
if (!p->st_operations) {
823
p->st_operations = rrdset_create_localhost(
824
"vm_storage_device_operations",
825
windows_shared_buffer,
826
NULL,
827
HYPERV,
806
- HYPERV".vm_storage_device_operations",
828
+ HYPERV ".vm_storage_device_operations",
829
"VM storage device IOPS",
830
"operations/s",
831
_COMMON_PLUGIN_NAME,
@@ -813,9 +835,11 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
835
RRDSET_TYPE_LINE);
836
837
p->rd_ReadOperationsSec = rrddim_add(p->st_operations, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
816
- p->rd_WriteOperationsSec = rrddim_add(p->st_operations, "write", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
838
+ p->rd_WriteOperationsSec =
839
+ rrddim_add(p->st_operations, "write", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
840
818
- rrdlabels_add(p->st_operations->rrdlabels, "vm_storage_device", windows_shared_buffer, RRDLABEL_SRC_AUTO);
841
+ rrdlabels_add(
842
+ p->st_operations->rrdlabels, "vm_storage_device", windows_shared_buffer, RRDLABEL_SRC_AUTO);
843
}
844
845
if (!p->st_bytes) {
@@ -824,7 +848,7 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
848
windows_shared_buffer,
849
NULL,
850
HYPERV,
827
- HYPERV".vm_storage_device_bytes",
851
+ HYPERV ".vm_storage_device_bytes",
852
"VM storage device IO",
853
"bytes/s",
854
_COMMON_PLUGIN_NAME,
@@ -845,7 +869,7 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
869
windows_shared_buffer,
870
NULL,
871
HYPERV,
848
- HYPERV".vm_storage_device_errors",
872
+ HYPERV ".vm_storage_device_errors",
873
"VM storage device errors",
874
"errors/s",
875
_COMMON_PLUGIN_NAME,
@@ -860,13 +884,13 @@ static bool do_hyperv_storage_device(PERF_DATA_BLOCK *pDataBlock, int update_eve
884
}
885
}
886
863
- SETP_DIM_VALUE(st_operations,ReadOperationsSec);
864
- SETP_DIM_VALUE(st_operations,WriteOperationsSec);
887
+ SETP_DIM_VALUE(st_operations, ReadOperationsSec);
888
+ SETP_DIM_VALUE(st_operations, WriteOperationsSec);
889
866
- SETP_DIM_VALUE(st_bytes,ReadBytesSec);
867
- SETP_DIM_VALUE(st_bytes,WriteBytesSec);
890
+ SETP_DIM_VALUE(st_bytes, ReadBytesSec);
891
+ SETP_DIM_VALUE(st_bytes, WriteBytesSec);
892
869
- SETP_DIM_VALUE(st_errors,ErrorCount);
893
+ SETP_DIM_VALUE(st_errors, ErrorCount);
894
895
// Mark the charts as done
896
rrdset_done(p->st_operations);
@@ -992,7 +1016,7 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1016
get_and_sanitize_instance_value(
1017
pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1018
995
- if(strcasecmp(windows_shared_buffer, "_Total") == 0)
1019
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0)
1020
continue;
1021
1022
struct hypervisor_switch *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
@@ -1029,7 +1053,7 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1053
GET_INSTANCE_COUNTER(PurgedMacAddresses);
1054
1055
if (!p->charts_created) {
1032
- p->charts_created = true;
1056
+ p->charts_created = true;
1057
1058
p->st_bytes = rrdset_create_localhost(
1059
"vswitch_traffic",
@@ -1256,7 +1280,6 @@ static bool do_hyperv_switch(PERF_DATA_BLOCK *pDataBlock, int update_every, void
1280
rrdset_done(p->st_flooded);
1281
rrdset_done(p->st_learned_mac);
1282
rrdset_done(p->st_purged_mac);
1259
-
1283
}
1284
return true;
1285
}
@@ -1328,16 +1351,19 @@ void initialize_hyperv_network_adapter_keys(struct hypervisor_network_adapter *p
1351
p->BytesReceivedSec.key = "Bytes Received/sec";
1352
1353
p->IPsecoffloadBytesReceivedSec.key = "IPsec offload Bytes Receive/sec";
1331
- p->IPsecoffloadBytesSentSec.key = "IPsec offload Bytes Sent/sec";
1332
- p->DirectedPacketsSentSec.key = "Directed Packets Sent/sec";
1333
- p->DirectedPacketsReceivedSec.key = "Directed Packets Received/sec";
1334
- p->BroadcastPacketsSentSec.key = "Broadcast Packets Sent/sec";
1335
- p->BroadcastPacketsReceivedSec.key = "Broadcast Packets Received/sec";
1336
- p->MulticastPacketsSentSec.key = "Multicast Packets Sent/sec";
1337
- p->MulticastPacketsReceivedSec.key = "Multicast Packets Received/sec";
1354
+ p->IPsecoffloadBytesSentSec.key = "IPsec offload Bytes Sent/sec";
1355
+ p->DirectedPacketsSentSec.key = "Directed Packets Sent/sec";
1356
+ p->DirectedPacketsReceivedSec.key = "Directed Packets Received/sec";
1357
+ p->BroadcastPacketsSentSec.key = "Broadcast Packets Sent/sec";
1358
+ p->BroadcastPacketsReceivedSec.key = "Broadcast Packets Received/sec";
1359
+ p->MulticastPacketsSentSec.key = "Multicast Packets Sent/sec";
1360
+ p->MulticastPacketsReceivedSec.key = "Multicast Packets Received/sec";
1361
}
1362
1340
-void dict_hyperv_network_adapter_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
1363
+void dict_hyperv_network_adapter_insert_cb(
1364
+ const DICTIONARY_ITEM *item __maybe_unused,
1365
+ void *value,
1366
+ void *data __maybe_unused)
1367
{
1368
struct hypervisor_network_adapter *p = value;
1369
initialize_hyperv_network_adapter_keys(p);
@@ -1357,9 +1383,10 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1383
if (!pi)
1384
break;
1385
1360
- get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1386
+ get_and_sanitize_instance_value(
1387
+ pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1388
1362
- if(strcasecmp(windows_shared_buffer, "_Total") == 0)
1389
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0)
1390
continue;
1391
1392
struct hypervisor_network_adapter *p = dictionary_set(item->instance, windows_shared_buffer, NULL, sizeof(*p));
@@ -1396,7 +1423,7 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1423
windows_shared_buffer,
1424
NULL,
1425
HYPERV,
1399
- HYPERV".vm_net_interface_packets_dropped",
1426
+ HYPERV ".vm_net_interface_packets_dropped",
1427
"VM interface packets dropped",
1428
"drops/s",
1429
_COMMON_PLUGIN_NAME,
@@ -1405,10 +1432,13 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1432
update_every,
1433
RRDSET_TYPE_LINE);
1434
1408
- p->rd_DroppedPacketsIncomingSec = rrddim_add(p->st_dropped_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1409
- p->rd_DroppedPacketsOutgoingSec = rrddim_add(p->st_dropped_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1435
+ p->rd_DroppedPacketsIncomingSec =
1436
+ rrddim_add(p->st_dropped_packets, "incoming", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1437
+ p->rd_DroppedPacketsOutgoingSec =
1438
+ rrddim_add(p->st_dropped_packets, "outgoing", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1439
1411
- rrdlabels_add(p->st_dropped_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1440
+ rrdlabels_add(
1441
+ p->st_dropped_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1442
1443
p->st_send_receive_packets = rrdset_create_localhost(
1444
"vm_net_interface_packets",
@@ -1424,28 +1454,34 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1454
update_every,
1455
RRDSET_TYPE_LINE);
1456
1427
- p->rd_PacketsReceivedSec = rrddim_add(p->st_send_receive_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1428
- p->rd_PacketsSentSec = rrddim_add(p->st_send_receive_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1457
+ p->rd_PacketsReceivedSec =
1458
+ rrddim_add(p->st_send_receive_packets, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1459
+ p->rd_PacketsSentSec =
1460
+ rrddim_add(p->st_send_receive_packets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1461
1430
- rrdlabels_add(p->st_send_receive_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1462
+ rrdlabels_add(
1463
+ p->st_send_receive_packets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1464
1465
p->st_send_receive_bytes = rrdset_create_localhost(
1433
- "vm_net_interface_traffic",
1434
- windows_shared_buffer,
1435
- NULL,
1436
- HYPERV,
1437
- HYPERV ".vm_net_interface_traffic",
1438
- "VM interface traffic",
1439
- "kilobits/s",
1440
- _COMMON_PLUGIN_NAME,
1441
- _COMMON_PLUGIN_MODULE_NAME,
1442
- NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC,
1443
- update_every,
1444
- RRDSET_TYPE_AREA);
1445
-
1446
- p->rd_BytesReceivedSec = rrddim_add(p->st_send_receive_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1447
- p->rd_BytesSentSec = rrddim_add(p->st_send_receive_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1448
- rrdlabels_add(p->st_send_receive_bytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1466
+ "vm_net_interface_traffic",
1467
+ windows_shared_buffer,
1468
+ NULL,
1469
+ HYPERV,
1470
+ HYPERV ".vm_net_interface_traffic",
1471
+ "VM interface traffic",
1472
+ "kilobits/s",
1473
+ _COMMON_PLUGIN_NAME,
1474
+ _COMMON_PLUGIN_MODULE_NAME,
1475
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_NET_INTERFACE_TRAFFIC,
1476
+ update_every,
1477
+ RRDSET_TYPE_AREA);
1478
+
1479
+ p->rd_BytesReceivedSec =
1480
+ rrddim_add(p->st_send_receive_bytes, "received", NULL, 8, 1000, RRD_ALGORITHM_INCREMENTAL);
1481
+ p->rd_BytesSentSec =
1482
+ rrddim_add(p->st_send_receive_bytes, "sent", NULL, -8, 1000, RRD_ALGORITHM_INCREMENTAL);
1483
+ rrdlabels_add(
1484
+ p->st_send_receive_bytes->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1485
1486
p->st_IPsecoffloadBytes = rrdset_create_localhost(
1487
"vm_net_interface_ipsec_traffic",
@@ -1530,8 +1566,6 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1566
rrddim_add(p->st_MulticastPackets, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
1567
rrdlabels_add(
1568
p->st_MulticastPackets->rrdlabels, "vm_net_interface", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1533
-
1534
-
1569
}
1570
1571
SETP_DIM_VALUE(st_dropped_packets, DroppedPacketsIncomingSec);
@@ -1552,8 +1586,8 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1586
SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsSentSec);
1587
SETP_DIM_VALUE(st_BroadcastPackets, BroadcastPacketsReceivedSec);
1588
1555
- SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsSentSec);
1556
- SETP_DIM_VALUE(st_MulticastPackets,MulticastPacketsReceivedSec);
1589
+ SETP_DIM_VALUE(st_MulticastPackets, MulticastPacketsSentSec);
1590
+ SETP_DIM_VALUE(st_MulticastPackets, MulticastPacketsReceivedSec);
1591
1592
rrdset_done(p->st_IPsecoffloadBytes);
1593
rrdset_done(p->st_DirectedPackets);
@@ -1566,7 +1600,6 @@ static bool do_hyperv_network_adapter(PERF_DATA_BLOCK *pDataBlock, int update_ev
1600
return true;
1601
}
1602
1569
-
1603
// Hypervisor Virtual Processor
1604
struct hypervisor_processor {
1605
bool collected_metadata;
@@ -1591,7 +1624,6 @@ struct hypervisor_processor {
1624
collected_number TotalRunTime_total;
1625
};
1626
1594
-
1627
void initialize_hyperv_processor_keys(struct hypervisor_processor *p)
1628
{
1629
p->GuestRunTime.key = "% Guest Run Time";
@@ -1624,7 +1656,8 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
1656
if (!pi)
1657
break;
1658
1627
- get_and_sanitize_instance_value(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1659
+ get_and_sanitize_instance_value(
1660
+ pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer));
1661
1662
if (strcasecmp(windows_shared_buffer, "_Total") == 0)
1663
continue;
@@ -1662,21 +1695,22 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
1695
1696
p->rd_TotalRunTime =
1697
rrddim_add(p->st_HypervisorProcessorTotal, "usage", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
1665
- rrdlabels_add(p->st_HypervisorProcessorTotal->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1698
+ rrdlabels_add(
1699
+ p->st_HypervisorProcessorTotal->rrdlabels, "vm_name", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1700
1701
p->st_HypervisorProcessor = rrdset_create_localhost(
1668
- "vm_cpu_usage_by_run_context",
1669
- windows_shared_buffer,
1670
- NULL,
1671
- HYPERV,
1672
- HYPERV ".vm_cpu_usage_by_run_context",
1673
- "VM CPU usage by run context",
1674
- "percentage",
1675
- _COMMON_PLUGIN_NAME,
1676
- _COMMON_PLUGIN_MODULE_NAME,
1677
- NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT,
1678
- update_every,
1679
- RRDSET_TYPE_STACKED);
1702
+ "vm_cpu_usage_by_run_context",
1703
+ windows_shared_buffer,
1704
+ NULL,
1705
+ HYPERV,
1706
+ HYPERV ".vm_cpu_usage_by_run_context",
1707
+ "VM CPU usage by run context",
1708
+ "percentage",
1709
+ _COMMON_PLUGIN_NAME,
1710
+ _COMMON_PLUGIN_MODULE_NAME,
1711
+ NETDATA_CHART_PRIO_WINDOWS_HYPERV_VM_CPU_USAGE_BY_RUN_CONTEXT,
1712
+ update_every,
1713
+ RRDSET_TYPE_STACKED);
1714
1715
p->rd_GuestRunTime =
1716
rrddim_add(p->st_HypervisorProcessor, "guest", NULL, 1, 1000000, RRD_ALGORITHM_INCREMENTAL);
@@ -1696,13 +1730,18 @@ static bool do_hyperv_processor(PERF_DATA_BLOCK *pDataBlock, int update_every, v
1730
1731
{
1732
struct hypervisor_processor *p;
1699
- dfe_start_read(item->instance, p) {
1700
- rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_HypervisorRunTime, (collected_number) p->HypervisorRunTime_total);
1701
- rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_GuestRunTime, (collected_number) p->GuestRunTime_total);
1702
- rrddim_set_by_pointer(p->st_HypervisorProcessor, p->rd_RemoteRunTime, (collected_number) p->RemoteRunTime_total);
1733
+ dfe_start_read(item->instance, p)
1734
+ {
1735
+ rrddim_set_by_pointer(
1736
+ p->st_HypervisorProcessor, p->rd_HypervisorRunTime, (collected_number)p->HypervisorRunTime_total);
1737
+ rrddim_set_by_pointer(
1738
+ p->st_HypervisorProcessor, p->rd_GuestRunTime, (collected_number)p->GuestRunTime_total);
1739
+ rrddim_set_by_pointer(
1740
+ p->st_HypervisorProcessor, p->rd_RemoteRunTime, (collected_number)p->RemoteRunTime_total);
1741
rrdset_done(p->st_HypervisorProcessor);
1742
1705
- rrddim_set_by_pointer(p->st_HypervisorProcessorTotal, p->rd_TotalRunTime, (collected_number) p->TotalRunTime_total);
1743
+ rrddim_set_by_pointer(
1744
+ p->st_HypervisorProcessorTotal, p->rd_TotalRunTime, (collected_number)p->TotalRunTime_total);
1745
rrdset_done(p->st_HypervisorProcessorTotal);
1746
1747
p->GuestRunTime_total = 0;
@@ -1761,7 +1800,8 @@ hyperv_perf_item hyperv_perf_list[] = {
1800
1801
{.registry_name = NULL, .function_collect = NULL}};
1802
1764
-int do_PerflibHyperV(int update_every, usec_t dt __maybe_unused) {
1803
+int do_PerflibHyperV(int update_every, usec_t dt __maybe_unused)
1804
+{
1805
static bool initialized = false;
1806
1807
if (unlikely(!initialized)) {
src/collectors/windows.plugin/perflib-memory.c
+86
-91
@@ -31,10 +31,11 @@ struct system_pool {
31
COUNTER_DATA nonPagedData;
32
};
33
34
-struct swap localSwap = { 0 };
35
-struct system_pool localPool = { 0 };
34
+struct swap localSwap = {0};
35
+struct system_pool localPool = {0};
36
37
-void initialize_swap_keys(struct swap *p) {
37
+void initialize_swap_keys(struct swap *p)
38
+{
39
// SWAP Operations
40
p->pageReadsTotal.key = "Page Reads/sec";
41
p->pageWritesTotal.key = "Page Writes/s";
@@ -44,12 +45,14 @@ void initialize_swap_keys(struct swap *p) {
45
p->pageOutputTotal.key = "Pages Output/s";
46
}
47
47
-void initialize_pool_keys(struct system_pool *p) {
48
+void initialize_pool_keys(struct system_pool *p)
49
+{
50
p->pagedData.key = "Pool Paged Bytes";
51
p->nonPagedData.key = "Pool Nonpaged Bytes";
52
}
53
52
-static void initialize(void) {
54
+static void initialize(void)
55
+{
56
initialize_swap_keys(&localSwap);
57
initialize_pool_keys(&localPool);
58
}
@@ -63,64 +66,58 @@ static void do_memory_swap(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjec
66
67
if (!localSwap.operations) {
68
localSwap.operations = rrdset_create_localhost(
66
- "mem"
67
- , "swap_operations", NULL
68
- , "swap"
69
- , "mem.swap_iops"
70
-
71
- , "Swap Operations"
72
- , "operations/s"
73
- , PLUGIN_WINDOWS_NAME
74
- , "PerflibMemory"
75
- , NETDATA_CHART_PRIO_MEM_SWAPIO
76
- , update_every
77
- , RRDSET_TYPE_STACKED
78
- );
79
-
80
- localSwap.rd_op_read = rrddim_add(localSwap.operations, "read", NULL,
81
- 1, 1, RRD_ALGORITHM_INCREMENTAL);
82
- localSwap.rd_op_write = rrddim_add(localSwap.operations, "write", NULL,
83
- 1, -1, RRD_ALGORITHM_INCREMENTAL);
69
+ "mem",
70
+ "swap_operations",
71
+ NULL,
72
+ "swap",
73
+ "mem.swap_iops"
74
+
75
+ ,
76
+ "Swap Operations",
77
+ "operations/s",
78
+ PLUGIN_WINDOWS_NAME,
79
+ "PerflibMemory",
80
+ NETDATA_CHART_PRIO_MEM_SWAPIO,
81
+ update_every,
82
+ RRDSET_TYPE_STACKED);
83
+
84
+ localSwap.rd_op_read = rrddim_add(localSwap.operations, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
85
+ localSwap.rd_op_write = rrddim_add(localSwap.operations, "write", NULL, 1, -1, RRD_ALGORITHM_INCREMENTAL);
86
}
87
86
- rrddim_set_by_pointer(localSwap.operations,
87
- localSwap.rd_op_read,
88
- (collected_number)localSwap.pageReadsTotal.current.Data);
88
+ rrddim_set_by_pointer(
89
+ localSwap.operations, localSwap.rd_op_read, (collected_number)localSwap.pageReadsTotal.current.Data);
90
90
- rrddim_set_by_pointer(localSwap.operations,
91
- localSwap.rd_op_write,
92
- (collected_number)localSwap.pageWritesTotal.current.Data);
91
+ rrddim_set_by_pointer(
92
+ localSwap.operations, localSwap.rd_op_write, (collected_number)localSwap.pageWritesTotal.current.Data);
93
rrdset_done(localSwap.operations);
94
95
if (!localSwap.pages) {
96
localSwap.pages = rrdset_create_localhost(
97
- "mem"
98
- , "swap_pages", NULL
99
- , "swap"
100
- , "mem.swap_pages_io"
101
-
102
- , "Swap Pages"
103
- , "pages/s"
104
- , PLUGIN_WINDOWS_NAME
105
- , "PerflibMemory"
106
- , NETDATA_CHART_PRIO_MEM_SWAP_PAGES
107
- , update_every
108
- , RRDSET_TYPE_STACKED
109
- );
110
-
111
- localSwap.rd_page_read = rrddim_add(localSwap.pages, "read", NULL,
112
- 1, 1, RRD_ALGORITHM_INCREMENTAL);
113
- localSwap.rd_page_write = rrddim_add(localSwap.pages, "write", NULL,
114
- 1, -1, RRD_ALGORITHM_INCREMENTAL);
97
+ "mem",
98
+ "swap_pages",
99
+ NULL,
100
+ "swap",
101
+ "mem.swap_pages_io"
102
+
103
+ ,
104
+ "Swap Pages",
105
+ "pages/s",
106
+ PLUGIN_WINDOWS_NAME,
107
+ "PerflibMemory",
108
+ NETDATA_CHART_PRIO_MEM_SWAP_PAGES,
109
+ update_every,
110
+ RRDSET_TYPE_STACKED);
111
+
112
+ localSwap.rd_page_read = rrddim_add(localSwap.pages, "read", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
113
+ localSwap.rd_page_write = rrddim_add(localSwap.pages, "write", NULL, 1, -1, RRD_ALGORITHM_INCREMENTAL);
114
}
115
117
- rrddim_set_by_pointer(localSwap.pages,
118
- localSwap.rd_page_read,
119
- (collected_number)localSwap.pageInputTotal.current.Data);
116
+ rrddim_set_by_pointer(
117
+ localSwap.pages, localSwap.rd_page_read, (collected_number)localSwap.pageInputTotal.current.Data);
118
121
- rrddim_set_by_pointer(localSwap.pages,
122
- localSwap.rd_page_write,
123
- (collected_number)localSwap.pageOutputTotal.current.Data);
119
+ rrddim_set_by_pointer(
120
+ localSwap.pages, localSwap.rd_page_write, (collected_number)localSwap.pageOutputTotal.current.Data);
121
rrdset_done(localSwap.pages);
122
}
123
@@ -131,45 +128,41 @@ static void do_memory_system_pool(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE
128
129
if (!localPool.pool) {
130
localPool.pool = rrdset_create_localhost(
134
- "mem"
135
- , "system_pool", NULL
136
- , "mem"
137
- , "mem.system_pool_size"
138
-
139
- , "System Memory Pool"
140
- , "bytes"
141
- , PLUGIN_WINDOWS_NAME
142
- , "PerflibMemory"
143
- , NETDATA_CHART_PRIO_MEM_SYSTEM_POOL
144
- , update_every
145
- , RRDSET_TYPE_STACKED
146
- );
147
-
148
- localPool.rd_paged = rrddim_add(localPool.pool, "paged", NULL,
149
- 1, 1, RRD_ALGORITHM_ABSOLUTE);
150
- localPool.rd_nonpaged = rrddim_add(localPool.pool, "pool-paged", NULL,
151
- 1, 1, RRD_ALGORITHM_ABSOLUTE);
131
+ "mem",
132
+ "system_pool",
133
+ NULL,
134
+ "mem",
135
+ "mem.system_pool_size"
136
+
137
+ ,
138
+ "System Memory Pool",
139
+ "bytes",
140
+ PLUGIN_WINDOWS_NAME,
141
+ "PerflibMemory",
142
+ NETDATA_CHART_PRIO_MEM_SYSTEM_POOL,
143
+ update_every,
144
+ RRDSET_TYPE_STACKED);
145
+
146
+ localPool.rd_paged = rrddim_add(localPool.pool, "paged", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
147
+ localPool.rd_nonpaged = rrddim_add(localPool.pool, "pool-paged", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
148
}
149
154
- rrddim_set_by_pointer(localPool.pool,
155
- localPool.rd_paged,
156
- (collected_number)localPool.pagedData.current.Data);
150
+ rrddim_set_by_pointer(localPool.pool, localPool.rd_paged, (collected_number)localPool.pagedData.current.Data);
151
158
- rrddim_set_by_pointer(localPool.pool,
159
- localPool.rd_nonpaged,
160
- (collected_number)localPool.nonPagedData.current.Data);
152
+ rrddim_set_by_pointer(localPool.pool, localPool.rd_nonpaged, (collected_number)localPool.nonPagedData.current.Data);
153
rrdset_done(localPool.pool);
154
}
155
164
-static bool do_memory(PERF_DATA_BLOCK *pDataBlock, int update_every) {
156
+static bool do_memory(PERF_DATA_BLOCK *pDataBlock, int update_every)
157
+{
158
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Memory");
159
if (!pObjectType)
160
return false;
161
169
- static COUNTER_DATA pagesPerSec = { .key = "Pages/sec" };
170
- static COUNTER_DATA pageFaultsPerSec = { .key = "Page Faults/sec" };
162
+ static COUNTER_DATA pagesPerSec = {.key = "Pages/sec"};
163
+ static COUNTER_DATA pageFaultsPerSec = {.key = "Page Faults/sec"};
164
172
- if(perflibGetObjectCounter(pDataBlock, pObjectType, &pageFaultsPerSec) &&
165
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &pageFaultsPerSec) &&
166
perflibGetObjectCounter(pDataBlock, pObjectType, &pagesPerSec)) {
167
ULONGLONG total = pageFaultsPerSec.current.Data;
168
ULONGLONG major = pagesPerSec.current.Data;
@@ -177,16 +170,16 @@ static bool do_memory(PERF_DATA_BLOCK *pDataBlock, int update_every) {
170
common_mem_pgfaults(minor, major, update_every);
171
}
172
180
- static COUNTER_DATA availableBytes = { .key = "Available Bytes" };
181
- static COUNTER_DATA availableKBytes = { .key = "Available KBytes" };
182
- static COUNTER_DATA availableMBytes = { .key = "Available MBytes" };
173
+ static COUNTER_DATA availableBytes = {.key = "Available Bytes"};
174
+ static COUNTER_DATA availableKBytes = {.key = "Available KBytes"};
175
+ static COUNTER_DATA availableMBytes = {.key = "Available MBytes"};
176
ULONGLONG available_bytes = 0;
177
185
- if(perflibGetObjectCounter(pDataBlock, pObjectType, &availableBytes))
178
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &availableBytes))
179
available_bytes = availableBytes.current.Data;
187
- else if(perflibGetObjectCounter(pDataBlock, pObjectType, &availableKBytes))
180
+ else if (perflibGetObjectCounter(pDataBlock, pObjectType, &availableKBytes))
181
available_bytes = availableKBytes.current.Data * 1024;
189
- else if(perflibGetObjectCounter(pDataBlock, pObjectType, &availableMBytes))
182
+ else if (perflibGetObjectCounter(pDataBlock, pObjectType, &availableMBytes))
183
available_bytes = availableMBytes.current.Data * 1024 * 1024;
184
185
common_mem_available(available_bytes, update_every);
@@ -198,20 +191,22 @@ static bool do_memory(PERF_DATA_BLOCK *pDataBlock, int update_every) {
191
return true;
192
}
193
201
-int do_PerflibMemory(int update_every, usec_t dt __maybe_unused) {
194
+int do_PerflibMemory(int update_every, usec_t dt __maybe_unused)
195
+{
196
static bool initialized = false;
197
204
- if(unlikely(!initialized)) {
198
+ if (unlikely(!initialized)) {
199
initialize();
200
initialized = true;
201
}
202
203
DWORD id = RegistryFindIDByName("Memory");
210
- if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
204
+ if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
205
return -1;
206
207
PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
214
- if(!pDataBlock) return -1;
208
+ if (!pDataBlock)
209
+ return -1;
210
211
do_memory(pDataBlock, update_every);
212
src/collectors/windows.plugin/perflib-mssql.c
+52
-26
@@ -168,7 +168,8 @@ struct mssql_db_instance {
168
169
static DICTIONARY *mssql_instances = NULL;
170
171
-static void initialize_mssql_objects(struct mssql_instance *p, const char *instance) {
171
+static void initialize_mssql_objects(struct mssql_instance *p, const char *instance)
172
+{
173
char prefix[NETDATA_MAX_INSTANCE_NAME];
174
if (!strcmp(instance, "MSSQLSERVER")) {
175
strncpyz(prefix, "SQLServer:", sizeof(prefix) - 1);
@@ -208,7 +209,8 @@ static void initialize_mssql_objects(struct mssql_instance *p, const char *insta
209
p->instanceID = strdup(instance);
210
}
211
211
-static inline void initialize_mssql_keys(struct mssql_instance *p) {
212
+static inline void initialize_mssql_keys(struct mssql_instance *p)
213
+{
214
// General Statistics (https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-general-statistics-object)
215
p->MSSQLUserConnections.key = "User Connections";
216
p->MSSQLBlockedProcesses.key = "Processes blocked";
@@ -240,14 +242,16 @@ static inline void initialize_mssql_keys(struct mssql_instance *p) {
242
p->MSSQLTotalServerMemory.key = "Total Server Memory (KB)";
243
}
244
243
-void dict_mssql_insert_locks_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
245
+void dict_mssql_insert_locks_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
246
+{
247
// https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-locks-object
248
struct mssql_lock_instance *ptr = value;
249
ptr->deadLocks.key = "Number of Deadlocks/sec";
250
ptr->lockWait.key = "Lock Waits/sec";
251
}
252
250
-void dict_mssql_insert_databases_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
253
+void dict_mssql_insert_databases_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
254
+{
255
struct mssql_db_instance *ptr = value;
256
257
// https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-databases-object
@@ -260,7 +264,8 @@ void dict_mssql_insert_databases_cb(const DICTIONARY_ITEM *item __maybe_unused,
264
ptr->MSSQLDatabaseWriteTransactions.key = "Write Transactions/sec";
265
}
266
263
-void dict_mssql_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
267
+void dict_mssql_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
268
+{
269
struct mssql_instance *p = value;
270
const char *instance = dictionary_acquired_item_name((DICTIONARY_ITEM *)item);
271
@@ -280,7 +285,8 @@ void dict_mssql_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *valu
285
initialize_mssql_keys(p);
286
}
287
283
-static int mssql_fill_dictionary() {
288
+static int mssql_fill_dictionary()
289
+{
290
HKEY hKey;
291
LSTATUS ret = RegOpenKeyExA(
292
HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL", 0, KEY_READ, &hKey);
@@ -325,7 +331,8 @@ endMSSQLFillDict:
331
return (ret == ERROR_SUCCESS) ? 0 : -1;
332
}
333
328
-static int initialize(void) {
334
+static int initialize(void)
335
+{
336
mssql_instances = dictionary_create_advanced(
337
DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct mssql_instance));
338
@@ -338,7 +345,8 @@ static int initialize(void) {
345
return 0;
346
}
347
341
-static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
348
+static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
349
+{
350
char id[RRD_ID_LENGTH_MAX + 1];
351
352
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_GENERAL_STATS]);
@@ -402,7 +410,8 @@ static void do_mssql_general_stats(PERF_DATA_BLOCK *pDataBlock, struct mssql_ins
410
}
411
}
412
405
-static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
413
+static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
414
+{
415
char id[RRD_ID_LENGTH_MAX + 1];
416
417
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_SQL_STATS]);
@@ -560,7 +569,8 @@ static void do_mssql_sql_statistics(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
569
}
570
}
571
563
-static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
572
+static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
573
+{
574
char id[RRD_ID_LENGTH_MAX + 1];
575
576
PERF_OBJECT_TYPE *pObjectType =
@@ -694,7 +704,8 @@ static void do_mssql_buffer_management(PERF_DATA_BLOCK *pDataBlock, struct mssql
704
}
705
}
706
697
-static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
707
+static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
708
+{
709
char id[RRD_ID_LENGTH_MAX + 1];
710
711
PERF_OBJECT_TYPE *pObjectType =
@@ -735,7 +746,8 @@ static void do_mssql_access_methods(PERF_DATA_BLOCK *pDataBlock, struct mssql_in
746
}
747
}
748
738
-static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
749
+static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
750
+{
751
char id[RRD_ID_LENGTH_MAX + 1];
752
753
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_SQL_ERRORS]);
@@ -771,7 +783,8 @@ static void do_mssql_errors(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *
783
}
784
}
785
774
-int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
786
+int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
787
+{
788
char id[RRD_ID_LENGTH_MAX + 1];
789
790
struct mssql_lock_instance *mli = value;
@@ -842,7 +855,8 @@ int dict_mssql_locks_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void
855
return 1;
856
}
857
845
-static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
858
+static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
859
+{
860
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_LOCKS]);
861
if (!pObjectType)
862
return;
@@ -879,7 +893,8 @@ static void do_mssql_locks(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p
893
rrdset_done(p->st_deadLocks);
894
}
895
882
-static void mssql_database_backup_restore_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
896
+static void mssql_database_backup_restore_chart(struct mssql_db_instance *mli, const char *db, int update_every)
897
+{
898
char id[RRD_ID_LENGTH_MAX + 1];
899
900
if (!mli->st_db_backup_restore_operations) {
@@ -922,7 +937,8 @@ static void mssql_database_backup_restore_chart(struct mssql_db_instance *mli, c
937
rrdset_done(mli->st_db_backup_restore_operations);
938
}
939
925
-static void mssql_database_log_flushes_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
940
+static void mssql_database_log_flushes_chart(struct mssql_db_instance *mli, const char *db, int update_every)
941
+{
942
char id[RRD_ID_LENGTH_MAX + 1];
943
944
if (!mli->st_db_log_flushes) {
@@ -960,7 +976,8 @@ static void mssql_database_log_flushes_chart(struct mssql_db_instance *mli, cons
976
rrdset_done(mli->st_db_log_flushes);
977
}
978
963
-static void mssql_database_log_flushed_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
979
+static void mssql_database_log_flushed_chart(struct mssql_db_instance *mli, const char *db, int update_every)
980
+{
981
char id[RRD_ID_LENGTH_MAX + 1];
982
983
if (!mli->st_db_log_flushed) {
@@ -998,7 +1015,8 @@ static void mssql_database_log_flushed_chart(struct mssql_db_instance *mli, cons
1015
rrdset_done(mli->st_db_log_flushed);
1016
}
1017
1001
-static void mssql_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1018
+static void mssql_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every)
1019
+{
1020
char id[RRD_ID_LENGTH_MAX + 1];
1021
1022
if (!mli->st_db_transactions) {
@@ -1037,7 +1055,8 @@ static void mssql_transactions_chart(struct mssql_db_instance *mli, const char *
1055
rrdset_done(mli->st_db_transactions);
1056
}
1057
1040
-static void mssql_write_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1058
+static void mssql_write_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every)
1059
+{
1060
char id[RRD_ID_LENGTH_MAX + 1];
1061
1062
if (!mli->st_db_write_transactions) {
@@ -1077,7 +1096,8 @@ static void mssql_write_transactions_chart(struct mssql_db_instance *mli, const
1096
rrdset_done(mli->st_db_write_transactions);
1097
}
1098
1080
-static void mssql_active_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1099
+static void mssql_active_transactions_chart(struct mssql_db_instance *mli, const char *db, int update_every)
1100
+{
1101
char id[RRD_ID_LENGTH_MAX + 1];
1102
1103
if (!mli->st_db_active_transactions) {
@@ -1117,7 +1137,8 @@ static void mssql_active_transactions_chart(struct mssql_db_instance *mli, const
1137
rrdset_done(mli->st_db_active_transactions);
1138
}
1139
1120
-static inline void mssql_data_file_size_chart(struct mssql_db_instance *mli, const char *db, int update_every) {
1140
+static inline void mssql_data_file_size_chart(struct mssql_db_instance *mli, const char *db, int update_every)
1141
+{
1142
char id[RRD_ID_LENGTH_MAX + 1];
1143
1144
if (!mli->st_db_data_file_size) {
@@ -1154,7 +1175,8 @@ static inline void mssql_data_file_size_chart(struct mssql_db_instance *mli, con
1175
rrdset_done(mli->st_db_data_file_size);
1176
}
1177
1157
-int dict_mssql_databases_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
1178
+int dict_mssql_databases_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
1179
+{
1180
struct mssql_db_instance *mli = value;
1181
const char *db = dictionary_acquired_item_name((DICTIONARY_ITEM *)item);
1182
@@ -1182,7 +1204,8 @@ int dict_mssql_databases_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, v
1204
return 1;
1205
}
1206
1185
-static void do_mssql_databases(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
1207
+static void do_mssql_databases(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
1208
+{
1209
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_DATABASE]);
1210
if (!pObjectType)
1211
return;
@@ -1236,7 +1259,8 @@ static void do_mssql_databases(PERF_DATA_BLOCK *pDataBlock, struct mssql_instanc
1259
dictionary_sorted_walkthrough_read(p->databases, dict_mssql_databases_charts_cb, &update_every);
1260
}
1261
1239
-static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every) {
1262
+static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instance *p, int update_every)
1263
+{
1264
char id[RRD_ID_LENGTH_MAX + 1];
1265
1266
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->objectName[NETDATA_MSSQL_MEMORY]);
@@ -1367,7 +1391,8 @@ static void do_mssql_memory_mgr(PERF_DATA_BLOCK *pDataBlock, struct mssql_instan
1391
}
1392
}
1393
1370
-int dict_mssql_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
1394
+int dict_mssql_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
1395
+{
1396
struct mssql_instance *p = value;
1397
int *update_every = data;
1398
@@ -1400,7 +1425,8 @@ int dict_mssql_charts_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value
1425
return 1;
1426
}
1427
1403
-int do_PerflibMSSQL(int update_every, usec_t dt __maybe_unused) {
1428
+int do_PerflibMSSQL(int update_every, usec_t dt __maybe_unused)
1429
+{
1430
static bool initialized = false;
1431
1432
if (unlikely(!initialized)) {
src/collectors/windows.plugin/perflib-network.c
+350
-313
@@ -115,146 +115,156 @@ struct network_protocol {
115
} networks[] = {
116
{
117
.protocol = "IPv4",
118
- .packets = {
119
- .received = { .key = "Datagrams Received/sec" },
120
- .sent = { .key = "Datagrams Sent/sec" },
121
- .delivered = { .key = "Datagrams Received Delivered/sec" },
122
- .forwarded = { .key = "Datagrams Forwarded/sec" },
123
- .type = "ipv4",
124
- .id = "packets",
125
- .family = "packets",
126
- .context = "ipv4.packets",
127
- .title = "IPv4 Packets",
128
- .priority = NETDATA_CHART_PRIO_IPV4_PACKETS,
129
- },
118
+ .packets =
119
+ {
120
+ .received = {.key = "Datagrams Received/sec"},
121
+ .sent = {.key = "Datagrams Sent/sec"},
122
+ .delivered = {.key = "Datagrams Received Delivered/sec"},
123
+ .forwarded = {.key = "Datagrams Forwarded/sec"},
124
+ .type = "ipv4",
125
+ .id = "packets",
126
+ .family = "packets",
127
+ .context = "ipv4.packets",
128
+ .title = "IPv4 Packets",
129
+ .priority = NETDATA_CHART_PRIO_IPV4_PACKETS,
130
+ },
131
},
132
{
133
.protocol = "IPv6",
133
- .packets = {
134
- .received = { .key = "Datagrams Received/sec" },
135
- .sent = { .key = "Datagrams Sent/sec" },
136
- .delivered = { .key = "Datagrams Received Delivered/sec" },
137
- .forwarded = { .key = "Datagrams Forwarded/sec" },
138
- .type = "ipv6",
139
- .id = "packets",
140
- .family = "packets",
141
- .context = "ip6.packets",
142
- .title = "IPv6 Packets",
143
- .priority = NETDATA_CHART_PRIO_IPV6_PACKETS,
144
- },
134
+ .packets =
135
+ {
136
+ .received = {.key = "Datagrams Received/sec"},
137
+ .sent = {.key = "Datagrams Sent/sec"},
138
+ .delivered = {.key = "Datagrams Received Delivered/sec"},
139
+ .forwarded = {.key = "Datagrams Forwarded/sec"},
140
+ .type = "ipv6",
141
+ .id = "packets",
142
+ .family = "packets",
143
+ .context = "ip6.packets",
144
+ .title = "IPv6 Packets",
145
+ .priority = NETDATA_CHART_PRIO_IPV6_PACKETS,
146
+ },
147
},
148
{
149
.protocol = "TCPv4",
148
- .packets = {
149
- .received = { .key = "Segments Received/sec" },
150
- .sent = { .key = "Segments Sent/sec" },
151
- .type = "ipv4",
152
- .id = "tcppackets",
153
- .family = "tcp",
154
- .context = "ipv4.tcppackets",
155
- .title = "IPv4 TCP Packets",
156
- .priority = NETDATA_CHART_PRIO_IPV4_TCP_PACKETS,
157
- },
150
+ .packets =
151
+ {
152
+ .received = {.key = "Segments Received/sec"},
153
+ .sent = {.key = "Segments Sent/sec"},
154
+ .type = "ipv4",
155
+ .id = "tcppackets",
156
+ .family = "tcp",
157
+ .context = "ipv4.tcppackets",
158
+ .title = "IPv4 TCP Packets",
159
+ .priority = NETDATA_CHART_PRIO_IPV4_TCP_PACKETS,
160
+ },
161
},
162
{
163
.protocol = "TCPv6",
161
- .packets = {
162
- .received = { .key = "Segments Received/sec" },
163
- .sent = { .key = "Segments Sent/sec" },
164
- .type = "ipv6",
165
- .id = "tcppackets",
166
- .family = "tcp6",
167
- .context = "ipv6.tcppackets",
168
- .title = "IPv6 TCP Packets",
169
- .priority = NETDATA_CHART_PRIO_IPV6_TCP_PACKETS,
170
- },
164
+ .packets =
165
+ {
166
+ .received = {.key = "Segments Received/sec"},
167
+ .sent = {.key = "Segments Sent/sec"},
168
+ .type = "ipv6",
169
+ .id = "tcppackets",
170
+ .family = "tcp6",
171
+ .context = "ipv6.tcppackets",
172
+ .title = "IPv6 TCP Packets",
173
+ .priority = NETDATA_CHART_PRIO_IPV6_TCP_PACKETS,
174
+ },
175
},
176
{
177
.protocol = "UDPv4",
174
- .packets = {
175
- .received = { .key = "Datagrams Received/sec" },
176
- .sent = { .key = "Datagrams Sent/sec" },
177
- .type = "ipv4",
178
- .id = "udppackets",
179
- .family = "udp",
180
- .context = "ipv4.udppackets",
181
- .title = "IPv4 UDP Packets",
182
- .priority = NETDATA_CHART_PRIO_IPV4_UDP_PACKETS,
183
- },
178
+ .packets =
179
+ {
180
+ .received = {.key = "Datagrams Received/sec"},
181
+ .sent = {.key = "Datagrams Sent/sec"},
182
+ .type = "ipv4",
183
+ .id = "udppackets",
184
+ .family = "udp",
185
+ .context = "ipv4.udppackets",
186
+ .title = "IPv4 UDP Packets",
187
+ .priority = NETDATA_CHART_PRIO_IPV4_UDP_PACKETS,
188
+ },
189
},
190
{
191
.protocol = "UDPv6",
187
- .packets = {
188
- .received = { .key = "Datagrams Received/sec" },
189
- .sent = { .key = "Datagrams Sent/sec" },
190
- .type = "ipv6",
191
- .id = "udppackets",
192
- .family = "udp6",
193
- .context = "ipv6.udppackets",
194
- .title = "IPv6 UDP Packets",
195
- .priority = NETDATA_CHART_PRIO_IPV6_UDP_PACKETS,
196
- },
192
+ .packets =
193
+ {
194
+ .received = {.key = "Datagrams Received/sec"},
195
+ .sent = {.key = "Datagrams Sent/sec"},
196
+ .type = "ipv6",
197
+ .id = "udppackets",
198
+ .family = "udp6",
199
+ .context = "ipv6.udppackets",
200
+ .title = "IPv6 UDP Packets",
201
+ .priority = NETDATA_CHART_PRIO_IPV6_UDP_PACKETS,
202
+ },
203
},
204
{
205
.protocol = "ICMP",
200
- .packets = {
201
- .received = { .key = "Messages Received/sec" },
202
- .sent = { .key = "Messages Sent/sec" },
203
- .type = "ipv4",
204
- .id = "icmp",
205
- .family = "icmp",
206
- .context = "ipv4.icmp",
207
- .title = "IPv4 ICMP Packets",
208
- .priority = NETDATA_CHART_PRIO_IPV4_ICMP_PACKETS,
209
- },
206
+ .packets =
207
+ {
208
+ .received = {.key = "Messages Received/sec"},
209
+ .sent = {.key = "Messages Sent/sec"},
210
+ .type = "ipv4",
211
+ .id = "icmp",
212
+ .family = "icmp",
213
+ .context = "ipv4.icmp",
214
+ .title = "IPv4 ICMP Packets",
215
+ .priority = NETDATA_CHART_PRIO_IPV4_ICMP_PACKETS,
216
+ },
217
},
218
{
219
.protocol = "ICMPv6",
213
- .packets = {
214
- .received = { .key = "Messages Received/sec" },
215
- .sent = { .key = "Messages Sent/sec" },
216
- .type = "ipv6",
217
- .id = "icmp",
218
- .family = "icmp6",
219
- .context = "ipv6.icmp",
220
- .title = "IPv6 ICMP Packets",
221
- .priority = NETDATA_CHART_PRIO_IPV6_ICMP_PACKETS,
222
- },
220
+ .packets =
221
+ {
222
+ .received = {.key = "Messages Received/sec"},
223
+ .sent = {.key = "Messages Sent/sec"},
224
+ .type = "ipv6",
225
+ .id = "icmp",
226
+ .family = "icmp6",
227
+ .context = "ipv6.icmp",
228
+ .title = "IPv6 ICMP Packets",
229
+ .priority = NETDATA_CHART_PRIO_IPV6_ICMP_PACKETS,
230
+ },
231
},
232
233
{
234
.protocol = "IPv4",
227
- .packets = {
228
- .InDiscards = { .key = "Datagrams Received Discarded" },
229
- .OutDiscards = { .key = "Datagrams Outbound Discarded" },
230
- .OutNoRoutes = { .key = "Datagrams Outbound No Route" },
231
- .InAddrErrors = { .key = "Datagrams Received Address Errors" },
232
- .InHdrErrors = { .key = "Datagrams Received Header Errors" },
233
- .InUnknownProtos = { .key = "Datagrams Received Unknown Protocol" },
234
- .type = "ipv4",
235
- .id = "errors",
236
- .family = "errors",
237
- .context = "ipv4.errors",
238
- .title = "IPv4 errors",
239
- .priority = NETDATA_CHART_PRIO_IPV4_ERRORS,
240
- },
235
+ .packets =
236
+ {
237
+ .InDiscards = {.key = "Datagrams Received Discarded"},
238
+ .OutDiscards = {.key = "Datagrams Outbound Discarded"},
239
+ .OutNoRoutes = {.key = "Datagrams Outbound No Route"},
240
+ .InAddrErrors = {.key = "Datagrams Received Address Errors"},
241
+ .InHdrErrors = {.key = "Datagrams Received Header Errors"},
242
+ .InUnknownProtos = {.key = "Datagrams Received Unknown Protocol"},
243
+ .type = "ipv4",
244
+ .id = "errors",
245
+ .family = "errors",
246
+ .context = "ipv4.errors",
247
+ .title = "IPv4 errors",
248
+ .priority = NETDATA_CHART_PRIO_IPV4_ERRORS,
249
+ },
250
},
251
{
252
.protocol = "IPv6",
244
- .packets = {
245
- .InDiscards = { .key = "Datagrams Received Discarded" },
246
- .OutDiscards = { .key = "Datagrams Outbound Discarded" },
247
- .OutNoRoutes = { .key = "Datagrams Outbound No Route" },
248
- .InAddrErrors = { .key = "Datagrams Received Address Errors" },
249
- .InHdrErrors = { .key = "Datagrams Received Header Errors" },
250
- .InUnknownProtos = { .key = "Datagrams Received Unknown Protocol" },
251
- .type = "ipv6",
252
- .id = "errors",
253
- .family = "errors",
254
- .context = "ipv6.errors",
255
- .title = "IPv6 errors",
256
- .priority = NETDATA_CHART_PRIO_IPV6_ERRORS,
257
- },
253
+ .packets =
254
+ {
255
+ .InDiscards = {.key = "Datagrams Received Discarded"},
256
+ .OutDiscards = {.key = "Datagrams Outbound Discarded"},
257
+ .OutNoRoutes = {.key = "Datagrams Outbound No Route"},
258
+ .InAddrErrors = {.key = "Datagrams Received Address Errors"},
259
+ .InHdrErrors = {.key = "Datagrams Received Header Errors"},
260
+ .InUnknownProtos = {.key = "Datagrams Received Unknown Protocol"},
261
+ .type = "ipv6",
262
+ .id = "errors",
263
+ .family = "errors",
264
+ .context = "ipv6.errors",
265
+ .title = "IPv6 errors",
266
+ .priority = NETDATA_CHART_PRIO_IPV6_ERRORS,
267
+ },
268
},
269
{
270
.protocol = "ICMP",
@@ -326,8 +336,7 @@ struct network_protocol {
336
// terminator
337
{
338
.protocol = NULL,
329
- }
330
-};
339
+ }};
340
341
struct network_protocol tcp46 = {
342
.packets = {
@@ -337,28 +346,27 @@ struct network_protocol tcp46 = {
346
.context = "ip.tcppackets",
347
.title = "TCP Packets",
348
.priority = NETDATA_CHART_PRIO_IP_TCP_PACKETS,
340
- }
341
-};
349
+ }};
350
343
-static void protocol_packets_chart_update(struct network_protocol *p, int update_every) {
344
- if(!p->packets.st) {
351
+static void protocol_packets_chart_update(struct network_protocol *p, int update_every)
352
+{
353
+ if (!p->packets.st) {
354
p->packets.st = rrdset_create_localhost(
346
- p->packets.type
347
- , p->packets.id
348
- , NULL
349
- , p->packets.family
350
- , NULL
351
- , p->packets.title
352
- , "packets/s"
353
- , PLUGIN_WINDOWS_NAME
354
- , "PerflibNetwork"
355
- , p->packets.priority
356
- , update_every
357
- , RRDSET_TYPE_AREA
358
- );
355
+ p->packets.type,
356
+ p->packets.id,
357
+ NULL,
358
+ p->packets.family,
359
+ NULL,
360
+ p->packets.title,
361
+ "packets/s",
362
+ PLUGIN_WINDOWS_NAME,
363
+ "PerflibNetwork",
364
+ p->packets.priority,
365
+ update_every,
366
+ RRDSET_TYPE_AREA);
367
368
RRDSET *st = p->packets.st;
361
-
369
+
370
ADD_RRD_DIM_IF_KEY(received, "received", NULL, 1, RRD_ALGORITHM_INCREMENTAL);
371
ADD_RRD_DIM_IF_KEY(sent, "sent", NULL, -1, RRD_ALGORITHM_INCREMENTAL);
372
ADD_RRD_DIM_IF_KEY(forwarded, "forwarded", NULL, -1, RRD_ALGORITHM_INCREMENTAL);
@@ -392,7 +400,6 @@ static void protocol_packets_chart_update(struct network_protocol *p, int update
400
ADD_RRD_DIM_IF_KEY(OutTimestamps, "OutType13", "OutTimestamps", -1, RRD_ALGORITHM_INCREMENTAL);
401
ADD_RRD_DIM_IF_KEY(InTimestampReps, "InType14", "InTimestampReps", 1, RRD_ALGORITHM_INCREMENTAL);
402
ADD_RRD_DIM_IF_KEY(OutTimestampReps, "OutType14", "OutTimestampReps", -1, RRD_ALGORITHM_INCREMENTAL);
395
-
403
}
404
405
SET_DIM_IF_KEY_AND_UPDATED(p, received);
@@ -433,11 +440,14 @@ static void protocol_packets_chart_update(struct network_protocol *p, int update
440
rrdset_done(p->packets.st);
441
}
442
436
-static bool do_network_protocol(PERF_DATA_BLOCK *pDataBlock, int update_every, struct network_protocol *p) {
437
- if(!p || !p->protocol) return false;
443
+static bool do_network_protocol(PERF_DATA_BLOCK *pDataBlock, int update_every, struct network_protocol *p)
444
+{
445
+ if (!p || !p->protocol)
446
+ return false;
447
448
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, p->protocol);
440
- if(!pObjectType) return false;
449
+ if (!pObjectType)
450
+ return false;
451
452
size_t packets = 0;
453
ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, received);
@@ -476,7 +486,7 @@ static bool do_network_protocol(PERF_DATA_BLOCK *pDataBlock, int update_every, s
486
ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, InTimestampReps);
487
ADD_PACKET_IF_KEY(p, packets, pDataBlock, pObjectType, OutTimestampReps);
488
479
- if(packets)
489
+ if (packets)
490
protocol_packets_chart_update(p, update_every);
491
492
return true;
@@ -567,7 +577,8 @@ struct network_interface {
577
578
static DICTIONARY *physical_interfaces = NULL, *virtual_interfaces = NULL;
579
570
-static void network_interface_init(struct network_interface *d) {
580
+static void network_interface_init(struct network_interface *d)
581
+{
582
d->packets.received.key = "Packets Received/sec";
583
d->packets.sent.key = "Packets Sent/sec";
584
d->traffic.received.key = "Bytes Received/sec";
@@ -585,7 +596,8 @@ static void network_interface_init(struct network_interface *d) {
596
d->rsc.average_packet_size.key = "TCP RSC Average Packet Size";
597
}
598
588
-static void network_interface_cleanup(struct network_interface *d) {
599
+static void network_interface_cleanup(struct network_interface *d)
600
+{
601
rrdvar_chart_variable_release(d->traffic.st, d->traffic.chart_var_speed);
602
rrdset_is_obsolete___safe_from_collector_thread(d->packets.st);
603
rrdset_is_obsolete___safe_from_collector_thread(d->traffic.st);
@@ -600,67 +612,74 @@ static void network_interface_cleanup(struct network_interface *d) {
612
rrdset_is_obsolete___safe_from_collector_thread(d->rsc.st_average_packet_size);
613
}
614
603
-void dict_interface_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
615
+void dict_interface_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
616
+{
617
struct network_interface *ni = value;
618
network_interface_init(ni);
619
}
620
608
-static void initialize(void) {
609
- physical_interfaces = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
610
- DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct network_interface));
621
+static void initialize(void)
622
+{
623
+ physical_interfaces = dictionary_create_advanced(
624
+ DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct network_interface));
625
612
- virtual_interfaces = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
613
- DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct network_interface));
626
+ virtual_interfaces = dictionary_create_advanced(
627
+ DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct network_interface));
628
629
dictionary_register_insert_callback(physical_interfaces, dict_interface_insert_cb, NULL);
630
dictionary_register_insert_callback(virtual_interfaces, dict_interface_insert_cb, NULL);
631
}
632
619
-static void add_interface_labels(RRDSET *st, const char *name, bool physical) {
633
+static void add_interface_labels(RRDSET *st, const char *name, bool physical)
634
+{
635
rrdlabels_add(st->rrdlabels, "device", name, RRDLABEL_SRC_AUTO);
636
rrdlabels_add(st->rrdlabels, "interface_type", physical ? "real" : "virtual", RRDLABEL_SRC_AUTO);
637
}
638
624
-static bool is_physical_interface(const char *name) {
639
+static bool is_physical_interface(const char *name)
640
+{
641
void *d = dictionary_get(physical_interfaces, name);
642
return d ? true : false;
643
}
644
629
-static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every, bool physical, usec_t now_ut) {
645
+static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every, bool physical, usec_t now_ut)
646
+{
647
DICTIONARY *dict = physical ? physical_interfaces : virtual_interfaces;
648
632
- PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, physical ? "Network Interface" : "Network Adapter");
633
- if(!pObjectType) return false;
649
+ PERF_OBJECT_TYPE *pObjectType =
650
+ perflibFindObjectTypeByName(pDataBlock, physical ? "Network Interface" : "Network Adapter");
651
+ if (!pObjectType)
652
+ return false;
653
654
uint64_t total_received = 0, total_sent = 0;
655
656
PERF_INSTANCE_DEFINITION *pi = NULL;
638
- for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
657
+ for (LONG i = 0; i < pObjectType->NumInstances; i++) {
658
pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
640
- if(!pi) break;
659
+ if (!pi)
660
+ break;
661
642
- if(!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
662
+ if (!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
663
strncpyz(windows_shared_buffer, "[unknown]", sizeof(windows_shared_buffer) - 1);
664
645
- if(strcasecmp(windows_shared_buffer, "_Total") == 0)
665
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0)
666
continue;
667
648
- if(!physical && is_physical_interface(windows_shared_buffer))
668
+ if (!physical && is_physical_interface(windows_shared_buffer))
669
// this virtual interface is already reported as physical interface
670
continue;
671
672
struct network_interface *d = dictionary_set(dict, windows_shared_buffer, NULL, sizeof(*d));
673
d->last_collected = now_ut;
674
655
- if(!d->collected_metadata) {
675
+ if (!d->collected_metadata) {
676
// TODO - get metadata about the network interface
677
d->collected_metadata = true;
678
}
679
660
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->traffic.received) &&
680
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->traffic.received) &&
681
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->traffic.sent)) {
662
-
663
- if(d->traffic.received.current.Data == 0 && d->traffic.sent.current.Data == 0)
682
+ if (d->traffic.received.current.Data == 0 && d->traffic.sent.current.Data == 0)
683
// this interface has not received or sent any traffic yet
684
continue;
685
@@ -681,8 +700,10 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
700
701
add_interface_labels(d->traffic.st, windows_shared_buffer, physical);
702
684
- d->traffic.rd_received = rrddim_add(d->traffic.st, "received", NULL, 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
685
- d->traffic.rd_sent = rrddim_add(d->traffic.st, "sent", NULL, -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
703
+ d->traffic.rd_received =
704
+ rrddim_add(d->traffic.st, "received", NULL, 8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
705
+ d->traffic.rd_sent =
706
+ rrddim_add(d->traffic.st, "sent", NULL, -8, BITS_IN_A_KILOBIT, RRD_ALGORITHM_INCREMENTAL);
707
708
d->traffic.chart_var_speed = rrdvar_chart_variable_add_and_acquire(d->traffic.st, "nic_speed_max");
709
rrdvar_chart_variable_set(d->traffic.st, d->traffic.chart_var_speed, NAN);
@@ -691,14 +712,14 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
712
total_received += d->traffic.received.current.Data;
713
total_sent += d->traffic.sent.current.Data;
714
694
- rrddim_set_by_pointer(d->traffic.st, d->traffic.rd_received, (collected_number)d->traffic.received.current.Data);
715
+ rrddim_set_by_pointer(
716
+ d->traffic.st, d->traffic.rd_received, (collected_number)d->traffic.received.current.Data);
717
rrddim_set_by_pointer(d->traffic.st, d->traffic.rd_sent, (collected_number)d->traffic.sent.current.Data);
718
rrdset_done(d->traffic.st);
719
}
720
699
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->packets.received) &&
721
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->packets.received) &&
722
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->packets.sent)) {
701
-
723
if (unlikely(!d->packets.st)) {
724
d->packets.st = rrdset_create_localhost(
725
"net_packets",
@@ -720,57 +741,58 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
741
d->packets.rd_sent = rrddim_add(d->packets.st, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
742
}
743
723
- rrddim_set_by_pointer(d->packets.st, d->packets.rd_received, (collected_number)d->packets.received.current.Data);
744
+ rrddim_set_by_pointer(
745
+ d->packets.st, d->packets.rd_received, (collected_number)d->packets.received.current.Data);
746
rrddim_set_by_pointer(d->packets.st, d->packets.rd_sent, (collected_number)d->packets.sent.current.Data);
747
rrdset_done(d->packets.st);
748
}
749
728
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->speed.current_bandwidth)) {
729
- if(unlikely(!d->speed.st)) {
750
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->speed.current_bandwidth)) {
751
+ if (unlikely(!d->speed.st)) {
752
d->speed.st = rrdset_create_localhost(
731
- "net_speed"
732
- , windows_shared_buffer
733
- , NULL
734
- , windows_shared_buffer
735
- , "net.speed"
736
- , "Interface Speed"
737
- , "kilobits/s"
738
- , PLUGIN_WINDOWS_NAME
739
- , "PerflibNetwork"
740
- , NETDATA_CHART_PRIO_FIRST_NET_IFACE + 10
741
- , update_every
742
- , RRDSET_TYPE_LINE
743
- );
753
+ "net_speed",
754
+ windows_shared_buffer,
755
+ NULL,
756
+ windows_shared_buffer,
757
+ "net.speed",
758
+ "Interface Speed",
759
+ "kilobits/s",
760
+ PLUGIN_WINDOWS_NAME,
761
+ "PerflibNetwork",
762
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 10,
763
+ update_every,
764
+ RRDSET_TYPE_LINE);
765
766
add_interface_labels(d->speed.st, windows_shared_buffer, physical);
767
747
- d->speed.rd = rrddim_add(d->speed.st, "speed", NULL, 1, BITS_IN_A_KILOBIT, RRD_ALGORITHM_ABSOLUTE);
768
+ d->speed.rd = rrddim_add(d->speed.st, "speed", NULL, 1, BITS_IN_A_KILOBIT, RRD_ALGORITHM_ABSOLUTE);
769
}
770
771
rrddim_set_by_pointer(d->speed.st, d->speed.rd, (collected_number)d->speed.current_bandwidth.current.Data);
772
rrdset_done(d->speed.st);
773
753
- rrdvar_chart_variable_set(d->traffic.st, d->traffic.chart_var_speed,
754
- (NETDATA_DOUBLE)d->speed.current_bandwidth.current.Data / BITS_IN_A_KILOBIT);
774
+ rrdvar_chart_variable_set(
775
+ d->traffic.st,
776
+ d->traffic.chart_var_speed,
777
+ (NETDATA_DOUBLE)d->speed.current_bandwidth.current.Data / BITS_IN_A_KILOBIT);
778
}
779
757
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->errors.received) &&
758
- perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->errors.outbound)) {
759
-
780
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->errors.received) &&
781
+ perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->errors.outbound)) {
782
if (unlikely(!d->errors.st)) {
783
d->errors.st = rrdset_create_localhost(
762
- "net_errors",
763
- windows_shared_buffer,
764
- NULL,
765
- windows_shared_buffer,
766
- "net.errors",
767
- "Interface Errors",
768
- "errors/s",
769
- PLUGIN_WINDOWS_NAME,
770
- "PerflibNetwork",
771
- NETDATA_CHART_PRIO_FIRST_NET_IFACE + 3,
772
- update_every,
773
- RRDSET_TYPE_LINE);
784
+ "net_errors",
785
+ windows_shared_buffer,
786
+ NULL,
787
+ windows_shared_buffer,
788
+ "net.errors",
789
+ "Interface Errors",
790
+ "errors/s",
791
+ PLUGIN_WINDOWS_NAME,
792
+ "PerflibNetwork",
793
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 3,
794
+ update_every,
795
+ RRDSET_TYPE_LINE);
796
797
add_interface_labels(d->errors.st, windows_shared_buffer, physical);
798
@@ -778,55 +800,59 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
800
d->errors.rd_outbound = rrddim_add(d->errors.st, "outbound", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
801
}
802
781
- rrddim_set_by_pointer(d->errors.st, d->errors.rd_received, (collected_number)d->errors.received.current.Data);
782
- rrddim_set_by_pointer(d->errors.st, d->errors.rd_outbound, (collected_number)d->errors.outbound.current.Data);
803
+ rrddim_set_by_pointer(
804
+ d->errors.st, d->errors.rd_received, (collected_number)d->errors.received.current.Data);
805
+ rrddim_set_by_pointer(
806
+ d->errors.st, d->errors.rd_outbound, (collected_number)d->errors.outbound.current.Data);
807
rrdset_done(d->errors.st);
808
}
809
786
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->discards.received) &&
787
- perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->discards.outbound)) {
788
-
810
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->discards.received) &&
811
+ perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->discards.outbound)) {
812
if (unlikely(!d->discards.st)) {
813
d->discards.st = rrdset_create_localhost(
791
- "net_drops",
792
- windows_shared_buffer,
793
- NULL,
794
- windows_shared_buffer,
795
- "net.drops",
796
- "Interface Drops",
797
- "drops/s",
798
- PLUGIN_WINDOWS_NAME,
799
- "PerflibNetwork",
800
- NETDATA_CHART_PRIO_FIRST_NET_IFACE + 4,
801
- update_every,
802
- RRDSET_TYPE_LINE);
814
+ "net_drops",
815
+ windows_shared_buffer,
816
+ NULL,
817
+ windows_shared_buffer,
818
+ "net.drops",
819
+ "Interface Drops",
820
+ "drops/s",
821
+ PLUGIN_WINDOWS_NAME,
822
+ "PerflibNetwork",
823
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 4,
824
+ update_every,
825
+ RRDSET_TYPE_LINE);
826
827
add_interface_labels(d->discards.st, windows_shared_buffer, physical);
828
829
d->discards.rd_received = rrddim_add(d->discards.st, "inbound", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
807
- d->discards.rd_outbound = rrddim_add(d->discards.st, "outbound", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
830
+ d->discards.rd_outbound =
831
+ rrddim_add(d->discards.st, "outbound", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
832
}
833
810
- rrddim_set_by_pointer(d->discards.st, d->discards.rd_received, (collected_number)d->discards.received.current.Data);
811
- rrddim_set_by_pointer(d->discards.st, d->discards.rd_outbound, (collected_number)d->discards.outbound.current.Data);
834
+ rrddim_set_by_pointer(
835
+ d->discards.st, d->discards.rd_received, (collected_number)d->discards.received.current.Data);
836
+ rrddim_set_by_pointer(
837
+ d->discards.st, d->discards.rd_outbound, (collected_number)d->discards.outbound.current.Data);
838
rrdset_done(d->discards.st);
839
}
840
815
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->queue.length)) {
841
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->queue.length)) {
842
if (unlikely(!d->queue.st)) {
843
d->queue.st = rrdset_create_localhost(
818
- "net_queue_length",
819
- windows_shared_buffer,
820
- NULL,
821
- windows_shared_buffer,
822
- "net.queue_length",
823
- "Interface Output Queue Length",
824
- "packets",
825
- PLUGIN_WINDOWS_NAME,
826
- "PerflibNetwork",
827
- NETDATA_CHART_PRIO_FIRST_NET_IFACE + 5,
828
- update_every,
829
- RRDSET_TYPE_LINE);
844
+ "net_queue_length",
845
+ windows_shared_buffer,
846
+ NULL,
847
+ windows_shared_buffer,
848
+ "net.queue_length",
849
+ "Interface Output Queue Length",
850
+ "packets",
851
+ PLUGIN_WINDOWS_NAME,
852
+ "PerflibNetwork",
853
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 5,
854
+ update_every,
855
+ RRDSET_TYPE_LINE);
856
857
add_interface_labels(d->queue.st, windows_shared_buffer, physical);
858
@@ -837,46 +863,48 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
863
rrdset_done(d->queue.st);
864
}
865
840
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.connections)) {
866
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.connections)) {
867
if (unlikely(!d->rsc.st_connections)) {
868
d->rsc.st_connections = rrdset_create_localhost(
843
- "net_rsc_connections",
844
- windows_shared_buffer,
845
- NULL,
846
- windows_shared_buffer,
847
- "net.rsc_connections",
848
- "Active TCP Connections Offloaded by RSC",
849
- "connections",
850
- PLUGIN_WINDOWS_NAME,
851
- "PerflibNetwork",
852
- NETDATA_CHART_PRIO_FIRST_NET_IFACE + 6,
853
- update_every,
854
- RRDSET_TYPE_LINE);
869
+ "net_rsc_connections",
870
+ windows_shared_buffer,
871
+ NULL,
872
+ windows_shared_buffer,
873
+ "net.rsc_connections",
874
+ "Active TCP Connections Offloaded by RSC",
875
+ "connections",
876
+ PLUGIN_WINDOWS_NAME,
877
+ "PerflibNetwork",
878
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 6,
879
+ update_every,
880
+ RRDSET_TYPE_LINE);
881
882
add_interface_labels(d->rsc.st_connections, windows_shared_buffer, physical);
883
858
- d->rsc.rd_connections = rrddim_add(d->rsc.st_connections, "connections", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
884
+ d->rsc.rd_connections =
885
+ rrddim_add(d->rsc.st_connections, "connections", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
886
}
887
861
- rrddim_set_by_pointer(d->rsc.st_connections, d->rsc.rd_connections, (collected_number)d->rsc.connections.current.Data);
888
+ rrddim_set_by_pointer(
889
+ d->rsc.st_connections, d->rsc.rd_connections, (collected_number)d->rsc.connections.current.Data);
890
rrdset_done(d->rsc.st_connections);
891
}
892
865
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.packets)) {
893
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.packets)) {
894
if (unlikely(!d->rsc.st_packets)) {
895
d->rsc.st_packets = rrdset_create_localhost(
868
- "net_rsc_packets",
869
- windows_shared_buffer,
870
- NULL,
871
- windows_shared_buffer,
872
- "net.rsc_packets",
873
- "TCP RSC Coalesced Packets",
874
- "packets/s",
875
- PLUGIN_WINDOWS_NAME,
876
- "PerflibNetwork",
877
- NETDATA_CHART_PRIO_FIRST_NET_IFACE + 7,
878
- update_every,
879
- RRDSET_TYPE_LINE);
896
+ "net_rsc_packets",
897
+ windows_shared_buffer,
898
+ NULL,
899
+ windows_shared_buffer,
900
+ "net.rsc_packets",
901
+ "TCP RSC Coalesced Packets",
902
+ "packets/s",
903
+ PLUGIN_WINDOWS_NAME,
904
+ "PerflibNetwork",
905
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 7,
906
+ update_every,
907
+ RRDSET_TYPE_LINE);
908
909
add_interface_labels(d->rsc.st_packets, windows_shared_buffer, physical);
910
@@ -887,71 +915,77 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
915
rrdset_done(d->rsc.st_packets);
916
}
917
890
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.exceptions)) {
918
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.exceptions)) {
919
if (unlikely(!d->rsc.st_exceptions)) {
920
d->rsc.st_exceptions = rrdset_create_localhost(
893
- "net_rsc_exceptions",
894
- windows_shared_buffer,
895
- NULL,
896
- windows_shared_buffer,
897
- "net.rsc_exceptions",
898
- "TCP RSC Exceptions",
899
- "exceptions/s",
900
- PLUGIN_WINDOWS_NAME,
901
- "PerflibNetwork",
902
- NETDATA_CHART_PRIO_FIRST_NET_IFACE + 8,
903
- update_every,
904
- RRDSET_TYPE_LINE);
921
+ "net_rsc_exceptions",
922
+ windows_shared_buffer,
923
+ NULL,
924
+ windows_shared_buffer,
925
+ "net.rsc_exceptions",
926
+ "TCP RSC Exceptions",
927
+ "exceptions/s",
928
+ PLUGIN_WINDOWS_NAME,
929
+ "PerflibNetwork",
930
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 8,
931
+ update_every,
932
+ RRDSET_TYPE_LINE);
933
934
add_interface_labels(d->rsc.st_exceptions, windows_shared_buffer, physical);
935
908
- d->rsc.rd_exceptions = rrddim_add(d->rsc.st_exceptions, "exceptions", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
936
+ d->rsc.rd_exceptions =
937
+ rrddim_add(d->rsc.st_exceptions, "exceptions", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
938
}
939
911
- rrddim_set_by_pointer(d->rsc.st_exceptions, d->rsc.rd_exceptions, (collected_number)d->rsc.exceptions.current.Data);
940
+ rrddim_set_by_pointer(
941
+ d->rsc.st_exceptions, d->rsc.rd_exceptions, (collected_number)d->rsc.exceptions.current.Data);
942
rrdset_done(d->rsc.st_exceptions);
943
}
944
915
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.average_packet_size)) {
945
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->rsc.average_packet_size)) {
946
if (unlikely(!d->rsc.st_average_packet_size)) {
947
d->rsc.st_average_packet_size = rrdset_create_localhost(
918
- "net_rsc_average_packet_size",
919
- windows_shared_buffer,
920
- NULL,
921
- windows_shared_buffer,
922
- "net.rsc_average_packet_size",
923
- "TCP RSC Average Packet Size",
924
- "bytes",
925
- PLUGIN_WINDOWS_NAME,
926
- "PerflibNetwork",
927
- NETDATA_CHART_PRIO_FIRST_NET_IFACE + 9,
928
- update_every,
929
- RRDSET_TYPE_LINE);
948
+ "net_rsc_average_packet_size",
949
+ windows_shared_buffer,
950
+ NULL,
951
+ windows_shared_buffer,
952
+ "net.rsc_average_packet_size",
953
+ "TCP RSC Average Packet Size",
954
+ "bytes",
955
+ PLUGIN_WINDOWS_NAME,
956
+ "PerflibNetwork",
957
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 9,
958
+ update_every,
959
+ RRDSET_TYPE_LINE);
960
961
add_interface_labels(d->rsc.st_average_packet_size, windows_shared_buffer, physical);
962
933
- d->rsc.rd_average_packet_size = rrddim_add(d->rsc.st_average_packet_size, "average", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
963
+ d->rsc.rd_average_packet_size =
964
+ rrddim_add(d->rsc.st_average_packet_size, "average", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
965
}
966
936
- rrddim_set_by_pointer(d->rsc.st_average_packet_size, d->rsc.rd_average_packet_size, (collected_number)d->rsc.average_packet_size.current.Data);
967
+ rrddim_set_by_pointer(
968
+ d->rsc.st_average_packet_size,
969
+ d->rsc.rd_average_packet_size,
970
+ (collected_number)d->rsc.average_packet_size.current.Data);
971
rrdset_done(d->rsc.st_average_packet_size);
972
}
973
940
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->chimney.connections)) {
974
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->chimney.connections)) {
975
if (unlikely(!d->chimney.st)) {
976
d->chimney.st = rrdset_create_localhost(
943
- "net_chimney_connections",
944
- windows_shared_buffer,
945
- NULL,
946
- windows_shared_buffer,
947
- "net.chimney_connections",
948
- "Active TCP Connections Offloaded with Chimney",
949
- "connections",
950
- PLUGIN_WINDOWS_NAME,
951
- "PerflibNetwork",
952
- NETDATA_CHART_PRIO_FIRST_NET_IFACE + 10,
953
- update_every,
954
- RRDSET_TYPE_LINE);
977
+ "net_chimney_connections",
978
+ windows_shared_buffer,
979
+ NULL,
980
+ windows_shared_buffer,
981
+ "net.chimney_connections",
982
+ "Active TCP Connections Offloaded with Chimney",
983
+ "connections",
984
+ PLUGIN_WINDOWS_NAME,
985
+ "PerflibNetwork",
986
+ NETDATA_CHART_PRIO_FIRST_NET_IFACE + 10,
987
+ update_every,
988
+ RRDSET_TYPE_LINE);
989
990
add_interface_labels(d->chimney.st, windows_shared_buffer, physical);
991
@@ -963,7 +997,7 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
997
}
998
}
999
966
- if(physical) {
1000
+ if (physical) {
1001
static RRDSET *st = NULL;
1002
static RRDDIM *rd_received = NULL, *rd_sent = NULL;
1003
@@ -994,8 +1028,9 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
1028
// cleanup
1029
{
1030
struct network_interface *d;
997
- dfe_start_write(dict, d) {
998
- if(d->last_collected < now_ut) {
1031
+ dfe_start_write(dict, d)
1032
+ {
1033
+ if (d->last_collected < now_ut) {
1034
network_interface_cleanup(d);
1035
dictionary_del(dict, d_dfe.name);
1036
}
@@ -1007,36 +1042,38 @@ static bool do_network_interface(PERF_DATA_BLOCK *pDataBlock, int update_every,
1042
return true;
1043
}
1044
1010
-int do_PerflibNetwork(int update_every, usec_t dt __maybe_unused) {
1045
+int do_PerflibNetwork(int update_every, usec_t dt __maybe_unused)
1046
+{
1047
static bool initialized = false;
1048
1013
- if(unlikely(!initialized)) {
1049
+ if (unlikely(!initialized)) {
1050
initialize();
1051
initialized = true;
1052
}
1053
1054
DWORD id = RegistryFindIDByName("Network Interface");
1019
- if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
1055
+ if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
1056
return -1;
1057
1058
PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
1023
- if(!pDataBlock) return -1;
1059
+ if (!pDataBlock)
1060
+ return -1;
1061
1062
usec_t now_ut = now_monotonic_usec();
1063
do_network_interface(pDataBlock, update_every, true, now_ut);
1064
do_network_interface(pDataBlock, update_every, false, now_ut);
1065
1066
struct network_protocol *tcp4 = NULL, *tcp6 = NULL;
1030
- for(size_t i = 0; networks[i].protocol ;i++) {
1067
+ for (size_t i = 0; networks[i].protocol; i++) {
1068
do_network_protocol(pDataBlock, update_every, &networks[i]);
1069
1033
- if(!tcp4 && strcmp(networks[i].protocol, "TCPv4") == 0)
1070
+ if (!tcp4 && strcmp(networks[i].protocol, "TCPv4") == 0)
1071
tcp4 = &networks[i];
1035
- if(!tcp6 && strcmp(networks[i].protocol, "TCPv6") == 0)
1072
+ if (!tcp6 && strcmp(networks[i].protocol, "TCPv6") == 0)
1073
tcp6 = &networks[i];
1074
}
1075
1039
- if(tcp4 && tcp6) {
1076
+ if (tcp4 && tcp6) {
1077
tcp46.packets.received = tcp4->packets.received;
1078
tcp46.packets.sent = tcp4->packets.sent;
1079
tcp46.packets.received.current.Data += tcp6->packets.received.current.Data;
src/collectors/windows.plugin/perflib-objects.c
+12
-8
@@ -7,18 +7,20 @@
7
#define _COMMON_PLUGIN_MODULE_NAME "PerflibObjects"
8
#include "../common-contexts/common-contexts.h"
9
10
-static void initialize(void) {
10
+static void initialize(void)
11
+{
12
;
13
}
14
14
-static bool do_objects(PERF_DATA_BLOCK *pDataBlock, int update_every) {
15
+static bool do_objects(PERF_DATA_BLOCK *pDataBlock, int update_every)
16
+{
17
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Objects");
18
if (!pObjectType)
19
return false;
20
19
- static COUNTER_DATA semaphores = { .key = "Semaphores" };
21
+ static COUNTER_DATA semaphores = {.key = "Semaphores"};
22
21
- if(perflibGetObjectCounter(pDataBlock, pObjectType, &semaphores)) {
23
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &semaphores)) {
24
ULONGLONG sem = semaphores.current.Data;
25
common_semaphore_ipc(sem, WINDOWS_MAX_KERNEL_OBJECT, _COMMON_PLUGIN_MODULE_NAME, update_every);
26
}
@@ -26,20 +28,22 @@ static bool do_objects(PERF_DATA_BLOCK *pDataBlock, int update_every) {
28
return true;
29
}
30
29
-int do_PerflibObjects(int update_every, usec_t dt __maybe_unused) {
31
+int do_PerflibObjects(int update_every, usec_t dt __maybe_unused)
32
+{
33
static bool initialized = false;
34
32
- if(unlikely(!initialized)) {
35
+ if (unlikely(!initialized)) {
36
initialize();
37
initialized = true;
38
}
39
40
DWORD id = RegistryFindIDByName("Objects");
38
- if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
41
+ if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
42
return -1;
43
44
PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
42
- if(!pDataBlock) return -1;
45
+ if (!pDataBlock)
46
+ return -1;
47
48
do_objects(pDataBlock, update_every);
49
src/collectors/windows.plugin/perflib-processes.c
+17
-13
@@ -7,50 +7,54 @@
7
#define _COMMON_PLUGIN_MODULE_NAME "PerflibProcesses"
8
#include "../common-contexts/common-contexts.h"
9
10
-static void initialize(void) {
10
+static void initialize(void)
11
+{
12
;
13
}
14
14
-static bool do_processes(PERF_DATA_BLOCK *pDataBlock, int update_every) {
15
+static bool do_processes(PERF_DATA_BLOCK *pDataBlock, int update_every)
16
+{
17
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "System");
18
if (!pObjectType)
19
return false;
20
19
- static COUNTER_DATA processesRunning = { .key = "Processes" };
20
- static COUNTER_DATA contextSwitchPerSec = { .key = "Context Switches/sec" };
21
- static COUNTER_DATA threads = { .key = "Threads" };
21
+ static COUNTER_DATA processesRunning = {.key = "Processes"};
22
+ static COUNTER_DATA contextSwitchPerSec = {.key = "Context Switches/sec"};
23
+ static COUNTER_DATA threads = {.key = "Threads"};
24
23
- if(perflibGetObjectCounter(pDataBlock, pObjectType, &processesRunning)) {
25
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &processesRunning)) {
26
ULONGLONG running = processesRunning.current.Data;
27
common_system_processes(running, update_every);
28
}
29
28
- if(perflibGetObjectCounter(pDataBlock, pObjectType, &contextSwitchPerSec)) {
30
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &contextSwitchPerSec)) {
31
ULONGLONG contexts = contextSwitchPerSec.current.Data;
32
common_system_context_switch(contexts, update_every);
33
}
34
33
- if(perflibGetObjectCounter(pDataBlock, pObjectType, &threads)) {
35
+ if (perflibGetObjectCounter(pDataBlock, pObjectType, &threads)) {
36
ULONGLONG totalThreads = threads.current.Data;
35
- common_system_threads(totalThreads, update_every);
37
+ common_system_threads(totalThreads, update_every);
38
}
39
return true;
40
}
41
40
-int do_PerflibProcesses(int update_every, usec_t dt __maybe_unused) {
42
+int do_PerflibProcesses(int update_every, usec_t dt __maybe_unused)
43
+{
44
static bool initialized = false;
45
43
- if(unlikely(!initialized)) {
46
+ if (unlikely(!initialized)) {
47
initialize();
48
initialized = true;
49
}
50
51
DWORD id = RegistryFindIDByName("System");
49
- if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
52
+ if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
53
return -1;
54
55
PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
53
- if(!pDataBlock) return -1;
56
+ if (!pDataBlock)
57
+ return -1;
58
59
do_processes(pDataBlock, update_every);
60
src/collectors/windows.plugin/perflib-processor.c
+75
-68
@@ -17,8 +17,8 @@ struct processor {
17
RRDDIM *rd_dpc;
18
RRDDIM *rd_idle;
19
20
-// RRDSET *st2;
21
-// RRDDIM *rd2_busy;
20
+ // RRDSET *st2;
21
+ // RRDDIM *rd2_busy;
22
23
COUNTER_DATA percentProcessorTime;
24
COUNTER_DATA percentUserTime;
@@ -30,9 +30,10 @@ struct processor {
30
COUNTER_DATA interruptsPerSec;
31
};
32
33
-struct processor total = { 0 };
33
+struct processor total = {0};
34
35
-void initialize_processor_keys(struct processor *p) {
35
+void initialize_processor_keys(struct processor *p)
36
+{
37
p->percentProcessorTime.key = "% Processor Time";
38
p->percentUserTime.key = "% User Time";
39
p->percentPrivilegedTime.key = "% Privileged Time";
@@ -42,57 +43,61 @@ void initialize_processor_keys(struct processor *p) {
43
p->interruptsPerSec.key = "Interrupts/sec";
44
}
45
45
-void dict_processor_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
46
+void dict_processor_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
47
+{
48
struct processor *p = value;
49
initialize_processor_keys(p);
50
}
51
52
static DICTIONARY *processors = NULL;
53
52
-static void initialize(void) {
54
+static void initialize(void)
55
+{
56
initialize_processor_keys(&total);
57
55
- processors = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
56
- DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct processor));
58
+ processors = dictionary_create_advanced(
59
+ DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct processor));
60
61
dictionary_register_insert_callback(processors, dict_processor_insert_cb, NULL);
62
}
63
61
-static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every) {
64
+static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every)
65
+{
66
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Processor");
63
- if(!pObjectType) return false;
67
+ if (!pObjectType)
68
+ return false;
69
70
static const RRDVAR_ACQUIRED *cpus_var = NULL;
71
int cores_found = 0;
72
uint64_t totalIPC = 0;
73
74
PERF_INSTANCE_DEFINITION *pi = NULL;
70
- for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
75
+ for (LONG i = 0; i < pObjectType->NumInstances; i++) {
76
pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
72
- if(!pi) break;
77
+ if (!pi)
78
+ break;
79
74
- if(!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
80
+ if (!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
81
strncpyz(windows_shared_buffer, "[unknown]", sizeof(windows_shared_buffer) - 1);
82
83
bool is_total = false;
84
struct processor *p;
85
int cpu = -1;
80
- if(strcasecmp(windows_shared_buffer, "_Total") == 0) {
86
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0) {
87
p = &total;
88
is_total = true;
89
cpu = -1;
84
- }
85
- else {
90
+ } else {
91
p = dictionary_set(processors, windows_shared_buffer, NULL, sizeof(*p));
92
is_total = false;
93
cpu = str2i(windows_shared_buffer);
94
snprintfz(windows_shared_buffer, sizeof(windows_shared_buffer), "cpu%d", cpu);
95
91
- if(cpu + 1 > cores_found)
96
+ if (cpu + 1 > cores_found)
97
cores_found = cpu + 1;
98
}
99
95
- if(!is_total && !p->collected_metadata) {
100
+ if (!is_total && !p->collected_metadata) {
101
// TODO collect processor metadata
102
p->collected_metadata = true;
103
}
@@ -106,29 +111,29 @@ static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every) {
111
112
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &p->interruptsPerSec);
113
109
- if(!p->st) {
114
+ if (!p->st) {
115
p->st = rrdset_create_localhost(
111
- is_total ? "system" : "cpu"
112
- , is_total ? "cpu" : windows_shared_buffer, NULL
113
- , is_total ? "cpu" : "utilization"
114
- , is_total ? "system.cpu" : "cpu.cpu"
115
- , is_total ? "Total CPU Utilization" : "Core Utilization"
116
- , "percentage"
117
- , PLUGIN_WINDOWS_NAME
118
- , "PerflibProcessor"
119
- , is_total ? NETDATA_CHART_PRIO_SYSTEM_CPU : NETDATA_CHART_PRIO_CPU_PER_CORE
120
- , update_every
121
- , RRDSET_TYPE_STACKED
122
- );
123
-
124
- p->rd_irq = rrddim_add(p->st, "interrupts", "irq", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
125
- p->rd_user = rrddim_add(p->st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
126
- p->rd_system = rrddim_add(p->st, "privileged", "system", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
127
- p->rd_dpc = rrddim_add(p->st, "dpc", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
128
- p->rd_idle = rrddim_add(p->st, "idle", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
116
+ is_total ? "system" : "cpu",
117
+ is_total ? "cpu" : windows_shared_buffer,
118
+ NULL,
119
+ is_total ? "cpu" : "utilization",
120
+ is_total ? "system.cpu" : "cpu.cpu",
121
+ is_total ? "Total CPU Utilization" : "Core Utilization",
122
+ "percentage",
123
+ PLUGIN_WINDOWS_NAME,
124
+ "PerflibProcessor",
125
+ is_total ? NETDATA_CHART_PRIO_SYSTEM_CPU : NETDATA_CHART_PRIO_CPU_PER_CORE,
126
+ update_every,
127
+ RRDSET_TYPE_STACKED);
128
+
129
+ p->rd_irq = rrddim_add(p->st, "interrupts", "irq", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
130
+ p->rd_user = rrddim_add(p->st, "user", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
131
+ p->rd_system = rrddim_add(p->st, "privileged", "system", 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
132
+ p->rd_dpc = rrddim_add(p->st, "dpc", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
133
+ p->rd_idle = rrddim_add(p->st, "idle", NULL, 1, 1, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL);
134
rrddim_hide(p->st, "idle");
135
131
- if(!is_total)
136
+ if (!is_total)
137
rrdlabels_add(p->st->rrdlabels, "cpu", windows_shared_buffer, RRDLABEL_SRC_AUTO);
138
else
139
cpus_var = rrdvar_host_variable_add_and_acquire(localhost, "active_processors");
@@ -149,34 +154,34 @@ static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every) {
154
rrddim_set_by_pointer(p->st, p->rd_idle, (collected_number)idle);
155
rrdset_done(p->st);
156
152
-// if(!p->st2) {
153
-// p->st2 = rrdset_create_localhost(
154
-// is_total ? "system" : "cpu2"
155
-// , is_total ? "cpu3" : buffer
156
-// , NULL
157
-// , is_total ? "utilization" : buffer
158
-// , is_total ? "system.cpu3" : "cpu2.cpu"
159
-// , is_total ? "Total CPU Utilization" : "Core Utilization"
160
-// , "percentage"
161
-// , PLUGIN_WINDOWS_NAME
162
-// , "PerflibProcessor"
163
-// , is_total ? NETDATA_CHART_PRIO_SYSTEM_CPU : NETDATA_CHART_PRIO_CPU_PER_CORE
164
-// , update_every
165
-// , RRDSET_TYPE_STACKED
166
-// );
167
-//
168
-// p->rd2_busy = perflib_rrddim_add(p->st2, "busy", NULL, 1, 1, &p->percentProcessorTime);
169
-// rrddim_hide(p->st2, "idle");
170
-//
171
-// if(!is_total)
172
-// rrdlabels_add(p->st->rrdlabels, "cpu", buffer, RRDLABEL_SRC_AUTO);
173
-// }
174
-//
175
-// perflib_rrddim_set_by_pointer(p->st2, p->rd2_busy, &p->percentProcessorTime);
176
-// rrdset_done(p->st2);
157
+ // if(!p->st2) {
158
+ // p->st2 = rrdset_create_localhost(
159
+ // is_total ? "system" : "cpu2"
160
+ // , is_total ? "cpu3" : buffer
161
+ // , NULL
162
+ // , is_total ? "utilization" : buffer
163
+ // , is_total ? "system.cpu3" : "cpu2.cpu"
164
+ // , is_total ? "Total CPU Utilization" : "Core Utilization"
165
+ // , "percentage"
166
+ // , PLUGIN_WINDOWS_NAME
167
+ // , "PerflibProcessor"
168
+ // , is_total ? NETDATA_CHART_PRIO_SYSTEM_CPU : NETDATA_CHART_PRIO_CPU_PER_CORE
169
+ // , update_every
170
+ // , RRDSET_TYPE_STACKED
171
+ // );
172
+ //
173
+ // p->rd2_busy = perflib_rrddim_add(p->st2, "busy", NULL, 1, 1, &p->percentProcessorTime);
174
+ // rrddim_hide(p->st2, "idle");
175
+ //
176
+ // if(!is_total)
177
+ // rrdlabels_add(p->st->rrdlabels, "cpu", buffer, RRDLABEL_SRC_AUTO);
178
+ // }
179
+ //
180
+ // perflib_rrddim_set_by_pointer(p->st2, p->rd2_busy, &p->percentProcessorTime);
181
+ // rrdset_done(p->st2);
182
}
183
179
- if(cpus_var)
184
+ if (cpus_var)
185
rrdvar_host_variable_set(localhost, cpus_var, cores_found);
186
187
common_interrupts(totalIPC, update_every, NULL);
@@ -184,20 +189,22 @@ static bool do_processors(PERF_DATA_BLOCK *pDataBlock, int update_every) {
189
return true;
190
}
191
187
-int do_PerflibProcessor(int update_every, usec_t dt __maybe_unused) {
192
+int do_PerflibProcessor(int update_every, usec_t dt __maybe_unused)
193
+{
194
static bool initialized = false;
195
190
- if(unlikely(!initialized)) {
196
+ if (unlikely(!initialized)) {
197
initialize();
198
initialized = true;
199
}
200
201
DWORD id = RegistryFindIDByName("Processor");
196
- if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
202
+ if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
203
return -1;
204
205
PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
200
- if(!pDataBlock) return -1;
206
+ if (!pDataBlock)
207
+ return -1;
208
209
do_processors(pDataBlock, update_every);
210
src/collectors/windows.plugin/perflib-rrd.c
+26
-12
@@ -4,7 +4,14 @@
4
5
#define COLLECTED_NUMBER_PRECISION 10000
6
7
-RRDDIM *perflib_rrddim_add(RRDSET *st, const char *id, const char *name, collected_number multiplier, collected_number divider, COUNTER_DATA *cd) {
7
+RRDDIM *perflib_rrddim_add(
8
+ RRDSET *st,
9
+ const char *id,
10
+ const char *name,
11
+ collected_number multiplier,
12
+ collected_number divider,
13
+ COUNTER_DATA *cd)
14
+{
15
RRD_ALGORITHM algorithm = RRD_ALGORITHM_ABSOLUTE;
16
17
switch (cd->current.CounterType) {
@@ -22,7 +29,7 @@ RRDDIM *perflib_rrddim_add(RRDSET *st, const char *id, const char *name, collect
29
case PERF_COUNTER_100NS_QUEUELEN_TYPE:
30
case PERF_COUNTER_OBJ_TIME_QUEUELEN_TYPE:
31
case PERF_COUNTER_LARGE_QUEUELEN_TYPE:
25
- case PERF_AVERAGE_BULK: // normally not displayed
32
+ case PERF_AVERAGE_BULK: // normally not displayed
33
// (N1 - N0) / (D1 - D0)
34
algorithm = RRD_ALGORITHM_INCREMENTAL;
35
break;
@@ -115,16 +122,17 @@ RRDDIM *perflib_rrddim_add(RRDSET *st, const char *id, const char *name, collect
122
return rrddim_add(st, id, name, multiplier, divider, algorithm);
123
}
124
118
-#define VALID_DELTA(cd) \
125
+#define VALID_DELTA(cd) \
126
((cd)->previous.Time > 0 && (cd)->current.Data >= (cd)->previous.Data && (cd)->current.Time > (cd)->previous.Time)
127
121
-collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_DATA *cd) {
128
+collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_DATA *cd)
129
+{
130
ULONGLONG numerator = 0;
131
LONGLONG denominator = 0;
132
double doubleValue = 0.0;
133
collected_number value;
134
127
- switch(cd->current.CounterType) {
135
+ switch (cd->current.CounterType) {
136
case PERF_COUNTER_COUNTER:
137
case PERF_SAMPLE_COUNTER:
138
case PERF_COUNTER_BULK_COUNT:
@@ -136,7 +144,7 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
144
case PERF_COUNTER_100NS_QUEUELEN_TYPE:
145
case PERF_COUNTER_OBJ_TIME_QUEUELEN_TYPE:
146
case PERF_COUNTER_LARGE_QUEUELEN_TYPE:
139
- case PERF_AVERAGE_BULK: // normally not displayed
147
+ case PERF_AVERAGE_BULK: // normally not displayed
148
// (N1 - N0) / (D1 - D0)
149
value = (collected_number)cd->current.Data;
150
break;
@@ -155,7 +163,8 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
163
case PERF_COUNTER_TIMER_INV:
164
case PERF_100NSEC_TIMER_INV:
165
// 100 * (1 - ((N1 - N0) / (D1 - D0)))
158
- if(!VALID_DELTA(cd)) return 0;
166
+ if (!VALID_DELTA(cd))
167
+ return 0;
168
numerator = cd->current.Data - cd->previous.Data;
169
denominator = cd->current.Time - cd->previous.Time;
170
doubleValue = 100.0 * (1.0 - ((double)numerator / (double)denominator));
@@ -165,7 +174,8 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
174
175
case PERF_COUNTER_MULTI_TIMER:
176
// 100 * ((N1 - N0) / ((D1 - D0) / TB)) / B1
168
- if(!VALID_DELTA(cd)) return 0;
177
+ if (!VALID_DELTA(cd))
178
+ return 0;
179
numerator = cd->current.Data - cd->previous.Data;
180
denominator = cd->current.Time - cd->previous.Time;
181
denominator /= cd->current.Frequency;
@@ -176,7 +186,8 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
186
187
case PERF_100NSEC_MULTI_TIMER:
188
// 100 * ((N1 - N0) / (D1 - D0)) / B1
179
- if(!VALID_DELTA(cd)) return 0;
189
+ if (!VALID_DELTA(cd))
190
+ return 0;
191
numerator = cd->current.Data - cd->previous.Data;
192
denominator = cd->current.Time - cd->previous.Time;
193
doubleValue = 100.0 * ((double)numerator / (double)denominator) / (double)cd->current.MultiCounterData;
@@ -187,7 +198,8 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
198
case PERF_COUNTER_MULTI_TIMER_INV:
199
case PERF_100NSEC_MULTI_TIMER_INV:
200
// 100 * (B1 - ((N1 - N0) / (D1 - D0)))
190
- if(!VALID_DELTA(cd)) return 0;
201
+ if (!VALID_DELTA(cd))
202
+ return 0;
203
numerator = cd->current.Data - cd->previous.Data;
204
denominator = cd->current.Time - cd->previous.Time;
205
doubleValue = 100.0 * ((double)cd->current.MultiCounterData - ((double)numerator / (double)denominator));
@@ -209,14 +221,16 @@ collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_D
221
222
case PERF_COUNTER_DELTA:
223
case PERF_COUNTER_LARGE_DELTA:
212
- if(!VALID_DELTA(cd)) return 0;
224
+ if (!VALID_DELTA(cd))
225
+ return 0;
226
value = (collected_number)(cd->current.Data - cd->previous.Data);
227
break;
228
229
case PERF_RAW_FRACTION:
230
case PERF_LARGE_RAW_FRACTION:
231
// 100 * N / B
219
- if(!cd->current.Time) return 0;
232
+ if (!cd->current.Time)
233
+ return 0;
234
doubleValue = 100.0 * (double)cd->current.Data / (double)cd->current.Time;
235
// printf("Display value is (fraction): %f%%\n", doubleValue);
236
value = (collected_number)(doubleValue * COLLECTED_NUMBER_PRECISION);
src/collectors/windows.plugin/perflib-rrd.h
+7
-1
@@ -5,7 +5,13 @@
5
6
#include "database/rrd.h"
7
8
-RRDDIM *perflib_rrddim_add(RRDSET *st, const char *id, const char *name, collected_number multiplier, collected_number divider, COUNTER_DATA *cd);
8
+RRDDIM *perflib_rrddim_add(
9
+ RRDSET *st,
10
+ const char *id,
11
+ const char *name,
12
+ collected_number multiplier,
13
+ collected_number divider,
14
+ COUNTER_DATA *cd);
15
collected_number perflib_rrddim_set_by_pointer(RRDSET *st, RRDDIM *rd, COUNTER_DATA *cd);
16
17
#endif //NETDATA_PERFLIB_RRD_H
src/collectors/windows.plugin/perflib-storage.c
+219
-181
@@ -85,18 +85,22 @@ struct physical_disk system_physical_total = {
85
.collected_metadata = true,
86
};
87
88
-static void dict_logical_disk_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
88
+static void
89
+dict_logical_disk_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
90
+{
91
struct logical_disk *d = value;
92
93
d->percentDiskFree.key = "% Free Space";
94
// d->freeMegabytes.key = "Free Megabytes";
95
}
96
95
-static void logical_disk_cleanup(struct logical_disk *d) {
97
+static void logical_disk_cleanup(struct logical_disk *d)
98
+{
99
rrdset_is_obsolete___safe_from_collector_thread(d->st_disk_space);
100
}
101
99
-static void physical_disk_initialize(struct physical_disk *d) {
102
+static void physical_disk_initialize(struct physical_disk *d)
103
+{
104
d->percentIdleTime.key = "% Idle Time";
105
d->percentDiskTime.key = "% Disk Time";
106
d->percentDiskReadTime.key = "% Disk Read Time";
@@ -120,7 +124,8 @@ static void physical_disk_initialize(struct physical_disk *d) {
124
d->splitIoPerSec.key = "Split IO/Sec";
125
}
126
123
-static void physical_disk_cleanup(struct physical_disk *d) {
127
+static void physical_disk_cleanup(struct physical_disk *d)
128
+{
129
string_freez(d->device);
130
string_freez(d->mount_point);
131
string_freez(d->manufacturer);
@@ -141,31 +146,35 @@ static void physical_disk_cleanup(struct physical_disk *d) {
146
rrdset_is_obsolete___safe_from_collector_thread(d->st_split);
147
}
148
144
-void dict_physical_disk_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
149
+void dict_physical_disk_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
150
+{
151
struct physical_disk *pd = value;
152
physical_disk_initialize(pd);
153
}
154
155
static DICTIONARY *logicalDisks = NULL, *physicalDisks = NULL;
150
-static void initialize(void) {
156
+static void initialize(void)
157
+{
158
physical_disk_initialize(&system_physical_total);
159
153
- logicalDisks = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
154
- DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct logical_disk));
160
+ logicalDisks = dictionary_create_advanced(
161
+ DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct logical_disk));
162
163
dictionary_register_insert_callback(logicalDisks, dict_logical_disk_insert_cb, NULL);
164
158
- physicalDisks = dictionary_create_advanced(DICT_OPTION_DONT_OVERWRITE_VALUE |
159
- DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct physical_disk));
165
+ physicalDisks = dictionary_create_advanced(
166
+ DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct physical_disk));
167
168
dictionary_register_insert_callback(physicalDisks, dict_physical_disk_insert_cb, NULL);
169
}
170
164
-static STRING *getFileSystemType(struct logical_disk *d, const char* diskName) {
165
- if (!diskName || !*diskName) return NULL;
171
+static STRING *getFileSystemType(struct logical_disk *d, const char *diskName)
172
+{
173
+ if (!diskName || !*diskName)
174
+ return NULL;
175
167
- char fileSystemNameBuffer[128] = {0}; // Buffer for file system name
168
- char pathBuffer[256] = {0}; // Path buffer to accommodate different formats
176
+ char fileSystemNameBuffer[128] = {0}; // Buffer for file system name
177
+ char pathBuffer[256] = {0}; // Path buffer to accommodate different formats
178
DWORD serialNumber = 0;
179
DWORD maxComponentLength = 0;
180
DWORD fileSystemFlags = 0;
@@ -173,75 +182,86 @@ static STRING *getFileSystemType(struct logical_disk *d, const char* diskName) {
182
183
// Check if the input is likely a drive letter (e.g., "C:")
184
if (isalpha((uint8_t)diskName[0]) && diskName[1] == ':' && diskName[2] == '\0')
176
- snprintf(pathBuffer, sizeof(pathBuffer), "%s\\", diskName); // Format as "C:\"
185
+ snprintf(pathBuffer, sizeof(pathBuffer), "%s\\", diskName); // Format as "C:\"
186
else
187
// Assume it's a Volume GUID path or a device path
179
- snprintf(pathBuffer, sizeof(pathBuffer), "\\\\.\\%s\\", diskName); // Format as "\\.\HarddiskVolume1\"
188
+ snprintf(pathBuffer, sizeof(pathBuffer), "\\\\.\\%s\\", diskName); // Format as "\\.\HarddiskVolume1\"
189
190
d->DriveType = GetDriveTypeA(pathBuffer);
191
192
// Attempt to get the volume information
193
success = GetVolumeInformationA(
185
- pathBuffer, // Path to the disk
186
- NULL, // We don't need the volume name
187
- 0, // Size of volume name buffer is 0
188
- &serialNumber, // Volume serial number
189
- &maxComponentLength, // Maximum component length
190
- &fileSystemFlags, // File system flags
191
- fileSystemNameBuffer, // File system name buffer
194
+ pathBuffer, // Path to the disk
195
+ NULL, // We don't need the volume name
196
+ 0, // Size of volume name buffer is 0
197
+ &serialNumber, // Volume serial number
198
+ &maxComponentLength, // Maximum component length
199
+ &fileSystemFlags, // File system flags
200
+ fileSystemNameBuffer, // File system name buffer
201
sizeof(fileSystemNameBuffer) // Size of file system name buffer
202
);
203
195
- if(success) {
204
+ if (success) {
205
d->readonly = fileSystemFlags & FILE_READ_ONLY_VOLUME;
206
d->SerialNumber = serialNumber;
207
208
if (fileSystemNameBuffer[0]) {
209
char *s = fileSystemNameBuffer;
210
while (*s) {
202
- *s = tolower((uint8_t) *s);
211
+ *s = tolower((uint8_t)*s);
212
s++;
213
}
205
- return string_strdupz(fileSystemNameBuffer); // Duplicate the file system name
214
+ return string_strdupz(fileSystemNameBuffer); // Duplicate the file system name
215
}
216
}
217
return NULL;
218
}
219
211
-static const char *drive_type_to_str(UINT type) {
212
- switch(type) {
220
+static const char *drive_type_to_str(UINT type)
221
+{
222
+ switch (type) {
223
default:
214
- case 0: return "unknown";
215
- case 1: return "norootdir";
216
- case 2: return "removable";
217
- case 3: return "fixed";
218
- case 4: return "remote";
219
- case 5: return "cdrom";
220
- case 6: return "ramdisk";
224
+ case 0:
225
+ return "unknown";
226
+ case 1:
227
+ return "norootdir";
228
+ case 2:
229
+ return "removable";
230
+ case 3:
231
+ return "fixed";
232
+ case 4:
233
+ return "remote";
234
+ case 5:
235
+ return "cdrom";
236
+ case 6:
237
+ return "ramdisk";
238
}
239
}
240
224
-static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_t now_ut) {
241
+static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_t now_ut)
242
+{
243
DICTIONARY *dict = logicalDisks;
244
245
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "LogicalDisk");
228
- if(!pObjectType) return false;
246
+ if (!pObjectType)
247
+ return false;
248
249
PERF_INSTANCE_DEFINITION *pi = NULL;
231
- for(LONG i = 0; i < pObjectType->NumInstances ; i++) {
250
+ for (LONG i = 0; i < pObjectType->NumInstances; i++) {
251
pi = perflibForEachInstance(pDataBlock, pObjectType, pi);
233
- if(!pi) break;
252
+ if (!pi)
253
+ break;
254
235
- if(!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
255
+ if (!getInstanceName(pDataBlock, pObjectType, pi, windows_shared_buffer, sizeof(windows_shared_buffer)))
256
strncpyz(windows_shared_buffer, "[unknown]", sizeof(windows_shared_buffer) - 1);
257
238
- if(strcasecmp(windows_shared_buffer, "_Total") == 0)
258
+ if (strcasecmp(windows_shared_buffer, "_Total") == 0)
259
continue;
260
261
struct logical_disk *d = dictionary_set(dict, windows_shared_buffer, NULL, sizeof(*d));
262
d->last_collected = now_ut;
263
244
- if(!d->collected_metadata) {
264
+ if (!d->collected_metadata) {
265
d->filesystem = getFileSystemType(d, windows_shared_buffer);
266
d->collected_metadata = true;
267
}
@@ -249,25 +269,29 @@ static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_
269
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskFree);
270
// perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->freeMegabytes);
271
252
- if(!d->st_disk_space) {
272
+ if (!d->st_disk_space) {
273
d->st_disk_space = rrdset_create_localhost(
254
- "disk_space"
255
- , windows_shared_buffer
256
- , NULL
257
- , windows_shared_buffer
258
- , "disk.space"
259
- , "Disk Space Usage"
260
- , "GiB"
261
- , PLUGIN_WINDOWS_NAME
262
- , "PerflibStorage"
263
- , NETDATA_CHART_PRIO_DISKSPACE_SPACE
264
- , update_every
265
- , RRDSET_TYPE_STACKED
266
- );
274
+ "disk_space",
275
+ windows_shared_buffer,
276
+ NULL,
277
+ windows_shared_buffer,
278
+ "disk.space",
279
+ "Disk Space Usage",
280
+ "GiB",
281
+ PLUGIN_WINDOWS_NAME,
282
+ "PerflibStorage",
283
+ NETDATA_CHART_PRIO_DISKSPACE_SPACE,
284
+ update_every,
285
+ RRDSET_TYPE_STACKED);
286
287
rrdlabels_add(d->st_disk_space->rrdlabels, "mount_point", windows_shared_buffer, RRDLABEL_SRC_AUTO);
269
- rrdlabels_add(d->st_disk_space->rrdlabels, "drive_type", drive_type_to_str(d->DriveType), RRDLABEL_SRC_AUTO);
270
- rrdlabels_add(d->st_disk_space->rrdlabels, "filesystem", d->filesystem ? string2str(d->filesystem) : "unknown", RRDLABEL_SRC_AUTO);
288
+ rrdlabels_add(
289
+ d->st_disk_space->rrdlabels, "drive_type", drive_type_to_str(d->DriveType), RRDLABEL_SRC_AUTO);
290
+ rrdlabels_add(
291
+ d->st_disk_space->rrdlabels,
292
+ "filesystem",
293
+ d->filesystem ? string2str(d->filesystem) : "unknown",
294
+ RRDLABEL_SRC_AUTO);
295
rrdlabels_add(d->st_disk_space->rrdlabels, "rw_mode", d->readonly ? "ro" : "rw", RRDLABEL_SRC_AUTO);
296
297
{
@@ -281,16 +305,21 @@ static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_
305
}
306
307
// percentDiskFree has the free space in Data and the size of the disk in Time, in MiB.
284
- rrddim_set_by_pointer(d->st_disk_space, d->rd_disk_space_free, (collected_number)d->percentDiskFree.current.Data);
285
- rrddim_set_by_pointer(d->st_disk_space, d->rd_disk_space_used, (collected_number)(d->percentDiskFree.current.Time - d->percentDiskFree.current.Data));
308
+ rrddim_set_by_pointer(
309
+ d->st_disk_space, d->rd_disk_space_free, (collected_number)d->percentDiskFree.current.Data);
310
+ rrddim_set_by_pointer(
311
+ d->st_disk_space,
312
+ d->rd_disk_space_used,
313
+ (collected_number)(d->percentDiskFree.current.Time - d->percentDiskFree.current.Data));
314
rrdset_done(d->st_disk_space);
315
}
316
317
// cleanup
318
{
319
struct logical_disk *d;
292
- dfe_start_write(dict, d) {
293
- if(d->last_collected < now_ut) {
320
+ dfe_start_write(dict, d)
321
+ {
322
+ if (d->last_collected < now_ut) {
323
logical_disk_cleanup(d);
324
dictionary_del(dict, d_dfe.name);
325
}
@@ -302,38 +331,44 @@ static bool do_logical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_
331
return true;
332
}
333
305
-static void physical_disk_labels(RRDSET *st, void *data) {
334
+static void physical_disk_labels(RRDSET *st, void *data)
335
+{
336
struct physical_disk *d = data;
337
308
- if(d->device)
338
+ if (d->device)
339
rrdlabels_add(st->rrdlabels, "device", string2str(d->device), RRDLABEL_SRC_AUTO);
340
341
if (d->mount_point)
342
rrdlabels_add(st->rrdlabels, "mount_point", string2str(d->mount_point), RRDLABEL_SRC_AUTO);
343
314
-// if (d->manufacturer)
315
-// rrdlabels_add(st->rrdlabels, "manufacturer", string2str(d->manufacturer), RRDLABEL_SRC_AUTO);
344
+ // if (d->manufacturer)
345
+ // rrdlabels_add(st->rrdlabels, "manufacturer", string2str(d->manufacturer), RRDLABEL_SRC_AUTO);
346
347
if (d->model)
348
rrdlabels_add(st->rrdlabels, "model", string2str(d->model), RRDLABEL_SRC_AUTO);
349
320
-// if (d->media_type)
321
-// rrdlabels_add(st->rrdlabels, "media_type", string2str(d->media_type), RRDLABEL_SRC_AUTO);
350
+ // if (d->media_type)
351
+ // rrdlabels_add(st->rrdlabels, "media_type", string2str(d->media_type), RRDLABEL_SRC_AUTO);
352
323
-// if (d->name)
324
-// rrdlabels_add(st->rrdlabels, "name", string2str(d->name), RRDLABEL_SRC_AUTO);
353
+ // if (d->name)
354
+ // rrdlabels_add(st->rrdlabels, "name", string2str(d->name), RRDLABEL_SRC_AUTO);
355
356
if (d->device_id)
357
rrdlabels_add(st->rrdlabels, "device_id", string2str(d->device_id), RRDLABEL_SRC_AUTO);
358
}
359
330
-static bool str_is_numeric(const char *s) {
331
- while(*s) if(!isdigit((uint8_t)*s++)) return false;
360
+static bool str_is_numeric(const char *s)
361
+{
362
+ while (*s)
363
+ if (!isdigit((uint8_t)*s++))
364
+ return false;
365
return true;
366
}
367
335
-static inline double perflib_average_timer_ms(COUNTER_DATA *d) {
336
- if(!d->updated) return 0.0;
368
+static inline double perflib_average_timer_ms(COUNTER_DATA *d)
369
+{
370
+ if (!d->updated)
371
+ return 0.0;
372
373
ULONGLONG data1 = d->current.Data;
374
ULONGLONG data0 = d->previous.Data;
@@ -341,35 +376,39 @@ static inline double perflib_average_timer_ms(COUNTER_DATA *d) {
376
LONGLONG time0 = d->previous.Time;
377
LONGLONG freq1 = d->current.Frequency;
378
344
- if(data1 >= data0 && time1 > time0 && time0 && freq1)
379
+ if (data1 >= data0 && time1 > time0 && time0 && freq1)
380
return ((double)(data1 - data0) / (double)(freq1 / MSEC_PER_SEC)) / (double)(time1 - time0);
381
382
return 0;
383
}
384
350
-static inline uint64_t perflib_average_bulk(COUNTER_DATA *d) {
351
- if(!d->updated) return 0;
385
+static inline uint64_t perflib_average_bulk(COUNTER_DATA *d)
386
+{
387
+ if (!d->updated)
388
+ return 0;
389
390
ULONGLONG data1 = d->current.Data;
391
ULONGLONG data0 = d->previous.Data;
392
LONGLONG time1 = d->current.Time;
393
LONGLONG time0 = d->previous.Time;
394
358
- if(data1 >= data0 && time1 > time0 && time0)
395
+ if (data1 >= data0 && time1 > time0 && time0)
396
return (data1 - data0) / (time1 - time0);
397
398
return 0;
399
}
400
364
-static inline uint64_t perflib_idle_time_percent(COUNTER_DATA *d) {
365
- if(!d->updated) return 0.0;
401
+static inline uint64_t perflib_idle_time_percent(COUNTER_DATA *d)
402
+{
403
+ if (!d->updated)
404
+ return 0.0;
405
406
ULONGLONG data1 = d->current.Data;
407
ULONGLONG data0 = d->previous.Data;
408
LONGLONG time1 = d->current.Time;
409
LONGLONG time0 = d->previous.Time;
410
372
- if(data1 >= data0 && time1 > time0 && time0) {
411
+ if (data1 >= data0 && time1 > time0 && time0) {
412
uint64_t pcent = 100 * (data1 - data0) / (time1 - time0);
413
return pcent > 100 ? 100 : pcent;
414
}
@@ -380,11 +419,13 @@ static inline uint64_t perflib_idle_time_percent(COUNTER_DATA *d) {
419
#define MAX_WMI_DRIVES 100
420
static DiskDriveInfoWMI infos[MAX_WMI_DRIVES];
421
383
-static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_t now_ut) {
422
+static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec_t now_ut)
423
+{
424
DICTIONARY *dict = physicalDisks;
425
426
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "PhysicalDisk");
387
- if(!pObjectType) return false;
427
+ if (!pObjectType)
428
+ return false;
429
430
PERF_INSTANCE_DEFINITION *pi = NULL;
431
for (LONG i = 0; i < pObjectType->NumInstances; i++) {
@@ -397,22 +438,22 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
438
439
int device_index = -1;
440
char *device = windows_shared_buffer;
400
- char mount_point[128]; mount_point[0] = '\0';
441
+ char mount_point[128];
442
+ mount_point[0] = '\0';
443
444
struct physical_disk *d;
445
bool is_system;
446
if (strcasecmp(windows_shared_buffer, "_Total") == 0) {
447
d = &system_physical_total;
448
is_system = true;
407
- }
408
- else {
449
+ } else {
450
char *space;
410
- if((space = strchr(windows_shared_buffer, ' '))) {
451
+ if ((space = strchr(windows_shared_buffer, ' '))) {
452
*space++ = '\0';
453
strncpyz(mount_point, space, sizeof(mount_point) - 1);
454
}
455
415
- if(str_is_numeric(windows_shared_buffer)) {
456
+ if (str_is_numeric(windows_shared_buffer)) {
457
device_index = str2ull(device, NULL);
458
snprintfz(windows_shared_buffer, sizeof(windows_shared_buffer), "Disk %d", device_index);
459
device = windows_shared_buffer;
@@ -424,10 +465,10 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
465
d->last_collected = now_ut;
466
467
if (!d->collected_metadata) {
427
- if(!is_system && device_index != -1) {
468
+ if (!is_system && device_index != -1) {
469
size_t infoCount = GetDiskDriveInfo(infos, _countof(infos));
429
- for(size_t k = 0; k < infoCount ; k++) {
430
- if(infos[k].Index != device_index)
470
+ for (size_t k = 0; k < infoCount; k++) {
471
+ if (infos[k].Index != device_index)
472
continue;
473
474
d->manufacturer = string_strdupz(infos[k].Manufacturer);
@@ -447,11 +488,9 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
488
489
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->diskReadBytesPerSec) &&
490
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->diskWriteBytesPerSec)) {
450
- if(is_system)
491
+ if (is_system)
492
common_system_io(
452
- d->diskReadBytesPerSec.current.Data,
453
- d->diskWriteBytesPerSec.current.Data,
454
- update_every);
493
+ d->diskReadBytesPerSec.current.Data, d->diskWriteBytesPerSec.current.Data, update_every);
494
else
495
common_disk_io(
496
&d->disk_io,
@@ -464,124 +503,120 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
503
d);
504
}
505
467
- if(is_system) continue;
506
+ if (is_system)
507
+ continue;
508
509
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->diskReadsPerSec) &&
510
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->diskWritesPerSec)) {
471
-
511
common_disk_ops(
473
- &d->disk_ops,
474
- device,
475
- NULL,
476
- d->diskReadsPerSec.current.Data,
477
- d->diskWritesPerSec.current.Data,
478
- update_every,
479
- physical_disk_labels,
480
- d);
512
+ &d->disk_ops,
513
+ device,
514
+ NULL,
515
+ d->diskReadsPerSec.current.Data,
516
+ d->diskWritesPerSec.current.Data,
517
+ update_every,
518
+ physical_disk_labels,
519
+ d);
520
}
521
522
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentIdleTime)) {
523
common_disk_util(
485
- &d->disk_util,
486
- device,
487
- NULL,
488
- 100 - perflib_idle_time_percent(&d->percentIdleTime),
489
- update_every,
490
- physical_disk_labels,
491
- d);
524
+ &d->disk_util,
525
+ device,
526
+ NULL,
527
+ 100 - perflib_idle_time_percent(&d->percentIdleTime),
528
+ update_every,
529
+ physical_disk_labels,
530
+ d);
531
}
532
533
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskTime)) {
534
common_disk_busy(
496
- &d->disk_busy,
497
- device,
498
- NULL,
499
- d->percentDiskTime.current.Data / NS100_PER_MS,
500
- update_every,
501
- physical_disk_labels,
502
- d);
535
+ &d->disk_busy,
536
+ device,
537
+ NULL,
538
+ d->percentDiskTime.current.Data / NS100_PER_MS,
539
+ update_every,
540
+ physical_disk_labels,
541
+ d);
542
}
543
544
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskReadTime) &&
545
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->percentDiskWriteTime)) {
507
-
546
common_disk_iotime(
509
- &d->disk_iotime,
510
- device,
511
- NULL,
512
- d->percentDiskReadTime.current.Data / NS100_PER_MS,
513
- d->percentDiskWriteTime.current.Data / NS100_PER_MS,
514
- update_every,
515
- physical_disk_labels,
516
- d);
547
+ &d->disk_iotime,
548
+ device,
549
+ NULL,
550
+ d->percentDiskReadTime.current.Data / NS100_PER_MS,
551
+ d->percentDiskWriteTime.current.Data / NS100_PER_MS,
552
+ update_every,
553
+ physical_disk_labels,
554
+ d);
555
}
556
519
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->currentDiskQueueLength)) {
557
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->currentDiskQueueLength)) {
558
common_disk_qops(
521
- &d->disk_qops,
522
- device,
523
- NULL,
524
- d->currentDiskQueueLength.current.Data,
525
- update_every,
526
- physical_disk_labels,
527
- d);
559
+ &d->disk_qops,
560
+ device,
561
+ NULL,
562
+ d->currentDiskQueueLength.current.Data,
563
+ update_every,
564
+ physical_disk_labels,
565
+ d);
566
}
567
568
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerRead) &&
569
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerWrite)) {
532
-
570
common_disk_await(
534
- &d->disk_await,
535
- device,
536
- NULL,
537
- perflib_average_timer_ms(&d->averageDiskSecondsPerRead),
538
- perflib_average_timer_ms(&d->averageDiskSecondsPerWrite),
539
- update_every,
540
- physical_disk_labels,
541
- d);
571
+ &d->disk_await,
572
+ device,
573
+ NULL,
574
+ perflib_average_timer_ms(&d->averageDiskSecondsPerRead),
575
+ perflib_average_timer_ms(&d->averageDiskSecondsPerWrite),
576
+ update_every,
577
+ physical_disk_labels,
578
+ d);
579
}
580
581
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskSecondsPerTransfer)) {
582
common_disk_svctm(
546
- &d->disk_svctm,
547
- device,
548
- NULL,
549
- perflib_average_timer_ms(&d->averageDiskSecondsPerTransfer),
550
- update_every,
551
- physical_disk_labels,
552
- d);
583
+ &d->disk_svctm,
584
+ device,
585
+ NULL,
586
+ perflib_average_timer_ms(&d->averageDiskSecondsPerTransfer),
587
+ update_every,
588
+ physical_disk_labels,
589
+ d);
590
}
591
592
if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskBytesPerRead) &&
593
perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->averageDiskBytesPerWrite)) {
557
-
594
common_disk_avgsz(
559
- &d->disk_avgsz,
560
- device,
561
- NULL,
562
- perflib_average_bulk(&d->averageDiskBytesPerRead),
563
- perflib_average_bulk(&d->averageDiskBytesPerWrite),
564
- update_every,
565
- physical_disk_labels,
566
- d);
595
+ &d->disk_avgsz,
596
+ device,
597
+ NULL,
598
+ perflib_average_bulk(&d->averageDiskBytesPerRead),
599
+ perflib_average_bulk(&d->averageDiskBytesPerWrite),
600
+ update_every,
601
+ physical_disk_labels,
602
+ d);
603
}
604
569
- if(perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->splitIoPerSec)) {
605
+ if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &d->splitIoPerSec)) {
606
if (!d->st_split) {
607
d->st_split = rrdset_create_localhost(
572
- "disk_split",
573
- device,
574
- NULL,
575
- "iops",
576
- "disk.split",
577
- "Split I/O Operations",
578
- "operations/s",
579
- _COMMON_PLUGIN_NAME,
580
- _COMMON_PLUGIN_MODULE_NAME,
581
- NETDATA_CHART_PRIO_DISK_SPLIT,
582
- update_every,
583
- RRDSET_TYPE_LINE
584
- );
608
+ "disk_split",
609
+ device,
610
+ NULL,
611
+ "iops",
612
+ "disk.split",
613
+ "Split I/O Operations",
614
+ "operations/s",
615
+ _COMMON_PLUGIN_NAME,
616
+ _COMMON_PLUGIN_MODULE_NAME,
617
+ NETDATA_CHART_PRIO_DISK_SPLIT,
618
+ update_every,
619
+ RRDSET_TYPE_LINE);
620
621
d->rd_split = rrddim_add(d->st_split, "discards", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
622
@@ -596,8 +631,9 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
631
// cleanup
632
{
633
struct physical_disk *d;
599
- dfe_start_write(dict, d) {
600
- if(d->last_collected < now_ut) {
634
+ dfe_start_write(dict, d)
635
+ {
636
+ if (d->last_collected < now_ut) {
637
physical_disk_cleanup(d);
638
dictionary_del(dict, d_dfe.name);
639
}
@@ -609,20 +645,22 @@ static bool do_physical_disk(PERF_DATA_BLOCK *pDataBlock, int update_every, usec
645
return true;
646
}
647
612
-int do_PerflibStorage(int update_every, usec_t dt __maybe_unused) {
648
+int do_PerflibStorage(int update_every, usec_t dt __maybe_unused)
649
+{
650
static bool initialized = false;
651
615
- if(unlikely(!initialized)) {
652
+ if (unlikely(!initialized)) {
653
initialize();
654
initialized = true;
655
}
656
657
DWORD id = RegistryFindIDByName("LogicalDisk");
621
- if(id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
658
+ if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
659
return -1;
660
661
PERF_DATA_BLOCK *pDataBlock = perflibGetPerformanceData(id);
625
- if(!pDataBlock) return -1;
662
+ if (!pDataBlock)
663
+ return -1;
664
665
usec_t now_ut = now_monotonic_usec();
666
do_logical_disk(pDataBlock, update_every, now_ut);
src/collectors/windows.plugin/perflib-thermalzone.c
+10
-5
@@ -10,25 +10,29 @@ struct thermal_zone {
10
COUNTER_DATA thermalZoneTemperature;
11
};
12
13
-static inline void initialize_thermal_zone_keys(struct thermal_zone *p) {
13
+static inline void initialize_thermal_zone_keys(struct thermal_zone *p)
14
+{
15
p->thermalZoneTemperature.key = "Temperature";
16
}
17
17
-void dict_thermal_zone_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
18
+void dict_thermal_zone_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
19
+{
20
struct thermal_zone *p = value;
21
initialize_thermal_zone_keys(p);
22
}
23
24
static DICTIONARY *thermal_zones = NULL;
25
24
-static void initialize(void) {
26
+static void initialize(void)
27
+{
28
thermal_zones = dictionary_create_advanced(
29
DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct thermal_zone));
30
31
dictionary_register_insert_callback(thermal_zones, dict_thermal_zone_insert_cb, NULL);
32
}
33
31
-static bool do_thermal_zones(PERF_DATA_BLOCK *pDataBlock, int update_every) {
34
+static bool do_thermal_zones(PERF_DATA_BLOCK *pDataBlock, int update_every)
35
+{
36
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Thermal Zone Information");
37
if (!pObjectType)
38
return false;
@@ -81,7 +85,8 @@ static bool do_thermal_zones(PERF_DATA_BLOCK *pDataBlock, int update_every) {
85
return true;
86
}
87
84
-int do_PerflibThermalZone(int update_every, usec_t dt __maybe_unused) {
88
+int do_PerflibThermalZone(int update_every, usec_t dt __maybe_unused)
89
+{
90
static bool initialized = false;
91
92
if (unlikely(!initialized)) {
src/collectors/windows.plugin/perflib-web-service.c
+56
-46
@@ -93,7 +93,8 @@ struct web_service {
93
COUNTER_DATA IISRequestsOther;
94
};
95
96
-static inline void initialize_web_service_keys(struct web_service *p) {
96
+static inline void initialize_web_service_keys(struct web_service *p)
97
+{
98
p->IISCurrentAnonymousUser.key = "Current Anonymous Users";
99
p->IISCurrentNonAnonymousUsers.key = "Current NonAnonymous Users";
100
p->IISCurrentConnections.key = "Current Connections";
@@ -128,21 +129,24 @@ static inline void initialize_web_service_keys(struct web_service *p) {
129
p->IISRequestsOther.key = "Other Request Methods/sec";
130
}
131
131
-void dict_web_service_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused) {
132
+void dict_web_service_insert_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
133
+{
134
struct web_service *p = value;
135
initialize_web_service_keys(p);
136
}
137
138
static DICTIONARY *web_services = NULL;
139
138
-static void initialize(void) {
140
+static void initialize(void)
141
+{
142
web_services = dictionary_create_advanced(
143
DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct web_service));
144
145
dictionary_register_insert_callback(web_services, dict_web_service_insert_cb, NULL);
146
}
147
145
-static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
148
+static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every)
149
+{
150
char id[RRD_ID_LENGTH_MAX + 1];
151
PERF_OBJECT_TYPE *pObjectType = perflibFindObjectTypeByName(pDataBlock, "Web Service");
152
if (!pObjectType)
@@ -215,7 +219,8 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
219
update_every,
220
RRDSET_TYPE_LINE);
221
218
- p->rd_files_received = rrddim_add(p->st_file_transfer, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
222
+ p->rd_files_received =
223
+ rrddim_add(p->st_file_transfer, "received", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
224
p->rd_files_sent = rrddim_add(p->st_file_transfer, "sent", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
225
rrdlabels_add(p->st_file_transfer->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
226
}
@@ -246,7 +251,8 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
251
update_every,
252
RRDSET_TYPE_LINE);
253
249
- p->rd_curr_connections = rrddim_add(p->st_curr_connections, "active", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
254
+ p->rd_curr_connections =
255
+ rrddim_add(p->st_curr_connections, "active", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
256
rrdlabels_add(p->st_curr_connections->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
257
}
258
@@ -555,24 +561,41 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
561
update_every,
562
RRDSET_TYPE_STACKED);
563
558
- p->rd_request_options_rate = rrddim_add(p->st_request_by_type_rate, "options", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
559
- p->rd_request_get_rate = rrddim_add(p->st_request_by_type_rate, "get", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
560
- p->rd_request_post_rate = rrddim_add(p->st_request_by_type_rate, "post", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
561
- p->rd_request_head_rate = rrddim_add(p->st_request_by_type_rate, "head", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
562
- p->rd_request_put_rate = rrddim_add(p->st_request_by_type_rate, "put", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
563
- p->rd_request_delete_rate = rrddim_add(p->st_request_by_type_rate, "delete", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
564
- p->rd_request_trace_rate = rrddim_add(p->st_request_by_type_rate, "trace", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
565
- p->rd_request_move_rate = rrddim_add(p->st_request_by_type_rate, "move", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
566
- p->rd_request_copy_rate = rrddim_add(p->st_request_by_type_rate, "copy", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
567
- p->rd_request_mkcol_rate = rrddim_add(p->st_request_by_type_rate, "mkcol", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
568
- p->rd_request_propfind_rate = rrddim_add(p->st_request_by_type_rate, "propfind", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
569
- p->rd_request_proppatch_rate = rrddim_add(p->st_request_by_type_rate, "proppatch", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
570
- p->rd_request_search_rate = rrddim_add(p->st_request_by_type_rate, "search", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
571
- p->rd_request_lock_rate = rrddim_add(p->st_request_by_type_rate, "lock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
572
- p->rd_request_unlock_rate = rrddim_add(p->st_request_by_type_rate, "unlock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
573
- p->rd_request_other_rate = rrddim_add(p->st_request_by_type_rate, "other", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
574
-
575
- rrdlabels_add(p->st_request_by_type_rate->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
564
+ p->rd_request_options_rate =
565
+ rrddim_add(p->st_request_by_type_rate, "options", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
566
+ p->rd_request_get_rate =
567
+ rrddim_add(p->st_request_by_type_rate, "get", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
568
+ p->rd_request_post_rate =
569
+ rrddim_add(p->st_request_by_type_rate, "post", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
570
+ p->rd_request_head_rate =
571
+ rrddim_add(p->st_request_by_type_rate, "head", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
572
+ p->rd_request_put_rate =
573
+ rrddim_add(p->st_request_by_type_rate, "put", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
574
+ p->rd_request_delete_rate =
575
+ rrddim_add(p->st_request_by_type_rate, "delete", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
576
+ p->rd_request_trace_rate =
577
+ rrddim_add(p->st_request_by_type_rate, "trace", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
578
+ p->rd_request_move_rate =
579
+ rrddim_add(p->st_request_by_type_rate, "move", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
580
+ p->rd_request_copy_rate =
581
+ rrddim_add(p->st_request_by_type_rate, "copy", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
582
+ p->rd_request_mkcol_rate =
583
+ rrddim_add(p->st_request_by_type_rate, "mkcol", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
584
+ p->rd_request_propfind_rate =
585
+ rrddim_add(p->st_request_by_type_rate, "propfind", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
586
+ p->rd_request_proppatch_rate =
587
+ rrddim_add(p->st_request_by_type_rate, "proppatch", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
588
+ p->rd_request_search_rate =
589
+ rrddim_add(p->st_request_by_type_rate, "search", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
590
+ p->rd_request_lock_rate =
591
+ rrddim_add(p->st_request_by_type_rate, "lock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
592
+ p->rd_request_unlock_rate =
593
+ rrddim_add(p->st_request_by_type_rate, "unlock", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
594
+ p->rd_request_other_rate =
595
+ rrddim_add(p->st_request_by_type_rate, "other", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
596
+
597
+ rrdlabels_add(
598
+ p->st_request_by_type_rate->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
599
}
600
601
rrddim_set_by_pointer(
@@ -580,21 +603,13 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
603
p->rd_request_options_rate,
604
(collected_number)p->IISRequestsOptions.current.Data);
605
rrddim_set_by_pointer(
583
- p->st_request_by_type_rate,
584
- p->rd_request_get_rate,
585
- (collected_number)p->IISRequestsGet.current.Data);
606
+ p->st_request_by_type_rate, p->rd_request_get_rate, (collected_number)p->IISRequestsGet.current.Data);
607
rrddim_set_by_pointer(
587
- p->st_request_by_type_rate,
588
- p->rd_request_post_rate,
589
- (collected_number)p->IISRequestsPost.current.Data);
608
+ p->st_request_by_type_rate, p->rd_request_post_rate, (collected_number)p->IISRequestsPost.current.Data);
609
rrddim_set_by_pointer(
591
- p->st_request_by_type_rate,
592
- p->rd_request_head_rate,
593
- (collected_number)p->IISRequestsHead.current.Data);
610
+ p->st_request_by_type_rate, p->rd_request_head_rate, (collected_number)p->IISRequestsHead.current.Data);
611
rrddim_set_by_pointer(
595
- p->st_request_by_type_rate,
596
- p->rd_request_put_rate,
597
- (collected_number)p->IISRequestsPut.current.Data);
612
+ p->st_request_by_type_rate, p->rd_request_put_rate, (collected_number)p->IISRequestsPut.current.Data);
613
rrddim_set_by_pointer(
614
p->st_request_by_type_rate,
615
p->rd_request_delete_rate,
@@ -604,13 +619,9 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
619
p->rd_request_trace_rate,
620
(collected_number)p->IISRequestsTrace.current.Data);
621
rrddim_set_by_pointer(
607
- p->st_request_by_type_rate,
608
- p->rd_request_move_rate,
609
- (collected_number)p->IISRequestsMove.current.Data);
622
+ p->st_request_by_type_rate, p->rd_request_move_rate, (collected_number)p->IISRequestsMove.current.Data);
623
rrddim_set_by_pointer(
611
- p->st_request_by_type_rate,
612
- p->rd_request_copy_rate,
613
- (collected_number)p->IISRequestsCopy.current.Data);
624
+ p->st_request_by_type_rate, p->rd_request_copy_rate, (collected_number)p->IISRequestsCopy.current.Data);
625
rrddim_set_by_pointer(
626
p->st_request_by_type_rate,
627
p->rd_request_mkcol_rate,
@@ -628,9 +639,7 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
639
p->rd_request_search_rate,
640
(collected_number)p->IISRequestsSearch.current.Data);
641
rrddim_set_by_pointer(
631
- p->st_request_by_type_rate,
632
- p->rd_request_lock_rate,
633
- (collected_number)p->IISRequestsLock.current.Data);
642
+ p->st_request_by_type_rate, p->rd_request_lock_rate, (collected_number)p->IISRequestsLock.current.Data);
643
rrddim_set_by_pointer(
644
p->st_request_by_type_rate,
645
p->rd_request_unlock_rate,
@@ -647,7 +656,8 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every) {
656
return true;
657
}
658
650
-int do_PerflibWebService(int update_every, usec_t dt __maybe_unused) {
659
+int do_PerflibWebService(int update_every, usec_t dt __maybe_unused)
660
+{
661
static bool initialized = false;
662
663
if (unlikely(!initialized)) {
src/collectors/windows.plugin/windows-internals.h
+2
-1
@@ -5,7 +5,8 @@
5
6
#include "libnetdata/libnetdata.h"
7
8
-static inline ULONGLONG FileTimeToULL(FILETIME ft) {
8
+static inline ULONGLONG FileTimeToULL(FILETIME ft)
9
+{
10
ULARGE_INTEGER ul;
11
ul.LowPart = ft.dwLowDateTime;
12
ul.HighPart = ft.dwHighDateTime;