github.com/netdata/go.d.plugin@v0.58.1/modules/windows/collect_ad.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package windows
     4  
     5  import "github.com/netdata/go.d.plugin/pkg/prometheus"
     6  
     7  // Windows exporter:
     8  // https://github.com/prometheus-community/windows_exporter/blob/master/docs/collector.ad.md
     9  // Microsoft:
    10  // https://learn.microsoft.com/en-us/previous-versions/ms803980(v=msdn.10)
    11  const (
    12  	metricADATQAverageRequestLatency                  = "windows_ad_atq_average_request_latency"
    13  	metricADATQOutstandingRequests                    = "windows_ad_atq_outstanding_requests"
    14  	metricADDatabaseOperationsTotal                   = "windows_ad_database_operations_total"
    15  	metricADDirectoryOperationsTotal                  = "windows_ad_directory_operations_total"
    16  	metricADReplicationInboundObjectsFilteringTotal   = "windows_ad_replication_inbound_objects_filtered_total"
    17  	metricADReplicationInboundPropertiesFilteredTotal = "windows_ad_replication_inbound_properties_filtered_total"
    18  	metricADReplicationInboundPropertiesUpdatedTotal  = "windows_ad_replication_inbound_properties_updated_total"
    19  	metricADReplicationInboundSyncObjectsRemaining    = "windows_ad_replication_inbound_sync_objects_remaining"
    20  	metricADReplicationDataInterSiteBytesTotal        = "windows_ad_replication_data_intersite_bytes_total"
    21  	metricADReplicationDataIntraSiteBytesTotal        = "windows_ad_replication_data_intrasite_bytes_total"
    22  	metricADReplicationPendingSyncs                   = "windows_ad_replication_pending_synchronizations"
    23  	metricADReplicationSyncRequestsTotal              = "windows_ad_replication_sync_requests_total"
    24  	metricADDirectoryServiceThreads                   = "windows_ad_directory_service_threads"
    25  	metricADLDAPLastBindTimeSecondsTotal              = "windows_ad_ldap_last_bind_time_seconds"
    26  	metricADBindsTotal                                = "windows_ad_binds_total"
    27  	metricADLDAPSearchesTotal                         = "windows_ad_ldap_searches_total"
    28  	metricADNameCacheLookupsTotal                     = "windows_ad_name_cache_lookups_total"
    29  	metricADNameCacheHitsTotal                        = "windows_ad_name_cache_hits_total"
    30  )
    31  
    32  func (w *Windows) collectAD(mx map[string]int64, pms prometheus.Series) {
    33  	if !w.cache.collection[collectorAD] {
    34  		w.cache.collection[collectorAD] = true
    35  		w.addADCharts()
    36  	}
    37  
    38  	if pm := pms.FindByName(metricADATQAverageRequestLatency); pm.Len() > 0 {
    39  		mx["ad_atq_average_request_latency"] = int64(pm.Max() * precision)
    40  	}
    41  	if pm := pms.FindByName(metricADATQOutstandingRequests); pm.Len() > 0 {
    42  		mx["ad_atq_outstanding_requests"] = int64(pm.Max())
    43  	}
    44  	for _, pm := range pms.FindByName(metricADDatabaseOperationsTotal) {
    45  		if op := pm.Labels.Get("operation"); op != "" {
    46  			mx["ad_database_operations_total_"+op] = int64(pm.Value)
    47  		}
    48  	}
    49  	for _, pm := range pms.FindByName(metricADDirectoryOperationsTotal) {
    50  		if op := pm.Labels.Get("operation"); op != "" {
    51  			mx["ad_directory_operations_total_"+op] += int64(pm.Value) // sum "origin"
    52  		}
    53  	}
    54  	if pm := pms.FindByName(metricADReplicationInboundObjectsFilteringTotal); pm.Len() > 0 {
    55  		mx["ad_replication_inbound_objects_filtered_total"] = int64(pm.Max())
    56  	}
    57  	if pm := pms.FindByName(metricADReplicationInboundPropertiesFilteredTotal); pm.Len() > 0 {
    58  		mx["ad_replication_inbound_properties_filtered_total"] = int64(pm.Max())
    59  	}
    60  	if pm := pms.FindByName(metricADReplicationInboundPropertiesUpdatedTotal); pm.Len() > 0 {
    61  		mx["ad_replication_inbound_properties_updated_total"] = int64(pm.Max())
    62  	}
    63  	if pm := pms.FindByName(metricADReplicationInboundSyncObjectsRemaining); pm.Len() > 0 {
    64  		mx["ad_replication_inbound_sync_objects_remaining"] = int64(pm.Max())
    65  	}
    66  	for _, pm := range pms.FindByName(metricADReplicationDataInterSiteBytesTotal) {
    67  		if name := pm.Labels.Get("direction"); name != "" {
    68  			mx["ad_replication_data_intersite_bytes_total_"+name] = int64(pm.Value)
    69  		}
    70  	}
    71  	for _, pm := range pms.FindByName(metricADReplicationDataIntraSiteBytesTotal) {
    72  		if name := pm.Labels.Get("direction"); name != "" {
    73  			mx["ad_replication_data_intrasite_bytes_total_"+name] = int64(pm.Value)
    74  		}
    75  	}
    76  	if pm := pms.FindByName(metricADReplicationPendingSyncs); pm.Len() > 0 {
    77  		mx["ad_replication_pending_synchronizations"] = int64(pm.Max())
    78  	}
    79  	if pm := pms.FindByName(metricADReplicationSyncRequestsTotal); pm.Len() > 0 {
    80  		mx["ad_replication_sync_requests_total"] = int64(pm.Max())
    81  	}
    82  	if pm := pms.FindByName(metricADDirectoryServiceThreads); pm.Len() > 0 {
    83  		mx["ad_directory_service_threads"] = int64(pm.Max())
    84  	}
    85  	if pm := pms.FindByName(metricADLDAPLastBindTimeSecondsTotal); pm.Len() > 0 {
    86  		mx["ad_ldap_last_bind_time_seconds"] = int64(pm.Max())
    87  	}
    88  	for _, pm := range pms.FindByName(metricADBindsTotal) {
    89  		mx["ad_binds_total"] += int64(pm.Value) // sum "bind_method"'s
    90  	}
    91  	if pm := pms.FindByName(metricADLDAPSearchesTotal); pm.Len() > 0 {
    92  		mx["ad_ldap_searches_total"] = int64(pm.Max())
    93  	}
    94  	if pm := pms.FindByName(metricADNameCacheLookupsTotal); pm.Len() > 0 {
    95  		mx["ad_name_cache_lookups_total"] = int64(pm.Max())
    96  	}
    97  	if pm := pms.FindByName(metricADNameCacheHitsTotal); pm.Len() > 0 {
    98  		mx["ad_name_cache_hits_total"] = int64(pm.Max())
    99  	}
   100  }