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  }