@cryptotaxi247 / netdata-1 / commits / 23e396458

Perflib fixes (Windows.plugin) (#21458)

thiagoftsm committed Dec 15, 2025 at 15:12 UTC 23e396458b194c8e9bc6b358e7ccb30289ea144d
15 files changed +134 -118
src/collectors/windows.plugin/GetHardwareInfo.c
+12 -2
@@ -77,8 +77,18 @@ int netdata_install_driver()
77 return -1;
78 }
79
80 + char expanded_path[MAX_PATH];
81 + if (ExpandEnvironmentStringsA(drv_path, expanded_path, sizeof(expanded_path)) == 0) {
82 + nd_log(
83 + NDLS_COLLECTORS,
84 + NDLP_ERR,
85 + "Cannot expand environment strings. Error= %lu \n", GetLastError());
86 + CloseServiceHandle(scm);
87 + return -1;
88 + }
89 +
90 // Create the service entry for the driver
81 - SC_HANDLE service = CreateService(
91 + SC_HANDLE service = CreateServiceA(
92 scm,
93 srv_name,
94 srv_name,
@@ -86,7 +96,7 @@ int netdata_install_driver()
96 SERVICE_KERNEL_DRIVER,
97 SERVICE_DEMAND_START,
98 SERVICE_ERROR_NORMAL,
89 - drv_path,
99 + expanded_path,
100 NULL,
101 NULL,
102 NULL,
src/collectors/windows.plugin/GetPowerSupply.c
+1 -1
@@ -79,7 +79,7 @@ int do_GetPowerSupply(int update_every, usec_t dt __maybe_unused)
79
80 HDEVINFO hdev = SetupDiGetClassDevs(&GUID_DEVCLASS_BATTERY, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
81 if (hdev == INVALID_HANDLE_VALUE)
82 - return 1;
82 + return -1;
83
84 SP_DEVICE_INTERFACE_DATA did = {0};
85 did.cbSize = sizeof(did);
src/collectors/windows.plugin/GetSensors.c
+33 -10
@@ -13,6 +13,7 @@
13
14 static ISensorManager *pSensorManager = NULL;
15 static ND_THREAD *sensors_thread_update = NULL;
16 +static netdata_mutex_t sensors_mutex;
17
18 #define NETDATA_WIN_SENSOR_STATES (6)
19 #define NETDATA_WIN_VECTOR_POS (3)
@@ -403,8 +404,11 @@ static inline char *netdata_pvar_to_char(const PROPERTYKEY *key, ISensor *pSenso
404 HRESULT hr = pSensor->lpVtbl->GetProperty(pSensor, key, &pv);
405 if (SUCCEEDED(hr) && pv.vt == VT_LPWSTR) {
406 char value[8192];
406 - size_t len = wcslen(pv.pwszVal);
407 + int len = wcslen(pv.pwszVal);
408 len = wcstombs(value, pv.pwszVal, len);
409 + if (len < 0) {
410 + return NULL;
411 + }
412 value[len] = '\0';
413 PropVariantClear(&pv);
414 return strdupz(value);
@@ -428,12 +432,11 @@ static int netdata_collect_sensor_data(collected_number *value, ISensor *pSensor
432 PROPVARIANT pv = {};
433 HRESULT hr;
434
431 - int defined = 0;
435 hr = pSensor->lpVtbl->GetData(pSensor, &pReport);
436 if (SUCCEEDED(hr) && pReport) {
437 PropVariantInit(&pv);
438 hr = pReport->lpVtbl->GetSensorValue(pReport, key, &pv);
436 - if (SUCCEEDED(hr) && (pv.vt == VT_R4 || pv.vt == VT_R8 || pv.vt == VT_UI4 || pv.vt == VT_BOOL)) {
439 + if (SUCCEEDED(hr)) {
440 switch (pv.vt) {
441 case VT_UI4:
442 *value = (collected_number)(pv.ulVal * 100);
@@ -447,16 +450,25 @@ static int netdata_collect_sensor_data(collected_number *value, ISensor *pSensor
450 case VT_BOOL:
451 *value = (pv.boolVal == VARIANT_TRUE) ? 100 : 0;
452 break;
453 + default:
454 + goto error_collect_sensor_data;
455 }
451 - defined = 1;
456 + pReport->lpVtbl->Release(pReport);
457 + } else {
458 + pReport->lpVtbl->Release(pReport);
459 + goto error_collect_sensor_data;
460 }
461 PropVariantClear(&pv);
454 - pReport->lpVtbl->Release(pReport);
455 - } else {
456 - *value = 0;
457 - }
462 + } else
463 + goto error_collect_sensor_data;
464 +
465 + return 1;
466 +error_collect_sensor_data:
467 + if (pv.vt != VT_EMPTY)
468 + PropVariantClear(&pv);
469
459 - return defined;
470 + *value = 0;
471 + return 0;
472 }
473
474 static void netdata_sensors_get_data(struct sensor_data *sd, ISensor *pSensor)
@@ -527,7 +539,7 @@ static void netdata_sensors_get_custom_data(struct sensor_data *sd, ISensor *pSe
539 static struct netdata_sensors_extra_config *netdata_sensors_fill_configuration(const char *name)
540 {
541 #define NETDATA_DEFAULT_SENSOR_SECTION "plugin:windows:GetSensors"
530 - char section_name[CONFIG_MAX_NAME];
542 + char section_name[CONFIG_MAX_NAME + 1];
543 snprintfz(section_name, CONFIG_MAX_NAME, "%s:%s", NETDATA_DEFAULT_SENSOR_SECTION, name);
544
545 const char *units = inicfg_get(&netdata_config, section_name, "units", NULL);
@@ -564,6 +576,8 @@ static void netdata_get_sensors()
576 ISensor *pSensor = NULL;
577 hr = pSensorCollection->lpVtbl->GetAt(pSensorCollection, i, &pSensor);
578 if (FAILED(hr) || !pSensor) {
579 + if (pSensor)
580 + pSensor->lpVtbl->Release(pSensor);
581 continue;
582 }
583
@@ -579,6 +593,7 @@ static void netdata_get_sensors()
593 continue;
594 }
595
596 + __netdata_mutex_lock(&sensors_mutex);
597 struct sensor_data *sd = dictionary_set(sensors, thread_values, NULL, sizeof(*sd));
598
599 if (unlikely(!sd->initialized)) {
@@ -628,6 +643,7 @@ static void netdata_get_sensors()
643 }
644 }
645 }
646 + __netdata_mutex_unlock(&sensors_mutex);
647
648 pSensor->lpVtbl->Release(pSensor);
649 }
@@ -702,6 +718,9 @@ static int initialize(int update_every)
718 // (netdata_sensors_monitor) because COM must be initialized per-thread.
719 // The sensor thread owns the pSensorManager instance and handles its cleanup.
720
721 + if (unlikely(__netdata_mutex_init(&sensors_mutex)))
722 + return -1;
723 +
724 sensors = dictionary_create_advanced(
725 DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct sensor_data));
726 dictionary_register_insert_callback(sensors, dict_sensor_insert, NULL);
@@ -875,7 +894,9 @@ int do_GetSensors(int update_every, usec_t dt __maybe_unused)
894 initialized = true;
895 }
896
897 + __netdata_mutex_lock(&sensors_mutex);
898 dictionary_sorted_walkthrough_read(sensors, dict_sensors_charts_cb, &update_every);
899 + __netdata_mutex_unlock(&sensors_mutex);
900 return 0;
901 }
902
@@ -886,6 +907,8 @@ void do_Sensors_cleanup()
907 if (nd_thread_join(sensors_thread_update))
908 nd_log_daemon(NDLP_ERR, "Failed to join sensors thread update");
909
910 + __netdata_mutex_destroy(&sensors_mutex);
911 + dictionary_destroy(sensors);
912 // Note: pSensorManager is owned and cleaned up by the sensor thread itself
913 // No additional cleanup needed here since the thread has already released resources
914 }
src/collectors/windows.plugin/perflib-adfs.c
+4 -4
@@ -247,8 +247,8 @@ struct adfs_certificate {
247 .ADFSOauthClientWindowsAuthenticationsFailure.key = "OAuth Client Windows Integrated Authentication Failures",
248 .ADFSOauthLogonCertificateRequestsSuccess.key = "OAuth Logon Certificate Token Requests",
249 .ADFSOauthLogonCertificateRequestsFailure.key = "OAuth Logon Certificate Request Failures",
250 - .ADFSOauthPasswordGrantRequestsSuccess.key = "OAuth Password Grant Request Failures",
251 - .ADFSOauthPasswordGrantRequestsFailure.key = "OAuth Password Grant Request",
250 + .ADFSOauthPasswordGrantRequestsSuccess.key = "OAuth Password Grant Requests",
251 + .ADFSOauthPasswordGrantRequestsFailure.key = "OAuth Password Grant Request Failures",
252 .ADFSOauthTokenRequestsSuccess.key = "OAuth Token Requests",
253
254 // Requests
@@ -988,7 +988,7 @@ void netdata_adfs_oauth_password_grant_requests(
988 "authentications/s",
989 PLUGIN_WINDOWS_NAME,
990 "PerflibADFS",
991 - PRIO_ADFS_OAUTH_CLIENT_WINDOWS_AUTH,
991 + PRIO_ADFS_OAUTH_TOKEN_REQUESTS_SUCCESS,
992 update_every,
993 RRDSET_TYPE_LINE);
994
@@ -1032,7 +1032,7 @@ void netdata_adfs_oauth_token_requests_success(
1032 "requests/s",
1033 PLUGIN_WINDOWS_NAME,
1034 "PerflibADFS",
1035 - PRIO_ADFS_OAUTH_TOKEN_REQUESTS_SUCCESS,
1035 + PRIO_ADFS_OAUTH_CLIENT_CREDENTIAL_REQUEST,
1036 update_every,
1037 RRDSET_TYPE_LINE);
1038
src/collectors/windows.plugin/perflib-asp.c
+3 -3
@@ -505,7 +505,7 @@ static void netdata_aspnet_requests_executing(struct aspnet_app *aa, char *app,
505 rrddim_set_by_pointer(
506 aa->st_aspnet_requests_executing,
507 aa->rd_aspnet_requests_executing,
508 - (collected_number)aa->aspnetRequestsBytesTotalIn.current.Data);
508 + (collected_number)aa->aspnetRequestsExecuting.current.Data);
509 rrdset_done(aa->st_aspnet_requests_executing);
510 }
511
@@ -999,10 +999,10 @@ static inline void netdata_aspnet_apps_transactions(
999 netdata_aspnet_transactions_committed(aa, windows_shared_buffer, update_every);
1000
1001 if (perflibGetObjectCounter(pDataBlock, pObjectType, &aa->aspnetTransactionsPending))
1002 - netdata_aspnet_transactions_aborted(aa, windows_shared_buffer, update_every);
1002 + netdata_aspnet_transactions_pending(aa, windows_shared_buffer, update_every);
1003
1004 if (perflibGetObjectCounter(pDataBlock, pObjectType, &aa->aspnetTransactionsPerSec))
1005 - netdata_aspnet_transactions_aborted(aa, windows_shared_buffer, update_every);
1005 + netdata_aspnet_transactions_per_sec(aa, windows_shared_buffer, update_every);
1006 }
1007
1008 static void netdata_aspnet_events_raised(struct aspnet_app *aa, char *app, int update_every)
src/collectors/windows.plugin/perflib-exchange.c
+12 -12
@@ -62,7 +62,7 @@ struct exchange_queue {
62
63 COUNTER_DATA exchangeTransportQueuesActiveMailboxDelivery;
64 COUNTER_DATA exchangeTransportQueuesExternalActiveRemoteDelivery;
65 - COUNTER_DATA exchangeTransportQueuesInternalActiveRemoteDeliery;
65 + COUNTER_DATA exchangeTransportQueuesInternalActiveRemoteDelivery;
66 COUNTER_DATA exchangeTransportQueuesUnreachable;
67 COUNTER_DATA exchangeTransportQueuesPoison;
68 };
@@ -99,7 +99,7 @@ static void exchange_workload_initialize_variables(struct exchange_workload *ew)
99 }
100
101 static void
102 -dict_exchange_insert_worload_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
102 +dict_exchange_insert_workload_cb(const DICTIONARY_ITEM *item __maybe_unused, void *value, void *data __maybe_unused)
103 {
104 struct exchange_workload *ew = value;
105
@@ -110,7 +110,7 @@ static void exchange_queue_initialize_variables(struct exchange_queue *eq)
110 {
111 eq->exchangeTransportQueuesActiveMailboxDelivery.key = "Active Mailbox Delivery Queue Length";
112 eq->exchangeTransportQueuesExternalActiveRemoteDelivery.key = "External Active Remote Delivery Queue Length";
113 - eq->exchangeTransportQueuesInternalActiveRemoteDeliery.key = "Internal Active Remote Delivery Queue Length";
113 + eq->exchangeTransportQueuesInternalActiveRemoteDelivery.key = "Internal Active Remote Delivery Queue Length";
114 eq->exchangeTransportQueuesPoison.key = "Poison Queue Length";
115 eq->exchangeTransportQueuesUnreachable.key = "Unreachable Queue Length";
116 }
@@ -131,7 +131,7 @@ static void initialize(void)
131
132 exchange_workloads = dictionary_create_advanced(
133 DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct exchange_workload));
134 - dictionary_register_insert_callback(exchange_workloads, dict_exchange_insert_worload_cb, NULL);
134 + dictionary_register_insert_callback(exchange_workloads, dict_exchange_insert_workload_cb, NULL);
135
136 exchange_queues = dictionary_create_advanced(
137 DICT_OPTION_DONT_OVERWRITE_VALUE | DICT_OPTION_FIXED_SIZE, NULL, sizeof(struct exchange_queue));
@@ -573,7 +573,7 @@ static void netdata_exchange_rpc(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *
573 netdata_exchange_rpc_requests(&exchangeRPCRequest, update_every);
574
575 if (perflibGetObjectCounter(pDataBlock, pObjectType, &exchangeRPCActiveUserCount))
576 - netdata_exchange_rpc_active_user_count(&exchangeRPCRequest, update_every);
576 + netdata_exchange_rpc_active_user_count(&exchangeRPCActiveUserCount, update_every);
577
578 if (perflibGetObjectCounter(pDataBlock, pObjectType, &exchangeRPCConnectionCount))
579 netdata_exchange_rpc_connection_count(&exchangeRPCConnectionCount, update_every);
@@ -841,7 +841,7 @@ static void netdata_exchange_workload_active_tasks(struct exchange_workload *ew,
841 "tasks",
842 PLUGIN_WINDOWS_NAME,
843 "PerflibExchange",
844 - PRIO_EXCHANGE_WORKlOAD_ACTIVE_TASKS,
844 + PRIO_EXCHANGE_WORKLOAD_ACTIVE_TASKS,
845 update_every,
846 RRDSET_TYPE_LINE);
847
@@ -874,7 +874,7 @@ static void netdata_exchange_workload_completed_tasks(struct exchange_workload *
874 "tasks/s",
875 PLUGIN_WINDOWS_NAME,
876 "PerflibExchange",
877 - PRIO_EXCHANGE_WORKlOAD_COMPLETE_TASKS,
877 + PRIO_EXCHANGE_WORKLOAD_COMPLETE_TASKS,
878 update_every,
879 RRDSET_TYPE_LINE);
880
@@ -907,7 +907,7 @@ static void netdata_exchange_workload_queued_tasks(struct exchange_workload *ew,
907 "tasks/s",
908 PLUGIN_WINDOWS_NAME,
909 "PerflibExchange",
910 - PRIO_EXCHANGE_WORKlOAD_QUEUE_TASKS,
910 + PRIO_EXCHANGE_WORKLOAD_QUEUE_TASKS,
911 update_every,
912 RRDSET_TYPE_LINE);
913
@@ -940,7 +940,7 @@ static void netdata_exchange_workload_yielded_tasks(struct exchange_workload *ew
940 "tasks/s",
941 PLUGIN_WINDOWS_NAME,
942 "PerflibExchange",
943 - PRIO_EXCHANGE_WORKlOAD_YIELDED_TASKS,
943 + PRIO_EXCHANGE_WORKLOAD_YIELDED_TASKS,
944 update_every,
945 RRDSET_TYPE_LINE);
946
@@ -973,7 +973,7 @@ static void netdata_exchange_workload_activity_status(struct exchange_workload *
973 "status",
974 PLUGIN_WINDOWS_NAME,
975 "PerflibExchange",
976 - PRIO_EXCHANGE_WORKlOAD_ACTIVITY,
976 + PRIO_EXCHANGE_WORKLOAD_ACTIVITY,
977 update_every,
978 RRDSET_TYPE_LINE);
979
@@ -1131,7 +1131,7 @@ static void netdata_exchange_queue_internal_active_remote_delivery(struct exchan
1131 rrddim_set_by_pointer(
1132 eq->st_exchange_queue_internal_active_remote_delivery,
1133 eq->rd_exchange_queue_internal_active_remote_delivery,
1134 - (collected_number)eq->exchangeTransportQueuesInternalActiveRemoteDeliery.current.Data);
1134 + (collected_number)eq->exchangeTransportQueuesInternalActiveRemoteDelivery.current.Data);
1135 rrdset_done(eq->st_exchange_queue_internal_active_remote_delivery);
1136 }
1137
@@ -1230,7 +1230,7 @@ static void netdata_exchange_queues(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYP
1230 if (perflibGetObjectCounter(pDataBlock, pObjectType, &eq->exchangeTransportQueuesExternalActiveRemoteDelivery))
1231 netdata_exchange_queue_external_active_remote_delivery(eq, windows_shared_buffer, update_every);
1232
1233 - if (perflibGetObjectCounter(pDataBlock, pObjectType, &eq->exchangeTransportQueuesInternalActiveRemoteDeliery))
1233 + if (perflibGetObjectCounter(pDataBlock, pObjectType, &eq->exchangeTransportQueuesInternalActiveRemoteDelivery))
1234 netdata_exchange_queue_internal_active_remote_delivery(eq, windows_shared_buffer, update_every);
1235
1236 if (perflibGetObjectCounter(pDataBlock, pObjectType, &eq->exchangeTransportQueuesUnreachable))
src/collectors/windows.plugin/perflib-memory.c
+5 -11
@@ -42,11 +42,11 @@ void initialize_swap_keys(struct swap *p)
42 {
43 // SWAP Operations
44 p->pageReadsTotal.key = "Page Reads/sec";
45 - p->pageWritesTotal.key = "Page Writes/s";
45 + p->pageWritesTotal.key = "Page Writes/sec";
46
47 // Swap Pages
48 p->pageInputTotal.key = "Pages Input/sec";
49 - p->pageOutputTotal.key = "Pages Output/s";
49 + p->pageOutputTotal.key = "Pages Output/sec";
50 }
51
52 void initialize_pool_keys(struct system_pool *p)
@@ -75,9 +75,7 @@ static void do_memory_swap(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjec
75 "swap_operations",
76 NULL,
77 "swap",
78 - "mem.swap_iops"
79 -
80 - ,
78 + "mem.swap_iops",
79 "Swap Operations",
80 "operations/s",
81 PLUGIN_WINDOWS_NAME,
@@ -103,9 +101,7 @@ static void do_memory_swap(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjec
101 "swap_pages",
102 NULL,
103 "swap",
106 - "mem.swap_pages_io"
107 -
108 - ,
104 + "mem.swap_pages_io",
105 "Swap Pages",
106 "pages/s",
107 PLUGIN_WINDOWS_NAME,
@@ -137,9 +133,7 @@ static void do_memory_system_pool(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE
133 "system_pool",
134 NULL,
135 "mem",
140 - "mem.system_pool_size"
141 -
142 - ,
136 + "mem.system_pool_size",
137 "System Memory Pool",
138 "bytes",
139 PLUGIN_WINDOWS_NAME,
src/collectors/windows.plugin/perflib-netframework.c
+18 -18
@@ -1073,7 +1073,7 @@ static void netdata_framework_clr_remoting(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1073 rrddim_set_by_pointer(
1074 p->st_clrremoting_remote_calls,
1075 p->rd_clrremoting_remote_calls,
1076 - (collected_number)p->NETFrameworkCLRRemotingContexts.current.Data);
1076 + (collected_number)p->NETFrameworkCLRRemotingRemoteCalls.current.Data);
1077 rrdset_done(p->st_clrremoting_remote_calls);
1078 }
1079 }
@@ -1132,9 +1132,9 @@ static void netdata_framework_clr_security(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1132
1133 if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->NETFrameworkCLRSecurityPercentTimeinRTChecks) &&
1134 perflibGetObjectCounter(pDataBlock, pObjectType, &p->NETFrameworkCLRSecurityFrequency_PerfTime)) {
1135 - if (!p->st_clrsecurity_link_time_checks) {
1135 + if (!p->st_clrsecurity_rt_checks_time) {
1136 snprintfz(id, RRD_ID_LENGTH_MAX, "%s_clrsecurity_checks_time", windows_shared_buffer);
1137 - p->st_clrsecurity_link_time_checks = rrdset_create_localhost(
1137 + p->st_clrsecurity_rt_checks_time = rrdset_create_localhost(
1138 "netframework",
1139 id,
1140 NULL,
@@ -1150,21 +1150,21 @@ static void netdata_framework_clr_security(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1150
1151 snprintfz(
1152 id, RRD_ID_LENGTH_MAX, "netframework_%s_clrsecurity_checks_time_percent", windows_shared_buffer);
1153 - p->rd_clrsecurity_link_time_checks =
1154 - rrddim_add(p->st_clrsecurity_link_time_checks, id, "time", 1, 100, RRD_ALGORITHM_ABSOLUTE);
1153 + p->rd_clrsecurity_rt_checks_time =
1154 + rrddim_add(p->st_clrsecurity_rt_checks_time, id, "time", 1, 100, RRD_ALGORITHM_ABSOLUTE);
1155
1156 rrdlabels_add(
1157 - p->st_clrsecurity_link_time_checks->rrdlabels, "process", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1157 + p->st_clrsecurity_rt_checks_time->rrdlabels, "process", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1158 }
1159
1160 NETDATA_DOUBLE value = (NETDATA_DOUBLE)p->NETFrameworkCLRSecurityPercentTimeinRTChecks.current.Data;
1161 value /= (NETDATA_DOUBLE)p->NETFrameworkCLRSecurityFrequency_PerfTime.current.Data;
1162
1163 rrddim_set_by_pointer(
1164 - p->st_clrsecurity_link_time_checks,
1165 - p->rd_clrsecurity_link_time_checks,
1164 + p->st_clrsecurity_rt_checks_time,
1165 + p->rd_clrsecurity_rt_checks_time,
1166 (collected_number)(value * 100.0));
1167 - rrdset_done(p->st_clrsecurity_link_time_checks);
1167 + rrdset_done(p->st_clrsecurity_rt_checks_time);
1168 }
1169
1170 if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->NETFrameworkCLRSecurityStackWalkDepth)) {
@@ -1200,9 +1200,9 @@ static void netdata_framework_clr_security(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1200 }
1201
1202 if (perflibGetObjectCounter(pDataBlock, pObjectType, &p->NETFrameworkCLRSecurityRunTimeChecks)) {
1203 - if (!p->st_clrsecurity_stack_walk_depth) {
1203 + if (!p->st_clrsecurity_run_time_checks) {
1204 snprintfz(id, RRD_ID_LENGTH_MAX, "%s_clrsecurity_runtime_checks", windows_shared_buffer);
1205 - p->st_clrsecurity_stack_walk_depth = rrdset_create_localhost(
1205 + p->st_clrsecurity_run_time_checks = rrdset_create_localhost(
1206 "netframework",
1207 id,
1208 NULL,
@@ -1218,18 +1218,18 @@ static void netdata_framework_clr_security(PERF_DATA_BLOCK *pDataBlock, PERF_OBJ
1218
1219 snprintfz(
1220 id, RRD_ID_LENGTH_MAX, "netframework_%s_clrsecurity_runtime_checks_total", windows_shared_buffer);
1221 - p->rd_clrsecurity_stack_walk_depth =
1222 - rrddim_add(p->st_clrsecurity_stack_walk_depth, id, "runtime", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1221 + p->rd_clrsecurity_run_time_checks =
1222 + rrddim_add(p->st_clrsecurity_run_time_checks, id, "runtime", 1, 1, RRD_ALGORITHM_INCREMENTAL);
1223
1224 rrdlabels_add(
1225 - p->st_clrsecurity_stack_walk_depth->rrdlabels, "process", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1225 + p->st_clrsecurity_run_time_checks->rrdlabels, "process", windows_shared_buffer, RRDLABEL_SRC_AUTO);
1226 }
1227
1228 rrddim_set_by_pointer(
1229 - p->st_clrsecurity_stack_walk_depth,
1230 - p->rd_clrsecurity_stack_walk_depth,
1229 + p->st_clrsecurity_run_time_checks,
1230 + p->rd_clrsecurity_run_time_checks,
1231 (collected_number)p->NETFrameworkCLRSecurityRunTimeChecks.current.Data);
1232 - rrdset_done(p->st_clrsecurity_stack_walk_depth);
1232 + rrdset_done(p->st_clrsecurity_run_time_checks);
1233 }
1234 }
1235 }
@@ -1273,7 +1273,7 @@ netdata_framework_clr_locks_and_threads(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT
1273 snprintfz(
1274 id,
1275 RRD_ID_LENGTH_MAX,
1276 - "netframework_%s_clrlocksandthreads_recognized_threads_total",
1276 + "netframework_%s_clrlocksandthreads_queue_length_total",
1277 windows_shared_buffer);
1278 p->rd_locksandthreads_queue_length =
1279 rrddim_add(p->st_clrlocksandthreads_queue_length, id, "threads", 1, 1, RRD_ALGORITHM_INCREMENTAL);
src/collectors/windows.plugin/perflib-network.c
+2 -2
@@ -271,7 +271,7 @@ struct network_protocol {
271 .packets =
272 {
273 .InEchoReps = {.key = "Received Echo Reply/sec"},
274 - .OutEchoReps = {.key = "Received Echo Reply/sec"},
274 + .OutEchoReps = {.key = "Sent Echo Reply/sec"},
275 .InDestUnreachs = {.key = "Received Dest. Unreachable"},
276 .OutDestUnreachs = {.key = "Sent Destination Unreachable"},
277 .InRedirects = {.key = "Received Redirect/sec"},
@@ -304,7 +304,7 @@ struct network_protocol {
304 .packets =
305 {
306 .InEchoReps = {.key = "Received Echo Reply/sec"},
307 - .OutEchoReps = {.key = "Received Echo Reply/sec"},
307 + .OutEchoReps = {.key = "Sent Echo Reply/sec"},
308 .InDestUnreachs = {.key = "Received Dest. Unreachable"},
309 .OutDestUnreachs = {.key = "Sent Destination Unreachable"},
310 .InRedirects = {.key = "Received Redirect/sec"},
src/collectors/windows.plugin/perflib-numa.c
+5 -5
@@ -37,7 +37,7 @@ static void netdata_numa_chart(struct netdata_numa *nn, int update_every)
37 {
38 if (unlikely(!nn->st_numa)) {
39 char id[RRD_ID_LENGTH_MAX + 1];
40 - snprintfz(id, RRD_ID_LENGTH_MAX, "numae_node_%s_mem_usage", windows_shared_buffer);
40 + snprintfz(id, RRD_ID_LENGTH_MAX, "numa_node_%s_mem_usage", windows_shared_buffer);
41
42 nn->st_numa = rrdset_create_localhost(
43 "numa_node_mem_usage",
@@ -91,10 +91,10 @@ static bool do_numa(PERF_DATA_BLOCK *pDataBlock, int update_every)
91
92 struct netdata_numa *nn = dictionary_set(numa_dict, windows_shared_buffer, NULL, sizeof(*nn));
93
94 - if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->standby) ||
95 - perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->available) ||
96 - perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->free_zero))
97 - netdata_numa_chart(nn, update_every);
94 + perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->standby);
95 + perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->available);
96 + perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &nn->free_zero);
97 + netdata_numa_chart(nn, update_every);
98 }
99
100 return true;
src/collectors/windows.plugin/perflib-objects.c
+4 -3
@@ -21,8 +21,8 @@ static bool do_objects(PERF_DATA_BLOCK *pDataBlock, int update_every)
21 static COUNTER_DATA semaphores = {.key = "Semaphores"};
22
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);
24 + ULONGLONG sem = (ULONGLONG)semaphores.current.Data;
25 + common_semaphore_ipc(sem, (NETDATA_DOUBLE)WINDOWS_MAX_KERNEL_OBJECT, _COMMON_PLUGIN_MODULE_NAME, update_every);
26 }
27
28 return true;
@@ -45,7 +45,8 @@ int do_PerflibObjects(int update_every, usec_t dt __maybe_unused)
45 if (!pDataBlock)
46 return -1;
47
48 - do_objects(pDataBlock, update_every);
48 + if (!do_objects(pDataBlock, update_every))
49 + return -1;
50
51 return 0;
52 }
src/collectors/windows.plugin/perflib-processes.c
-12
@@ -7,11 +7,6 @@
7 #define _COMMON_PLUGIN_MODULE_NAME "PerflibProcesses"
8 #include "../common-contexts/common-contexts.h"
9
10 -static void initialize(void)
11 -{
12 - ;
13 -}
14 -
10 static void do_processor_queue(PERF_DATA_BLOCK *pDataBlock, PERF_OBJECT_TYPE *pObjectType, int update_every)
11 {
12 static RRDSET *st_queue = NULL;
@@ -74,13 +69,6 @@ static bool do_processes(PERF_DATA_BLOCK *pDataBlock, int update_every)
69
70 int do_PerflibProcesses(int update_every, usec_t dt __maybe_unused)
71 {
77 - static bool initialized = false;
78 -
79 - if (unlikely(!initialized)) {
80 - initialize();
81 - initialized = true;
82 - }
83 -
72 DWORD id = RegistryFindIDByName("System");
73 if (id == PERFLIB_REGISTRY_NAME_NOT_FOUND)
74 return -1;
src/collectors/windows.plugin/perflib-storage.c
+2 -2
@@ -176,7 +176,7 @@ static STRING *getFileSystemType(struct logical_disk *d, const char *diskName)
176
177 char fileSystemNameBuffer[128] = {0}; // Buffer for file system name
178 char pathBuffer[260] = {0}; // Path buffer to accommodate different formats
179 - char volumeName[260] = {0};
179 + char volumeName[260 + 1] = {0};
180 DWORD serialNumber = 0;
181 DWORD maxComponentLength = 0;
182 DWORD fileSystemFlags = 0;
@@ -195,7 +195,7 @@ static STRING *getFileSystemType(struct logical_disk *d, const char *diskName)
195 success = GetVolumeInformationA(
196 pathBuffer, // Path to the disk
197 volumeName, // Volume name buffer
198 - 259, // Size of volume name bufferr
198 + 260, // Size of volume name buffer
199 &serialNumber, // Volume serial number
200 &maxComponentLength, // Maximum component length
201 &fileSystemFlags, // File system flags
src/collectors/windows.plugin/perflib-web-service.c
+27 -27
@@ -36,8 +36,8 @@ struct web_service {
36 RRDSET *st_curr_connections;
37 RRDDIM *rd_curr_connections;
38
39 - RRDSET *st_connections_attemps;
40 - RRDDIM *rd_connections_attemps;
39 + RRDSET *st_connections_attempts;
40 + RRDDIM *rd_connections_attempts;
41
42 RRDSET *st_user_count;
43 RRDDIM *rd_user_anonymous;
@@ -53,8 +53,8 @@ struct web_service {
53 RRDDIM *rd_error_rate_locked;
54 RRDDIM *rd_error_rate_not_found;
55
56 - RRDSET *st_logon_attemps;
57 - RRDDIM *rd_logon_attemps;
56 + RRDSET *st_logon_attempts;
57 + RRDDIM *rd_logon_attempts;
58
59 RRDSET *st_service_uptime;
60 RRDDIM *rd_service_uptime;
@@ -440,7 +440,7 @@ static inline void netdata_webservice_active_connection(
440 }
441 }
442
443 -static inline void netdata_webservice_connection_attemp_rate(
443 +static inline void netdata_webservice_connection_attempt_rate(
444 PERF_DATA_BLOCK *pDataBlock,
445 PERF_OBJECT_TYPE *pObjectType,
446 PERF_INSTANCE_DEFINITION *pi,
@@ -448,11 +448,11 @@ static inline void netdata_webservice_connection_attemp_rate(
448 int update_every)
449 {
450 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &p->IISConnAttemptsAllInstancesTotal)) {
451 - if (!p->st_connections_attemps) {
451 + if (!p->st_connections_attempts) {
452 char id[RRD_ID_LENGTH_MAX + 1];
453 snprintfz(id, RRD_ID_LENGTH_MAX, "website_%s_connection_attempts_rate", windows_shared_buffer);
454 netdata_fix_chart_name(id);
455 - p->st_connections_attemps = rrdset_create_localhost(
455 + p->st_connections_attempts = rrdset_create_localhost(
456 "iis",
457 id,
458 NULL,
@@ -462,22 +462,22 @@ static inline void netdata_webservice_connection_attemp_rate(
462 "attempts/s",
463 PLUGIN_WINDOWS_NAME,
464 "PerflibWebService",
465 - PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMP,
465 + PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMPT,
466 update_every,
467 RRDSET_TYPE_LINE);
468
469 - p->rd_connections_attemps =
470 - rrddim_add(p->st_connections_attemps, "connection", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
469 + p->rd_connections_attempts =
470 + rrddim_add(p->st_connections_attempts, "connection", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
471
472 - rrdlabels_add(p->st_connections_attemps->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
472 + rrdlabels_add(p->st_connections_attempts->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
473 }
474
475 rrddim_set_by_pointer(
476 - p->st_connections_attemps,
477 - p->rd_connections_attemps,
478 - (collected_number)p->IISCurrentConnections.current.Data);
476 + p->st_connections_attempts,
477 + p->rd_connections_attempts,
478 + (collected_number)p->IISConnAttemptsAllInstancesTotal.current.Data);
479
480 - rrdset_done(p->st_connections_attemps);
480 + rrdset_done(p->st_connections_attempts);
481 }
482 }
483
@@ -653,7 +653,7 @@ static inline void netdata_webservice_errors_rate(
653 }
654 }
655
656 -static inline void netdata_webservice_logon_attemp_rate(
656 +static inline void netdata_webservice_logon_attempt_rate(
657 PERF_DATA_BLOCK *pDataBlock,
658 PERF_OBJECT_TYPE *pObjectType,
659 PERF_INSTANCE_DEFINITION *pi,
@@ -661,11 +661,11 @@ static inline void netdata_webservice_logon_attemp_rate(
661 int update_every)
662 {
663 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &p->IISLogonAttemptsTotal)) {
664 - if (!p->st_logon_attemps) {
664 + if (!p->st_logon_attempts) {
665 char id[RRD_ID_LENGTH_MAX + 1];
666 snprintfz(id, RRD_ID_LENGTH_MAX, "website_%s_logon_attempts_rate", windows_shared_buffer);
667 netdata_fix_chart_name(id);
668 - p->st_logon_attemps = rrdset_create_localhost(
668 + p->st_logon_attempts = rrdset_create_localhost(
669 "iis",
670 id,
671 NULL,
@@ -679,15 +679,15 @@ static inline void netdata_webservice_logon_attemp_rate(
679 update_every,
680 RRDSET_TYPE_LINE);
681
682 - p->rd_logon_attemps = rrddim_add(p->st_logon_attemps, "logon", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
682 + p->rd_logon_attempts = rrddim_add(p->st_logon_attempts, "logon", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
683
684 - rrdlabels_add(p->st_logon_attemps->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
684 + rrdlabels_add(p->st_logon_attempts->rrdlabels, "website", windows_shared_buffer, RRDLABEL_SRC_AUTO);
685 }
686
687 rrddim_set_by_pointer(
688 - p->st_logon_attemps, p->rd_logon_attemps, (collected_number)p->IISLogonAttemptsTotal.current.Data);
688 + p->st_logon_attempts, p->rd_logon_attempts, (collected_number)p->IISLogonAttemptsTotal.current.Data);
689
690 - rrdset_done(p->st_logon_attemps);
690 + rrdset_done(p->st_logon_attempts);
691 }
692 }
693
@@ -907,12 +907,12 @@ static bool do_web_services(PERF_DATA_BLOCK *pDataBlock, int update_every)
907 netdata_webservice_traffic(pDataBlock, pObjectType, pi, p, update_every);
908 netdata_webservice_file_transfer_rate(pDataBlock, pObjectType, pi, p, update_every);
909 netdata_webservice_active_connection(pDataBlock, pObjectType, pi, p, update_every);
910 - netdata_webservice_connection_attemp_rate(pDataBlock, pObjectType, pi, p, update_every);
910 + netdata_webservice_connection_attempt_rate(pDataBlock, pObjectType, pi, p, update_every);
911 netdata_webservice_user_count(pDataBlock, pObjectType, pi, p, update_every);
912 netdata_webservice_isapi_extension_request_count(pDataBlock, pObjectType, pi, p, update_every);
913 netdata_webservice_isapi_extension_request_rate(pDataBlock, pObjectType, pi, p, update_every);
914 netdata_webservice_errors_rate(pDataBlock, pObjectType, pi, p, update_every);
915 - netdata_webservice_logon_attemp_rate(pDataBlock, pObjectType, pi, p, update_every);
915 + netdata_webservice_logon_attempt_rate(pDataBlock, pObjectType, pi, p, update_every);
916 netdata_webservice_uptime(pDataBlock, pObjectType, pi, p, update_every);
917 netdata_webservice_requests(pDataBlock, pObjectType, pi, p, update_every);
918 }
@@ -1176,7 +1176,7 @@ static inline void app_pool_recycles(
1176 }
1177 }
1178
1179 -static inline void app_pool_upime(
1179 +static inline void app_pool_uptime(
1180 struct iis_app *p,
1181 PERF_DATA_BLOCK *pDataBlock,
1182 PERF_OBJECT_TYPE *pObjectType,
@@ -1357,7 +1357,7 @@ static bool do_app_pool(PERF_DATA_BLOCK *pDataBlock, int update_every)
1357 app_pool_worker_process_failures(p, pDataBlock, pObjectType, pi, update_every);
1358
1359 app_pool_recycles(p, pDataBlock, pObjectType, pi, update_every);
1360 - app_pool_upime(p, pDataBlock, pObjectType, pi, update_every);
1360 + app_pool_uptime(p, pDataBlock, pObjectType, pi, update_every);
1361 }
1362
1363 return true;
@@ -1511,7 +1511,7 @@ static inline void w3svc_w3wp_file_cache_mem_usage(
1511 if (perflibGetInstanceCounter(pDataBlock, pObjectType, pi, &p->WESCVW3WPFileCacheMemUsage)) {
1512 if (!p->st_wescv_w3wp_file_cache_mem_usage) {
1513 char id[RRD_ID_LENGTH_MAX + 1];
1514 - snprintfz(id, RRD_ID_LENGTH_MAX, "w3svc_w3wp_%s_file_cache_mem_usage", windows_shared_buffer);
1514 + snprintfz(id, RRD_ID_LENGTH_MAX, "w3svc_w3wp_%s_file_cache_mem_usage", app_name);
1515 netdata_fix_chart_name(id);
1516 p->st_wescv_w3wp_file_cache_mem_usage = rrdset_create_localhost(
1517 "iis",
src/collectors/windows.plugin/windows_plugin.h
+6 -6
@@ -72,7 +72,7 @@ enum PERFLIB_PRIO {
72 PRIO_WEBSITE_IIS_TRAFFIC,
73 PRIO_WEBSITE_IIS_FTP_FILE_TRANSFER_RATE,
74 PRIO_WEBSITE_IIS_ACTIVE_CONNECTIONS_COUNT,
75 - PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMP,
75 + PRIO_WEBSITE_IIS_CONNECTIONS_ATTEMPT,
76 PRIO_WEBSITE_IIS_USERS,
77 PRIO_WEBSITE_IIS_ISAPI_EXT_REQUEST_COUNT,
78 PRIO_WEBSITE_IIS_ISAPI_EXT_REQUEST_RATE,
@@ -287,11 +287,11 @@ enum PERFLIB_PRIO {
287 PRIO_EXCHANGE_RPC_USER_COUNT,
288 PRIO_EXCHANGE_OWA_REQUESTS_TOTAL,
289 PRIO_EXCHANGE_OWA_UNIQUE_USERS,
290 - PRIO_EXCHANGE_WORKlOAD_ACTIVE_TASKS,
291 - PRIO_EXCHANGE_WORKlOAD_COMPLETE_TASKS,
292 - PRIO_EXCHANGE_WORKlOAD_QUEUE_TASKS,
293 - PRIO_EXCHANGE_WORKlOAD_YIELDED_TASKS,
294 - PRIO_EXCHANGE_WORKlOAD_ACTIVITY,
290 + PRIO_EXCHANGE_WORKLOAD_ACTIVE_TASKS,
291 + PRIO_EXCHANGE_WORKLOAD_COMPLETE_TASKS,
292 + PRIO_EXCHANGE_WORKLOAD_QUEUE_TASKS,
293 + PRIO_EXCHANGE_WORKLOAD_YIELDED_TASKS,
294 + PRIO_EXCHANGE_WORKLOAD_ACTIVITY,
295 PRIO_EXCHANGE_PROXY_AVG_AUTH_LATENCY,
296 PRIO_EXCHANGE_PROXY_AVG_CAS_PROCESSING_LATENCY,
297 PRIO_EXCHANGE_PROXY_MAILBOX_PROXY_FAILURE,