github.com/netdata/go.d.plugin@v0.58.1/modules/windows/windows_test.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package windows 4 5 import ( 6 "fmt" 7 "net/http" 8 "net/http/httptest" 9 "os" 10 "strings" 11 "testing" 12 13 "github.com/netdata/go.d.plugin/pkg/web" 14 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17 ) 18 19 var ( 20 v0200Metrics, _ = os.ReadFile("testdata/v0.20.0/metrics.txt") 21 ) 22 23 func Test_TestData(t *testing.T) { 24 for name, data := range map[string][]byte{ 25 "v0200Metrics": v0200Metrics, 26 } { 27 assert.NotNilf(t, data, name) 28 } 29 } 30 31 func TestNew(t *testing.T) { 32 assert.IsType(t, (*Windows)(nil), New()) 33 } 34 35 func TestWindows_Init(t *testing.T) { 36 tests := map[string]struct { 37 config Config 38 wantFail bool 39 }{ 40 "success if 'url' is set": { 41 config: Config{ 42 HTTP: web.HTTP{Request: web.Request{URL: "http://127.0.0.1:9182/metrics"}}}, 43 }, 44 "fails on default config": { 45 wantFail: true, 46 config: New().Config, 47 }, 48 "fails if 'url' is unset": { 49 wantFail: true, 50 config: Config{HTTP: web.HTTP{Request: web.Request{URL: ""}}}, 51 }, 52 } 53 54 for name, test := range tests { 55 t.Run(name, func(t *testing.T) { 56 win := New() 57 win.Config = test.config 58 59 if test.wantFail { 60 assert.False(t, win.Init()) 61 } else { 62 assert.True(t, win.Init()) 63 } 64 }) 65 } 66 } 67 68 func TestWindows_Check(t *testing.T) { 69 tests := map[string]struct { 70 prepare func() (win *Windows, cleanup func()) 71 wantFail bool 72 }{ 73 "success on valid response v0.20.0": { 74 prepare: prepareWindowsV0200, 75 }, 76 "fails if endpoint returns invalid data": { 77 wantFail: true, 78 prepare: prepareWindowsReturnsInvalidData, 79 }, 80 "fails on connection refused": { 81 wantFail: true, 82 prepare: prepareWindowsConnectionRefused, 83 }, 84 "fails on 404 response": { 85 wantFail: true, 86 prepare: prepareWindowsResponse404, 87 }, 88 } 89 90 for name, test := range tests { 91 t.Run(name, func(t *testing.T) { 92 win, cleanup := test.prepare() 93 defer cleanup() 94 95 require.True(t, win.Init()) 96 97 if test.wantFail { 98 assert.False(t, win.Check()) 99 } else { 100 assert.True(t, win.Check()) 101 } 102 }) 103 } 104 } 105 106 func TestWindows_Charts(t *testing.T) { 107 assert.NotNil(t, New().Charts()) 108 } 109 110 func TestWindows_Cleanup(t *testing.T) { 111 assert.NotPanics(t, New().Cleanup) 112 } 113 114 func TestWindows_Collect(t *testing.T) { 115 tests := map[string]struct { 116 prepare func() (win *Windows, cleanup func()) 117 wantCollected map[string]int64 118 }{ 119 "success on valid response v0.20.0": { 120 prepare: prepareWindowsV0200, 121 wantCollected: map[string]int64{ 122 "ad_atq_average_request_latency": 0, 123 "ad_atq_outstanding_requests": 0, 124 "ad_binds_total": 184, 125 "ad_database_operations_total_add": 1, 126 "ad_database_operations_total_delete": 0, 127 "ad_database_operations_total_modify": 30, 128 "ad_database_operations_total_recycle": 0, 129 "ad_directory_operations_total_read": 726, 130 "ad_directory_operations_total_search": 831, 131 "ad_directory_operations_total_write": 31, 132 "ad_directory_service_threads": 0, 133 "ad_ldap_last_bind_time_seconds": 0, 134 "ad_ldap_searches_total": 1382, 135 "ad_name_cache_hits_total": 41161, 136 "ad_name_cache_lookups_total": 53046, 137 "ad_replication_data_intersite_bytes_total_inbound": 0, 138 "ad_replication_data_intersite_bytes_total_outbound": 0, 139 "ad_replication_data_intrasite_bytes_total_inbound": 0, 140 "ad_replication_data_intrasite_bytes_total_outbound": 0, 141 "ad_replication_inbound_objects_filtered_total": 0, 142 "ad_replication_inbound_properties_filtered_total": 0, 143 "ad_replication_inbound_properties_updated_total": 0, 144 "ad_replication_inbound_sync_objects_remaining": 0, 145 "ad_replication_pending_synchronizations": 0, 146 "ad_replication_sync_requests_total": 0, 147 "adcs_cert_template_Administrator_challenge_response_processing_time_seconds": 0, 148 "adcs_cert_template_Administrator_challenge_responses_total": 0, 149 "adcs_cert_template_Administrator_failed_requests_total": 0, 150 "adcs_cert_template_Administrator_issued_requests_total": 0, 151 "adcs_cert_template_Administrator_pending_requests_total": 0, 152 "adcs_cert_template_Administrator_request_cryptographic_signing_time_seconds": 0, 153 "adcs_cert_template_Administrator_request_policy_module_processing_time_seconds": 0, 154 "adcs_cert_template_Administrator_request_processing_time_seconds": 0, 155 "adcs_cert_template_Administrator_requests_total": 0, 156 "adcs_cert_template_Administrator_retrievals_processing_time_seconds": 0, 157 "adcs_cert_template_Administrator_retrievals_total": 0, 158 "adcs_cert_template_Administrator_signed_certificate_timestamp_list_processing_time_seconds": 0, 159 "adcs_cert_template_Administrator_signed_certificate_timestamp_lists_total": 0, 160 "adcs_cert_template_DomainController_challenge_response_processing_time_seconds": 0, 161 "adcs_cert_template_DomainController_challenge_responses_total": 0, 162 "adcs_cert_template_DomainController_failed_requests_total": 0, 163 "adcs_cert_template_DomainController_issued_requests_total": 1, 164 "adcs_cert_template_DomainController_pending_requests_total": 0, 165 "adcs_cert_template_DomainController_request_cryptographic_signing_time_seconds": 0, 166 "adcs_cert_template_DomainController_request_policy_module_processing_time_seconds": 16, 167 "adcs_cert_template_DomainController_request_processing_time_seconds": 63, 168 "adcs_cert_template_DomainController_requests_total": 1, 169 "adcs_cert_template_DomainController_retrievals_processing_time_seconds": 0, 170 "adcs_cert_template_DomainController_retrievals_total": 0, 171 "adcs_cert_template_DomainController_signed_certificate_timestamp_list_processing_time_seconds": 0, 172 "adcs_cert_template_DomainController_signed_certificate_timestamp_lists_total": 0, 173 "adfs_ad_login_connection_failures_total": 0, 174 "adfs_certificate_authentications_total": 0, 175 "adfs_db_artifact_failure_total": 0, 176 "adfs_db_artifact_query_time_seconds_total": 0, 177 "adfs_db_config_failure_total": 0, 178 "adfs_db_config_query_time_seconds_total": 101, 179 "adfs_device_authentications_total": 0, 180 "adfs_external_authentications_failure_total": 0, 181 "adfs_external_authentications_success_total": 0, 182 "adfs_extranet_account_lockouts_total": 0, 183 "adfs_federated_authentications_total": 0, 184 "adfs_federation_metadata_requests_total": 1, 185 "adfs_oauth_authorization_requests_total": 0, 186 "adfs_oauth_client_authentication_failure_total": 0, 187 "adfs_oauth_client_authentication_success_total": 0, 188 "adfs_oauth_client_credentials_failure_total": 0, 189 "adfs_oauth_client_credentials_success_total": 0, 190 "adfs_oauth_client_privkey_jtw_authentication_failure_total": 0, 191 "adfs_oauth_client_privkey_jwt_authentications_success_total": 0, 192 "adfs_oauth_client_secret_basic_authentications_failure_total": 0, 193 "adfs_oauth_client_secret_basic_authentications_success_total": 0, 194 "adfs_oauth_client_secret_post_authentications_failure_total": 0, 195 "adfs_oauth_client_secret_post_authentications_success_total": 0, 196 "adfs_oauth_client_windows_authentications_failure_total": 0, 197 "adfs_oauth_client_windows_authentications_success_total": 0, 198 "adfs_oauth_logon_certificate_requests_failure_total": 0, 199 "adfs_oauth_logon_certificate_token_requests_success_total": 0, 200 "adfs_oauth_password_grant_requests_failure_total": 0, 201 "adfs_oauth_password_grant_requests_success_total": 0, 202 "adfs_oauth_token_requests_success_total": 0, 203 "adfs_passive_requests_total": 0, 204 "adfs_passport_authentications_total": 0, 205 "adfs_password_change_failed_total": 0, 206 "adfs_password_change_succeeded_total": 0, 207 "adfs_samlp_token_requests_success_total": 0, 208 "adfs_sso_authentications_failure_total": 0, 209 "adfs_sso_authentications_success_total": 0, 210 "adfs_token_requests_total": 0, 211 "adfs_userpassword_authentications_failure_total": 0, 212 "adfs_userpassword_authentications_success_total": 0, 213 "adfs_windows_integrated_authentications_total": 0, 214 "adfs_wsfed_token_requests_success_total": 0, 215 "adfs_wstrust_token_requests_success_total": 0, 216 "collector_ad_duration": 769, 217 "collector_ad_status_fail": 0, 218 "collector_ad_status_success": 1, 219 "collector_adcs_duration": 0, 220 "collector_adcs_status_fail": 0, 221 "collector_adcs_status_success": 1, 222 "collector_adfs_duration": 3, 223 "collector_adfs_status_fail": 0, 224 "collector_adfs_status_success": 1, 225 "collector_cpu_duration": 0, 226 "collector_cpu_status_fail": 0, 227 "collector_cpu_status_success": 1, 228 "collector_exchange_duration": 33, 229 "collector_exchange_status_fail": 0, 230 "collector_exchange_status_success": 1, 231 "collector_hyperv_duration": 900, 232 "collector_hyperv_status_fail": 0, 233 "collector_hyperv_status_success": 1, 234 "collector_iis_duration": 0, 235 "collector_iis_status_fail": 0, 236 "collector_iis_status_success": 1, 237 "collector_logical_disk_duration": 0, 238 "collector_logical_disk_status_fail": 0, 239 "collector_logical_disk_status_success": 1, 240 "collector_logon_duration": 113, 241 "collector_logon_status_fail": 0, 242 "collector_logon_status_success": 1, 243 "collector_memory_duration": 0, 244 "collector_memory_status_fail": 0, 245 "collector_memory_status_success": 1, 246 "collector_mssql_duration": 3, 247 "collector_mssql_status_fail": 0, 248 "collector_mssql_status_success": 1, 249 "collector_net_duration": 0, 250 "collector_net_status_fail": 0, 251 "collector_net_status_success": 1, 252 "collector_netframework_clrexceptions_duration": 1437, 253 "collector_netframework_clrexceptions_status_fail": 0, 254 "collector_netframework_clrexceptions_status_success": 1, 255 "collector_netframework_clrinterop_duration": 1491, 256 "collector_netframework_clrinterop_status_fail": 0, 257 "collector_netframework_clrinterop_status_success": 1, 258 "collector_netframework_clrjit_duration": 1278, 259 "collector_netframework_clrjit_status_fail": 0, 260 "collector_netframework_clrjit_status_success": 1, 261 "collector_netframework_clrloading_duration": 1323, 262 "collector_netframework_clrloading_status_fail": 0, 263 "collector_netframework_clrloading_status_success": 1, 264 "collector_netframework_clrlocksandthreads_duration": 1357, 265 "collector_netframework_clrlocksandthreads_status_fail": 0, 266 "collector_netframework_clrlocksandthreads_status_success": 1, 267 "collector_netframework_clrmemory_duration": 1406, 268 "collector_netframework_clrmemory_status_fail": 0, 269 "collector_netframework_clrmemory_status_success": 1, 270 "collector_netframework_clrremoting_duration": 1519, 271 "collector_netframework_clrremoting_status_fail": 0, 272 "collector_netframework_clrremoting_status_success": 1, 273 "collector_netframework_clrsecurity_duration": 1467, 274 "collector_netframework_clrsecurity_status_fail": 0, 275 "collector_netframework_clrsecurity_status_success": 1, 276 "collector_os_duration": 2, 277 "collector_os_status_fail": 0, 278 "collector_os_status_success": 1, 279 "collector_process_duration": 115, 280 "collector_process_status_fail": 0, 281 "collector_process_status_success": 1, 282 "collector_service_duration": 101, 283 "collector_service_status_fail": 0, 284 "collector_service_status_success": 1, 285 "collector_system_duration": 0, 286 "collector_system_status_fail": 0, 287 "collector_system_status_success": 1, 288 "collector_tcp_duration": 0, 289 "collector_tcp_status_fail": 0, 290 "collector_tcp_status_success": 1, 291 "cpu_core_0,0_cstate_c1": 160233427, 292 "cpu_core_0,0_cstate_c2": 0, 293 "cpu_core_0,0_cstate_c3": 0, 294 "cpu_core_0,0_dpc_time": 67109, 295 "cpu_core_0,0_dpcs": 4871900, 296 "cpu_core_0,0_idle_time": 162455593, 297 "cpu_core_0,0_interrupt_time": 77281, 298 "cpu_core_0,0_interrupts": 155194331, 299 "cpu_core_0,0_privileged_time": 1182109, 300 "cpu_core_0,0_user_time": 1073671, 301 "cpu_core_0,1_cstate_c1": 159528054, 302 "cpu_core_0,1_cstate_c2": 0, 303 "cpu_core_0,1_cstate_c3": 0, 304 "cpu_core_0,1_dpc_time": 11093, 305 "cpu_core_0,1_dpcs": 1650552, 306 "cpu_core_0,1_idle_time": 159478125, 307 "cpu_core_0,1_interrupt_time": 58093, 308 "cpu_core_0,1_interrupts": 79325847, 309 "cpu_core_0,1_privileged_time": 1801234, 310 "cpu_core_0,1_user_time": 3432000, 311 "cpu_core_0,2_cstate_c1": 159891723, 312 "cpu_core_0,2_cstate_c2": 0, 313 "cpu_core_0,2_cstate_c3": 0, 314 "cpu_core_0,2_dpc_time": 16062, 315 "cpu_core_0,2_dpcs": 2236469, 316 "cpu_core_0,2_idle_time": 159848437, 317 "cpu_core_0,2_interrupt_time": 53515, 318 "cpu_core_0,2_interrupts": 67305419, 319 "cpu_core_0,2_privileged_time": 1812546, 320 "cpu_core_0,2_user_time": 3050250, 321 "cpu_core_0,3_cstate_c1": 159544117, 322 "cpu_core_0,3_cstate_c2": 0, 323 "cpu_core_0,3_cstate_c3": 0, 324 "cpu_core_0,3_dpc_time": 8140, 325 "cpu_core_0,3_dpcs": 1185046, 326 "cpu_core_0,3_idle_time": 159527546, 327 "cpu_core_0,3_interrupt_time": 44484, 328 "cpu_core_0,3_interrupts": 60766938, 329 "cpu_core_0,3_privileged_time": 1760828, 330 "cpu_core_0,3_user_time": 3422875, 331 "cpu_dpc_time": 102404, 332 "cpu_idle_time": 641309701, 333 "cpu_interrupt_time": 233373, 334 "cpu_privileged_time": 6556717, 335 "cpu_user_time": 10978796, 336 "exchange_activesync_ping_cmds_pending": 0, 337 "exchange_activesync_requests_total": 14, 338 "exchange_activesync_sync_cmds_total": 0, 339 "exchange_autodiscover_requests_total": 1, 340 "exchange_avail_service_requests_per_sec": 0, 341 "exchange_http_proxy_autodiscover_avg_auth_latency": 1, 342 "exchange_http_proxy_autodiscover_avg_cas_proccessing_latency_sec": 3, 343 "exchange_http_proxy_autodiscover_mailbox_proxy_failure_rate": 0, 344 "exchange_http_proxy_autodiscover_mailbox_server_locator_avg_latency_sec": 8, 345 "exchange_http_proxy_autodiscover_outstanding_proxy_requests": 0, 346 "exchange_http_proxy_autodiscover_requests_total": 27122, 347 "exchange_http_proxy_eas_avg_auth_latency": 0, 348 "exchange_http_proxy_eas_avg_cas_proccessing_latency_sec": 3, 349 "exchange_http_proxy_eas_mailbox_proxy_failure_rate": 0, 350 "exchange_http_proxy_eas_mailbox_server_locator_avg_latency_sec": 8, 351 "exchange_http_proxy_eas_outstanding_proxy_requests": 0, 352 "exchange_http_proxy_eas_requests_total": 32519, 353 "exchange_ldap_complianceauditservice_10_long_running_ops_per_sec": 0, 354 "exchange_ldap_complianceauditservice_10_read_time_sec": 18, 355 "exchange_ldap_complianceauditservice_10_search_time_sec": 58, 356 "exchange_ldap_complianceauditservice_10_timeout_errors_total": 0, 357 "exchange_ldap_complianceauditservice_10_write_time_sec": 0, 358 "exchange_ldap_complianceauditservice_long_running_ops_per_sec": 0, 359 "exchange_ldap_complianceauditservice_read_time_sec": 8, 360 "exchange_ldap_complianceauditservice_search_time_sec": 46, 361 "exchange_ldap_complianceauditservice_timeout_errors_total": 0, 362 "exchange_ldap_complianceauditservice_write_time_sec": 0, 363 "exchange_owa_current_unique_users": 0, 364 "exchange_owa_requests_total": 0, 365 "exchange_rpc_active_user_count": 0, 366 "exchange_rpc_avg_latency_sec": 1, 367 "exchange_rpc_connection_count": 0, 368 "exchange_rpc_operations_total": 9, 369 "exchange_rpc_requests": 0, 370 "exchange_rpc_user_count": 0, 371 "exchange_transport_queues_active_mailbox_delivery_high_priority": 0, 372 "exchange_transport_queues_active_mailbox_delivery_low_priority": 0, 373 "exchange_transport_queues_active_mailbox_delivery_none_priority": 0, 374 "exchange_transport_queues_active_mailbox_delivery_normal_priority": 0, 375 "exchange_transport_queues_external_active_remote_delivery_high_priority": 0, 376 "exchange_transport_queues_external_active_remote_delivery_low_priority": 0, 377 "exchange_transport_queues_external_active_remote_delivery_none_priority": 0, 378 "exchange_transport_queues_external_active_remote_delivery_normal_priority": 0, 379 "exchange_transport_queues_external_largest_delivery_high_priority": 0, 380 "exchange_transport_queues_external_largest_delivery_low_priority": 0, 381 "exchange_transport_queues_external_largest_delivery_none_priority": 0, 382 "exchange_transport_queues_external_largest_delivery_normal_priority": 0, 383 "exchange_transport_queues_internal_active_remote_delivery_high_priority": 0, 384 "exchange_transport_queues_internal_active_remote_delivery_low_priority": 0, 385 "exchange_transport_queues_internal_active_remote_delivery_none_priority": 0, 386 "exchange_transport_queues_internal_active_remote_delivery_normal_priority": 0, 387 "exchange_transport_queues_internal_largest_delivery_high_priority": 0, 388 "exchange_transport_queues_internal_largest_delivery_low_priority": 0, 389 "exchange_transport_queues_internal_largest_delivery_none_priority": 0, 390 "exchange_transport_queues_internal_largest_delivery_normal_priority": 0, 391 "exchange_transport_queues_poison_high_priority": 0, 392 "exchange_transport_queues_poison_low_priority": 0, 393 "exchange_transport_queues_poison_none_priority": 0, 394 "exchange_transport_queues_poison_normal_priority": 0, 395 "exchange_transport_queues_retry_mailbox_delivery_high_priority": 0, 396 "exchange_transport_queues_retry_mailbox_delivery_low_priority": 0, 397 "exchange_transport_queues_retry_mailbox_delivery_none_priority": 0, 398 "exchange_transport_queues_retry_mailbox_delivery_normal_priority": 0, 399 "exchange_transport_queues_unreachable_high_priority": 0, 400 "exchange_transport_queues_unreachable_low_priority": 0, 401 "exchange_transport_queues_unreachable_none_priority": 0, 402 "exchange_transport_queues_unreachable_normal_priority": 0, 403 "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_active_tasks": 0, 404 "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_completed_tasks": 0, 405 "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_is_active": 1, 406 "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_is_paused": 0, 407 "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_queued_tasks": 0, 408 "exchange_workload_complianceauditservice_auditcomplianceserviceprioritized_audit_task_execution_manager_yielded_tasks": 0, 409 "exchange_workload_microsoft_exchange_servicehost_darruntime_active_tasks": 0, 410 "exchange_workload_microsoft_exchange_servicehost_darruntime_completed_tasks": 0, 411 "exchange_workload_microsoft_exchange_servicehost_darruntime_is_active": 1, 412 "exchange_workload_microsoft_exchange_servicehost_darruntime_is_paused": 0, 413 "exchange_workload_microsoft_exchange_servicehost_darruntime_queued_tasks": 0, 414 "exchange_workload_microsoft_exchange_servicehost_darruntime_yielded_tasks": 0, 415 "hyperv_health_critical": 0, 416 "hyperv_health_ok": 1, 417 "hyperv_root_partition_1G_device_pages": 0, 418 "hyperv_root_partition_1G_gpa_pages": 6, 419 "hyperv_root_partition_2M_device_pages": 0, 420 "hyperv_root_partition_2M_gpa_pages": 5255, 421 "hyperv_root_partition_4K_device_pages": 0, 422 "hyperv_root_partition_4K_gpa_pages": 58880, 423 "hyperv_root_partition_address_spaces": 0, 424 "hyperv_root_partition_attached_devices": 1, 425 "hyperv_root_partition_deposited_pages": 31732, 426 "hyperv_root_partition_device_dma_errors": 0, 427 "hyperv_root_partition_device_interrupt_errors": 0, 428 "hyperv_root_partition_device_interrupt_throttle_events": 0, 429 "hyperv_root_partition_gpa_space_modifications": 0, 430 "hyperv_root_partition_io_tlb_flush": 23901, 431 "hyperv_root_partition_physical_pages_allocated": 0, 432 "hyperv_root_partition_virtual_tlb_flush_entires": 15234, 433 "hyperv_root_partition_virtual_tlb_pages": 64, 434 "hyperv_vid_ubuntu_22_04_lts_physical_pages_allocated": 745472, 435 "hyperv_vid_ubuntu_22_04_lts_remote_physical_pages": 0, 436 "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_bytes_read": 83456, 437 "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_bytes_written": 1148928, 438 "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_error_count": 0, 439 "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_operations_read": 6, 440 "hyperv_vm_device_--_-d_-ana-vm-hyperv-virtual_machines-3aa8d474-2365-4041-a7cb-2a78287d6fe0_vmgs_operations_written": 34, 441 "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_bytes_read": 531184640, 442 "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_bytes_written": 425905152, 443 "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_error_count": 3, 444 "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_operations_read": 13196, 445 "hyperv_vm_device_d_-ana-vm-hyperv-vhd-ubuntu_22_04_lts_838d93a1-7d30-43cd-9f69-f336829c0934_avhdx_operations_written": 3866, 446 "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_bytes_received": 473654, 447 "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_bytes_sent": 43550457, 448 "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_packets_incoming_dropped": 0, 449 "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_packets_outgoing_dropped": 284, 450 "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_packets_received": 6137, 451 "hyperv_vm_interface_default_switch_312ff9c7-1f07-4eba-81fe-f5b4f445b810_packets_sent": 8905, 452 "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_bytes_received": 43509444, 453 "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_bytes_sent": 473654, 454 "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_packets_incoming_dropped": 0, 455 "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_packets_outgoing_dropped": 0, 456 "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_packets_received": 8621, 457 "hyperv_vm_interface_ubuntu_22_04_lts_adaptador_de_rede_3aa8d474-2365-4041-a7cb-2a78287d6fe0--98f1dbee-505c-4086-b80e-87a27faecbd4_packets_sent": 6137, 458 "hyperv_vm_ubuntu_22_04_lts_cpu_guest_run_time": 62534217, 459 "hyperv_vm_ubuntu_22_04_lts_cpu_hypervisor_run_time": 4457712, 460 "hyperv_vm_ubuntu_22_04_lts_cpu_remote_run_time": 0, 461 "hyperv_vm_ubuntu_22_04_lts_memory_physical": 2628, 462 "hyperv_vm_ubuntu_22_04_lts_memory_physical_guest_visible": 2904, 463 "hyperv_vm_ubuntu_22_04_lts_memory_pressure_current": 83, 464 "hyperv_vswitch_default_switch_broadcast_packets_received_total": 51, 465 "hyperv_vswitch_default_switch_broadcast_packets_sent_total": 18, 466 "hyperv_vswitch_default_switch_bytes_received_total": 44024111, 467 "hyperv_vswitch_default_switch_bytes_sent_total": 43983098, 468 "hyperv_vswitch_default_switch_directed_packets_received_total": 14603, 469 "hyperv_vswitch_default_switch_directed_packets_send_total": 14603, 470 "hyperv_vswitch_default_switch_dropped_packets_incoming_total": 284, 471 "hyperv_vswitch_default_switch_dropped_packets_outcoming_total": 0, 472 "hyperv_vswitch_default_switch_extensions_dropped_packets_incoming_total": 0, 473 "hyperv_vswitch_default_switch_extensions_dropped_packets_outcoming_total": 0, 474 "hyperv_vswitch_default_switch_learned_mac_addresses_total": 2, 475 "hyperv_vswitch_default_switch_multicast_packets_received_total": 388, 476 "hyperv_vswitch_default_switch_multicast_packets_sent_total": 137, 477 "hyperv_vswitch_default_switch_number_of_send_channel_moves_total": 0, 478 "hyperv_vswitch_default_switch_number_of_vmq_moves_total": 0, 479 "hyperv_vswitch_default_switch_packets_flooded_total": 0, 480 "hyperv_vswitch_default_switch_packets_received_total": 15042, 481 "hyperv_vswitch_default_switch_purged_mac_addresses_total": 0, 482 "iis_website_Default_Web_Site_connection_attempts_all_instances_total": 1, 483 "iis_website_Default_Web_Site_current_anonymous_users": 0, 484 "iis_website_Default_Web_Site_current_connections": 0, 485 "iis_website_Default_Web_Site_current_isapi_extension_requests": 0, 486 "iis_website_Default_Web_Site_current_non_anonymous_users": 0, 487 "iis_website_Default_Web_Site_files_received_total": 0, 488 "iis_website_Default_Web_Site_files_sent_total": 2, 489 "iis_website_Default_Web_Site_isapi_extension_requests_total": 0, 490 "iis_website_Default_Web_Site_locked_errors_total": 0, 491 "iis_website_Default_Web_Site_logon_attempts_total": 4, 492 "iis_website_Default_Web_Site_not_found_errors_total": 1, 493 "iis_website_Default_Web_Site_received_bytes_total": 10289, 494 "iis_website_Default_Web_Site_requests_total": 3, 495 "iis_website_Default_Web_Site_sent_bytes_total": 105882, 496 "iis_website_Default_Web_Site_service_uptime": 258633, 497 "logical_disk_C:_free_space": 43636490240, 498 "logical_disk_C:_read_bytes_total": 17676328448, 499 "logical_disk_C:_read_latency": 97420, 500 "logical_disk_C:_reads_total": 350593, 501 "logical_disk_C:_total_space": 67938287616, 502 "logical_disk_C:_used_space": 24301797376, 503 "logical_disk_C:_write_bytes_total": 9135282688, 504 "logical_disk_C:_write_latency": 123912, 505 "logical_disk_C:_writes_total": 450705, 506 "logon_type_batch_sessions": 0, 507 "logon_type_cached_interactive_sessions": 0, 508 "logon_type_cached_remote_interactive_sessions": 0, 509 "logon_type_cached_unlock_sessions": 0, 510 "logon_type_interactive_sessions": 2, 511 "logon_type_network_clear_text_sessions": 0, 512 "logon_type_network_sessions": 0, 513 "logon_type_new_credentials_sessions": 0, 514 "logon_type_proxy_sessions": 0, 515 "logon_type_remote_interactive_sessions": 0, 516 "logon_type_service_sessions": 0, 517 "logon_type_system_sessions": 0, 518 "logon_type_unlock_sessions": 0, 519 "memory_available_bytes": 1379942400, 520 "memory_cache_faults_total": 8009603, 521 "memory_cache_total": 1392185344, 522 "memory_commit_limit": 5733113856, 523 "memory_committed_bytes": 3447439360, 524 "memory_modified_page_list_bytes": 32653312, 525 "memory_not_committed_bytes": 2285674496, 526 "memory_page_faults_total": 119093924, 527 "memory_pool_nonpaged_bytes_total": 126865408, 528 "memory_pool_paged_bytes": 303906816, 529 "memory_standby_cache_core_bytes": 107376640, 530 "memory_standby_cache_normal_priority_bytes": 1019121664, 531 "memory_standby_cache_reserve_bytes": 233033728, 532 "memory_standby_cache_total": 1359532032, 533 "memory_swap_page_reads_total": 402087, 534 "memory_swap_page_writes_total": 7012, 535 "memory_swap_pages_read_total": 4643279, 536 "memory_swap_pages_written_total": 312896, 537 "memory_used_bytes": 2876776448, 538 "mssql_db_master_instance_SQLEXPRESS_active_transactions": 0, 539 "mssql_db_master_instance_SQLEXPRESS_backup_restore_operations": 0, 540 "mssql_db_master_instance_SQLEXPRESS_data_files_size_bytes": 4653056, 541 "mssql_db_master_instance_SQLEXPRESS_log_flushed_bytes": 3702784, 542 "mssql_db_master_instance_SQLEXPRESS_log_flushes": 252, 543 "mssql_db_master_instance_SQLEXPRESS_transactions": 2183, 544 "mssql_db_master_instance_SQLEXPRESS_write_transactions": 236, 545 "mssql_db_model_instance_SQLEXPRESS_active_transactions": 0, 546 "mssql_db_model_instance_SQLEXPRESS_backup_restore_operations": 0, 547 "mssql_db_model_instance_SQLEXPRESS_data_files_size_bytes": 8388608, 548 "mssql_db_model_instance_SQLEXPRESS_log_flushed_bytes": 12288, 549 "mssql_db_model_instance_SQLEXPRESS_log_flushes": 3, 550 "mssql_db_model_instance_SQLEXPRESS_transactions": 4467, 551 "mssql_db_model_instance_SQLEXPRESS_write_transactions": 0, 552 "mssql_db_msdb_instance_SQLEXPRESS_active_transactions": 0, 553 "mssql_db_msdb_instance_SQLEXPRESS_backup_restore_operations": 0, 554 "mssql_db_msdb_instance_SQLEXPRESS_data_files_size_bytes": 15466496, 555 "mssql_db_msdb_instance_SQLEXPRESS_log_flushed_bytes": 0, 556 "mssql_db_msdb_instance_SQLEXPRESS_log_flushes": 0, 557 "mssql_db_msdb_instance_SQLEXPRESS_transactions": 4582, 558 "mssql_db_msdb_instance_SQLEXPRESS_write_transactions": 0, 559 "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_active_transactions": 0, 560 "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_backup_restore_operations": 0, 561 "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_data_files_size_bytes": 41943040, 562 "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_log_flushed_bytes": 0, 563 "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_log_flushes": 0, 564 "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_transactions": 2, 565 "mssql_db_mssqlsystemresource_instance_SQLEXPRESS_write_transactions": 0, 566 "mssql_db_tempdb_instance_SQLEXPRESS_active_transactions": 0, 567 "mssql_db_tempdb_instance_SQLEXPRESS_backup_restore_operations": 0, 568 "mssql_db_tempdb_instance_SQLEXPRESS_data_files_size_bytes": 8388608, 569 "mssql_db_tempdb_instance_SQLEXPRESS_log_flushed_bytes": 118784, 570 "mssql_db_tempdb_instance_SQLEXPRESS_log_flushes": 2, 571 "mssql_db_tempdb_instance_SQLEXPRESS_transactions": 1558, 572 "mssql_db_tempdb_instance_SQLEXPRESS_write_transactions": 29, 573 "mssql_instance_SQLEXPRESS_accessmethods_page_splits": 429, 574 "mssql_instance_SQLEXPRESS_bufman_buffer_cache_hits": 86, 575 "mssql_instance_SQLEXPRESS_bufman_checkpoint_pages": 82, 576 "mssql_instance_SQLEXPRESS_bufman_page_life_expectancy_seconds": 191350, 577 "mssql_instance_SQLEXPRESS_bufman_page_reads": 797, 578 "mssql_instance_SQLEXPRESS_bufman_page_writes": 92, 579 "mssql_instance_SQLEXPRESS_cache_hit_ratio": 100, 580 "mssql_instance_SQLEXPRESS_genstats_blocked_processes": 0, 581 "mssql_instance_SQLEXPRESS_genstats_user_connections": 1, 582 "mssql_instance_SQLEXPRESS_memmgr_connection_memory_bytes": 1015808, 583 "mssql_instance_SQLEXPRESS_memmgr_external_benefit_of_memory": 0, 584 "mssql_instance_SQLEXPRESS_memmgr_pending_memory_grants": 0, 585 "mssql_instance_SQLEXPRESS_memmgr_total_server_memory_bytes": 198836224, 586 "mssql_instance_SQLEXPRESS_resource_AllocUnit_locks_deadlocks": 0, 587 "mssql_instance_SQLEXPRESS_resource_AllocUnit_locks_lock_wait_seconds": 0, 588 "mssql_instance_SQLEXPRESS_resource_Application_locks_deadlocks": 0, 589 "mssql_instance_SQLEXPRESS_resource_Application_locks_lock_wait_seconds": 0, 590 "mssql_instance_SQLEXPRESS_resource_Database_locks_deadlocks": 0, 591 "mssql_instance_SQLEXPRESS_resource_Database_locks_lock_wait_seconds": 0, 592 "mssql_instance_SQLEXPRESS_resource_Extent_locks_deadlocks": 0, 593 "mssql_instance_SQLEXPRESS_resource_Extent_locks_lock_wait_seconds": 0, 594 "mssql_instance_SQLEXPRESS_resource_File_locks_deadlocks": 0, 595 "mssql_instance_SQLEXPRESS_resource_File_locks_lock_wait_seconds": 0, 596 "mssql_instance_SQLEXPRESS_resource_HoBT_locks_deadlocks": 0, 597 "mssql_instance_SQLEXPRESS_resource_HoBT_locks_lock_wait_seconds": 0, 598 "mssql_instance_SQLEXPRESS_resource_Key_locks_deadlocks": 0, 599 "mssql_instance_SQLEXPRESS_resource_Key_locks_lock_wait_seconds": 0, 600 "mssql_instance_SQLEXPRESS_resource_Metadata_locks_deadlocks": 0, 601 "mssql_instance_SQLEXPRESS_resource_Metadata_locks_lock_wait_seconds": 0, 602 "mssql_instance_SQLEXPRESS_resource_OIB_locks_deadlocks": 0, 603 "mssql_instance_SQLEXPRESS_resource_OIB_locks_lock_wait_seconds": 0, 604 "mssql_instance_SQLEXPRESS_resource_Object_locks_deadlocks": 0, 605 "mssql_instance_SQLEXPRESS_resource_Object_locks_lock_wait_seconds": 0, 606 "mssql_instance_SQLEXPRESS_resource_Page_locks_deadlocks": 0, 607 "mssql_instance_SQLEXPRESS_resource_Page_locks_lock_wait_seconds": 0, 608 "mssql_instance_SQLEXPRESS_resource_RID_locks_deadlocks": 0, 609 "mssql_instance_SQLEXPRESS_resource_RID_locks_lock_wait_seconds": 0, 610 "mssql_instance_SQLEXPRESS_resource_RowGroup_locks_deadlocks": 0, 611 "mssql_instance_SQLEXPRESS_resource_RowGroup_locks_lock_wait_seconds": 0, 612 "mssql_instance_SQLEXPRESS_resource_Xact_locks_deadlocks": 0, 613 "mssql_instance_SQLEXPRESS_resource_Xact_locks_lock_wait_seconds": 0, 614 "mssql_instance_SQLEXPRESS_sql_errors_total_db_offline_errors": 0, 615 "mssql_instance_SQLEXPRESS_sql_errors_total_info_errors": 766, 616 "mssql_instance_SQLEXPRESS_sql_errors_total_kill_connection_errors": 0, 617 "mssql_instance_SQLEXPRESS_sql_errors_total_user_errors": 29, 618 "mssql_instance_SQLEXPRESS_sqlstats_auto_parameterization_attempts": 37, 619 "mssql_instance_SQLEXPRESS_sqlstats_batch_requests": 2972, 620 "mssql_instance_SQLEXPRESS_sqlstats_safe_auto_parameterization_attempts": 2, 621 "mssql_instance_SQLEXPRESS_sqlstats_sql_compilations": 376, 622 "mssql_instance_SQLEXPRESS_sqlstats_sql_recompilations": 8, 623 "net_nic_Intel_R_PRO_1000_MT_Network_Connection_bytes_received": 38290755856, 624 "net_nic_Intel_R_PRO_1000_MT_Network_Connection_bytes_sent": 8211165504, 625 "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_outbound_discarded": 0, 626 "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_outbound_errors": 0, 627 "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_received_discarded": 0, 628 "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_received_errors": 0, 629 "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_received_total": 4120869, 630 "net_nic_Intel_R_PRO_1000_MT_Network_Connection_packets_sent_total": 1332466, 631 "netframework_WMSvc_clrexception_filters_total": 0, 632 "netframework_WMSvc_clrexception_finallys_total": 0, 633 "netframework_WMSvc_clrexception_throw_to_catch_depth_total": 0, 634 "netframework_WMSvc_clrexception_thrown_total": 0, 635 "netframework_WMSvc_clrinterop_com_callable_wrappers_total": 2, 636 "netframework_WMSvc_clrinterop_interop_marshalling_total": 0, 637 "netframework_WMSvc_clrinterop_interop_stubs_created_total": 29, 638 "netframework_WMSvc_clrjit_il_bytes_total": 4007, 639 "netframework_WMSvc_clrjit_methods_total": 27, 640 "netframework_WMSvc_clrjit_standard_failures_total": 0, 641 "netframework_WMSvc_clrjit_time_percent": 0, 642 "netframework_WMSvc_clrloading_appdomains_loaded_total": 1, 643 "netframework_WMSvc_clrloading_appdomains_unloaded_total": 0, 644 "netframework_WMSvc_clrloading_assemblies_loaded_total": 5, 645 "netframework_WMSvc_clrloading_class_load_failures_total": 0, 646 "netframework_WMSvc_clrloading_classes_loaded_total": 18, 647 "netframework_WMSvc_clrloading_loader_heap_size_bytes": 270336, 648 "netframework_WMSvc_clrlocksandthreads_contentions_total": 0, 649 "netframework_WMSvc_clrlocksandthreads_current_logical_threads": 2, 650 "netframework_WMSvc_clrlocksandthreads_physical_threads_current": 1, 651 "netframework_WMSvc_clrlocksandthreads_queue_length_total": 0, 652 "netframework_WMSvc_clrlocksandthreads_recognized_threads_total": 1, 653 "netframework_WMSvc_clrmemory_allocated_bytes_total": 227792, 654 "netframework_WMSvc_clrmemory_collections_total": 2, 655 "netframework_WMSvc_clrmemory_committed_bytes": 270336, 656 "netframework_WMSvc_clrmemory_finalization_survivors": 7, 657 "netframework_WMSvc_clrmemory_gc_time_percent": 0, 658 "netframework_WMSvc_clrmemory_heap_size_bytes": 4312696, 659 "netframework_WMSvc_clrmemory_induced_gc_total": 0, 660 "netframework_WMSvc_clrmemory_number_gc_handles": 24, 661 "netframework_WMSvc_clrmemory_number_pinned_objects": 1, 662 "netframework_WMSvc_clrmemory_number_sink_blocksinuse": 1, 663 "netframework_WMSvc_clrmemory_promoted_bytes": 49720, 664 "netframework_WMSvc_clrmemory_reserved_bytes": 402644992, 665 "netframework_WMSvc_clrremoting_channels_total": 0, 666 "netframework_WMSvc_clrremoting_context_bound_classes_loaded": 0, 667 "netframework_WMSvc_clrremoting_context_bound_objects_total": 0, 668 "netframework_WMSvc_clrremoting_context_proxies_total": 0, 669 "netframework_WMSvc_clrremoting_contexts": 1, 670 "netframework_WMSvc_clrremoting_remote_calls_total": 0, 671 "netframework_WMSvc_clrsecurity_checks_time_percent": 0, 672 "netframework_WMSvc_clrsecurity_link_time_checks_total": 0, 673 "netframework_WMSvc_clrsecurity_runtime_checks_total": 3, 674 "netframework_WMSvc_clrsecurity_stack_walk_depth": 1, 675 "netframework_powershell_clrexception_filters_total": 0, 676 "netframework_powershell_clrexception_finallys_total": 56, 677 "netframework_powershell_clrexception_throw_to_catch_depth_total": 140, 678 "netframework_powershell_clrexception_thrown_total": 37, 679 "netframework_powershell_clrinterop_com_callable_wrappers_total": 5, 680 "netframework_powershell_clrinterop_interop_marshalling_total": 0, 681 "netframework_powershell_clrinterop_interop_stubs_created_total": 345, 682 "netframework_powershell_clrjit_il_bytes_total": 47021, 683 "netframework_powershell_clrjit_methods_total": 344, 684 "netframework_powershell_clrjit_standard_failures_total": 0, 685 "netframework_powershell_clrjit_time_percent": 0, 686 "netframework_powershell_clrloading_appdomains_loaded_total": 1, 687 "netframework_powershell_clrloading_appdomains_unloaded_total": 0, 688 "netframework_powershell_clrloading_assemblies_loaded_total": 20, 689 "netframework_powershell_clrloading_class_load_failures_total": 1, 690 "netframework_powershell_clrloading_classes_loaded_total": 477, 691 "netframework_powershell_clrloading_loader_heap_size_bytes": 2285568, 692 "netframework_powershell_clrlocksandthreads_contentions_total": 10, 693 "netframework_powershell_clrlocksandthreads_current_logical_threads": 16, 694 "netframework_powershell_clrlocksandthreads_physical_threads_current": 13, 695 "netframework_powershell_clrlocksandthreads_queue_length_total": 3, 696 "netframework_powershell_clrlocksandthreads_recognized_threads_total": 6, 697 "netframework_powershell_clrmemory_allocated_bytes_total": 46333800, 698 "netframework_powershell_clrmemory_collections_total": 11, 699 "netframework_powershell_clrmemory_committed_bytes": 20475904, 700 "netframework_powershell_clrmemory_finalization_survivors": 244, 701 "netframework_powershell_clrmemory_gc_time_percent": 0, 702 "netframework_powershell_clrmemory_heap_size_bytes": 34711872, 703 "netframework_powershell_clrmemory_induced_gc_total": 0, 704 "netframework_powershell_clrmemory_number_gc_handles": 834, 705 "netframework_powershell_clrmemory_number_pinned_objects": 0, 706 "netframework_powershell_clrmemory_number_sink_blocksinuse": 42, 707 "netframework_powershell_clrmemory_promoted_bytes": 107352, 708 "netframework_powershell_clrmemory_reserved_bytes": 402644992, 709 "netframework_powershell_clrremoting_channels_total": 0, 710 "netframework_powershell_clrremoting_context_bound_classes_loaded": 0, 711 "netframework_powershell_clrremoting_context_bound_objects_total": 0, 712 "netframework_powershell_clrremoting_context_proxies_total": 0, 713 "netframework_powershell_clrremoting_contexts": 1, 714 "netframework_powershell_clrremoting_remote_calls_total": 0, 715 "netframework_powershell_clrsecurity_checks_time_percent": 0, 716 "netframework_powershell_clrsecurity_link_time_checks_total": 0, 717 "netframework_powershell_clrsecurity_runtime_checks_total": 4386, 718 "netframework_powershell_clrsecurity_stack_walk_depth": 1, 719 "os_paging_free_bytes": 1414107136, 720 "os_paging_limit_bytes": 1476395008, 721 "os_paging_used_bytes": 62287872, 722 "os_physical_memory_free_bytes": 1379946496, 723 "os_processes": 152, 724 "os_processes_limit": 4294967295, 725 "os_users": 2, 726 "os_visible_memory_bytes": 4256718848, 727 "os_visible_memory_used_bytes": 2876772352, 728 "process_msedge_cpu_time": 1919893, 729 "process_msedge_handles": 5779, 730 "process_msedge_io_bytes": 3978227378, 731 "process_msedge_io_operations": 16738642, 732 "process_msedge_page_faults": 5355941, 733 "process_msedge_page_file_bytes": 681603072, 734 "process_msedge_threads": 213, 735 "process_msedge_working_set_private_bytes": 461344768, 736 "service_dhcp_state_continue_pending": 0, 737 "service_dhcp_state_pause_pending": 0, 738 "service_dhcp_state_paused": 0, 739 "service_dhcp_state_running": 1, 740 "service_dhcp_state_start_pending": 0, 741 "service_dhcp_state_stop_pending": 0, 742 "service_dhcp_state_stopped": 0, 743 "service_dhcp_state_unknown": 0, 744 "service_dhcp_status_degraded": 0, 745 "service_dhcp_status_error": 0, 746 "service_dhcp_status_lost_comm": 0, 747 "service_dhcp_status_no_contact": 0, 748 "service_dhcp_status_nonrecover": 0, 749 "service_dhcp_status_ok": 1, 750 "service_dhcp_status_pred_fail": 0, 751 "service_dhcp_status_service": 0, 752 "service_dhcp_status_starting": 0, 753 "service_dhcp_status_stopping": 0, 754 "service_dhcp_status_stressed": 0, 755 "service_dhcp_status_unknown": 0, 756 "system_threads": 1559, 757 "system_up_time": 16208210, 758 "tcp_ipv4_conns_active": 4301, 759 "tcp_ipv4_conns_established": 7, 760 "tcp_ipv4_conns_failures": 137, 761 "tcp_ipv4_conns_passive": 501, 762 "tcp_ipv4_conns_resets": 1282, 763 "tcp_ipv4_segments_received": 676388, 764 "tcp_ipv4_segments_retransmitted": 2120, 765 "tcp_ipv4_segments_sent": 871379, 766 "tcp_ipv6_conns_active": 214, 767 "tcp_ipv6_conns_established": 0, 768 "tcp_ipv6_conns_failures": 214, 769 "tcp_ipv6_conns_passive": 0, 770 "tcp_ipv6_conns_resets": 0, 771 "tcp_ipv6_segments_received": 1284, 772 "tcp_ipv6_segments_retransmitted": 428, 773 "tcp_ipv6_segments_sent": 856, 774 }, 775 }, 776 "fails if endpoint returns invalid data": { 777 prepare: prepareWindowsReturnsInvalidData, 778 }, 779 "fails on connection refused": { 780 prepare: prepareWindowsConnectionRefused, 781 }, 782 "fails on 404 response": { 783 prepare: prepareWindowsResponse404, 784 }, 785 } 786 787 for name, test := range tests { 788 t.Run(name, func(t *testing.T) { 789 win, cleanup := test.prepare() 790 defer cleanup() 791 792 require.True(t, win.Init()) 793 794 mx := win.Collect() 795 796 if mx != nil && test.wantCollected != nil { 797 mx["system_up_time"] = test.wantCollected["system_up_time"] 798 } 799 800 assert.Equal(t, test.wantCollected, mx) 801 if len(test.wantCollected) > 0 { 802 testCharts(t, win, mx) 803 } 804 }) 805 } 806 } 807 808 func testCharts(t *testing.T, win *Windows, mx map[string]int64) { 809 ensureChartsDimsCreated(t, win) 810 ensureCollectedHasAllChartsDimsVarsIDs(t, win, mx) 811 } 812 813 func ensureChartsDimsCreated(t *testing.T, w *Windows) { 814 for _, chart := range cpuCharts { 815 if w.cache.collection[collectorCPU] { 816 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 817 } else { 818 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 819 } 820 } 821 for _, chart := range memCharts { 822 if w.cache.collection[collectorMemory] { 823 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 824 } else { 825 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 826 } 827 } 828 for _, chart := range tcpCharts { 829 if w.cache.collection[collectorTCP] { 830 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 831 } else { 832 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 833 } 834 } 835 for _, chart := range osCharts { 836 if w.cache.collection[collectorOS] { 837 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 838 } else { 839 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 840 } 841 } 842 for _, chart := range systemCharts { 843 if w.cache.collection[collectorSystem] { 844 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 845 } else { 846 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 847 } 848 } 849 for _, chart := range logonCharts { 850 if w.cache.collection[collectorLogon] { 851 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 852 } else { 853 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 854 } 855 } 856 for _, chart := range processesCharts { 857 if w.cache.collection[collectorProcess] { 858 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 859 } else { 860 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 861 } 862 } 863 for _, chart := range netFrameworkCLRExceptionsChartsTmpl { 864 if w.cache.collection[collectorNetFrameworkCLRExceptions] { 865 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 866 } else { 867 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 868 } 869 } 870 for _, chart := range netFrameworkCLRInteropChartsTmpl { 871 if w.cache.collection[collectorNetFrameworkCLRInterop] { 872 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 873 } else { 874 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 875 } 876 } 877 for _, chart := range netFrameworkCLRJITChartsTmpl { 878 if w.cache.collection[collectorNetFrameworkCLRJIT] { 879 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 880 } else { 881 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 882 } 883 } 884 for _, chart := range netFrameworkCLRLoadingChartsTmpl { 885 if w.cache.collection[collectorNetFrameworkCLRLoading] { 886 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 887 } else { 888 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 889 } 890 } 891 for _, chart := range netFrameworkCLRLocksAndThreadsChartsTmpl { 892 if w.cache.collection[collectorNetFrameworkCLRLocksAndThreads] { 893 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 894 } else { 895 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 896 } 897 } 898 for _, chart := range netFrameworkCLRMemoryChartsTmpl { 899 if w.cache.collection[collectorNetFrameworkCLRMemory] { 900 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 901 } else { 902 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 903 } 904 } 905 for _, chart := range netFrameworkCLRRemotingChartsTmpl { 906 if w.cache.collection[collectorNetFrameworkCLRRemoting] { 907 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 908 } else { 909 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 910 } 911 } 912 for _, chart := range netFrameworkCLRSecurityChartsTmpl { 913 if w.cache.collection[collectorNetFrameworkCLRSecurity] { 914 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 915 } else { 916 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 917 } 918 } 919 920 for core := range w.cache.cores { 921 for _, chart := range cpuCoreChartsTmpl { 922 id := fmt.Sprintf(chart.ID, core) 923 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' core", id, core) 924 } 925 } 926 for disk := range w.cache.volumes { 927 for _, chart := range diskChartsTmpl { 928 id := fmt.Sprintf(chart.ID, disk) 929 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' disk", id, disk) 930 } 931 } 932 for nic := range w.cache.nics { 933 for _, chart := range nicChartsTmpl { 934 id := fmt.Sprintf(chart.ID, nic) 935 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' nic", id, nic) 936 } 937 } 938 for zone := range w.cache.thermalZones { 939 for _, chart := range thermalzoneChartsTmpl { 940 id := fmt.Sprintf(chart.ID, zone) 941 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' thermalzone", id, zone) 942 } 943 } 944 for svc := range w.cache.services { 945 for _, chart := range serviceChartsTmpl { 946 id := fmt.Sprintf(chart.ID, svc) 947 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' service", id, svc) 948 } 949 } 950 for website := range w.cache.iis { 951 for _, chart := range iisWebsiteChartsTmpl { 952 id := fmt.Sprintf(chart.ID, website) 953 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' website", id, website) 954 } 955 } 956 for instance := range w.cache.mssqlInstances { 957 for _, chart := range mssqlInstanceChartsTmpl { 958 id := fmt.Sprintf(chart.ID, instance) 959 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' instance", id, instance) 960 } 961 } 962 for instanceDB := range w.cache.mssqlDBs { 963 s := strings.Split(instanceDB, ":") 964 if assert.Lenf(t, s, 2, "can not extract intance/database from cache.mssqlDBs") { 965 instance, db := s[0], s[1] 966 for _, chart := range mssqlDatabaseChartsTmpl { 967 id := fmt.Sprintf(chart.ID, db, instance) 968 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' instance", id, instance) 969 } 970 } 971 } 972 for _, chart := range adCharts { 973 if w.cache.collection[collectorAD] { 974 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 975 } else { 976 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 977 } 978 } 979 for template := range w.cache.adcs { 980 for _, chart := range adcsCertTemplateChartsTmpl { 981 id := fmt.Sprintf(chart.ID, template) 982 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' template certificate", id, template) 983 } 984 } 985 for name := range w.cache.collectors { 986 for _, chart := range collectorChartsTmpl { 987 id := fmt.Sprintf(chart.ID, name) 988 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' collector", id, name) 989 } 990 } 991 992 for _, chart := range processesCharts { 993 if chart = w.Charts().Get(chart.ID); chart == nil { 994 continue 995 } 996 for proc := range w.cache.processes { 997 var found bool 998 for _, dim := range chart.Dims { 999 if found = strings.HasPrefix(dim.ID, "process_"+proc); found { 1000 break 1001 } 1002 } 1003 assert.Truef(t, found, "chart '%s' has not dim for '%s' process", chart.ID, proc) 1004 } 1005 } 1006 1007 for _, chart := range hypervChartsTmpl { 1008 if w.cache.collection[collectorHyperv] { 1009 assert.Truef(t, w.Charts().Has(chart.ID), "chart '%s' not created", chart.ID) 1010 } else { 1011 assert.Falsef(t, w.Charts().Has(chart.ID), "chart '%s' created", chart.ID) 1012 } 1013 } 1014 for vm := range w.cache.hypervVMMem { 1015 for _, chart := range hypervVMChartsTemplate { 1016 id := fmt.Sprintf(chart.ID, hypervCleanName(vm)) 1017 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' virtual machine", id, vm) 1018 } 1019 } 1020 for device := range w.cache.hypervVMDevices { 1021 for _, chart := range hypervVMDeviceChartsTemplate { 1022 id := fmt.Sprintf(chart.ID, hypervCleanName(device)) 1023 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' vm storage device", id, device) 1024 } 1025 } 1026 for iface := range w.cache.hypervVMInterfaces { 1027 for _, chart := range hypervVMInterfaceChartsTemplate { 1028 id := fmt.Sprintf(chart.ID, hypervCleanName(iface)) 1029 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' vm network interface", id, iface) 1030 } 1031 } 1032 for vswitch := range w.cache.hypervVswitch { 1033 for _, chart := range hypervVswitchChartsTemplate { 1034 id := fmt.Sprintf(chart.ID, hypervCleanName(vswitch)) 1035 assert.Truef(t, w.Charts().Has(id), "charts has no '%s' chart for '%s' virtual switch", id, vswitch) 1036 } 1037 } 1038 } 1039 1040 func ensureCollectedHasAllChartsDimsVarsIDs(t *testing.T, w *Windows, mx map[string]int64) { 1041 for _, chart := range *w.Charts() { 1042 for _, dim := range chart.Dims { 1043 _, ok := mx[dim.ID] 1044 assert.Truef(t, ok, "collected metrics has no data for dim '%s' chart '%s'", dim.ID, chart.ID) 1045 } 1046 for _, v := range chart.Vars { 1047 _, ok := mx[v.ID] 1048 assert.Truef(t, ok, "collected metrics has no data for var '%s' chart '%s'", v.ID, chart.ID) 1049 } 1050 } 1051 } 1052 1053 func prepareWindowsV0200() (win *Windows, cleanup func()) { 1054 ts := httptest.NewServer(http.HandlerFunc( 1055 func(w http.ResponseWriter, r *http.Request) { 1056 _, _ = w.Write(v0200Metrics) 1057 })) 1058 1059 win = New() 1060 win.URL = ts.URL 1061 return win, ts.Close 1062 } 1063 1064 func prepareWindowsReturnsInvalidData() (win *Windows, cleanup func()) { 1065 ts := httptest.NewServer(http.HandlerFunc( 1066 func(w http.ResponseWriter, r *http.Request) { 1067 _, _ = w.Write([]byte("hello and\n goodbye")) 1068 })) 1069 1070 win = New() 1071 win.URL = ts.URL 1072 return win, ts.Close 1073 } 1074 1075 func prepareWindowsConnectionRefused() (win *Windows, cleanup func()) { 1076 win = New() 1077 win.URL = "http://127.0.0.1:38001" 1078 return win, func() {} 1079 } 1080 1081 func prepareWindowsResponse404() (win *Windows, cleanup func()) { 1082 ts := httptest.NewServer(http.HandlerFunc( 1083 func(w http.ResponseWriter, r *http.Request) { 1084 w.WriteHeader(http.StatusNotFound) 1085 })) 1086 1087 win = New() 1088 win.URL = ts.URL 1089 return win, ts.Close 1090 }