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

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package windows
     4  
     5  import (
     6  	"strings"
     7  
     8  	"github.com/netdata/go.d.plugin/pkg/prometheus"
     9  )
    10  
    11  const (
    12  	metricIISCurrentAnonymousUsers    = "windows_iis_current_anonymous_users"
    13  	metricIISCurrentNonAnonymousUsers = "windows_iis_current_non_anonymous_users"
    14  	metricIISCurrentConnections       = "windows_iis_current_connections"
    15  	metricIICurrentISAPIExtRequests   = "windows_iis_current_isapi_extension_requests"
    16  	metricIISUptime                   = "windows_iis_service_uptime"
    17  
    18  	metricIISReceivedBytesTotal            = "windows_iis_received_bytes_total"
    19  	metricIISSentBytesTotal                = "windows_iis_sent_bytes_total"
    20  	metricIISRequestsTotal                 = "windows_iis_requests_total"
    21  	metricIISIPAPIExtRequestsTotal         = "windows_iis_ipapi_extension_requests_total"
    22  	metricIISConnAttemptsAllInstancesTotal = "windows_iis_connection_attempts_all_instances_total"
    23  	metricIISFilesReceivedTotal            = "windows_iis_files_received_total"
    24  	metricIISFilesSentTotal                = "windows_iis_files_sent_total"
    25  	metricIISLogonAttemptsTotal            = "windows_iis_logon_attempts_total"
    26  	metricIISLockedErrorsTotal             = "windows_iis_locked_errors_total"
    27  	metricIISNotFoundErrorsTotal           = "windows_iis_not_found_errors_total"
    28  )
    29  
    30  func (w *Windows) collectIIS(mx map[string]int64, pms prometheus.Series) {
    31  	seen := make(map[string]bool)
    32  	px := "iis_website_"
    33  	for _, pm := range pms.FindByName(metricIISCurrentAnonymousUsers) {
    34  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    35  			seen[name] = true
    36  			mx[px+name+"_current_anonymous_users"] += int64(pm.Value)
    37  		}
    38  	}
    39  	for _, pm := range pms.FindByName(metricIISCurrentNonAnonymousUsers) {
    40  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    41  			seen[name] = true
    42  			mx[px+name+"_current_non_anonymous_users"] += int64(pm.Value)
    43  		}
    44  	}
    45  	for _, pm := range pms.FindByName(metricIISCurrentConnections) {
    46  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    47  			seen[name] = true
    48  			mx[px+name+"_current_connections"] += int64(pm.Value)
    49  		}
    50  	}
    51  	for _, pm := range pms.FindByName(metricIICurrentISAPIExtRequests) {
    52  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    53  			seen[name] = true
    54  			mx[px+name+"_current_isapi_extension_requests"] += int64(pm.Value)
    55  		}
    56  	}
    57  	for _, pm := range pms.FindByName(metricIISUptime) {
    58  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    59  			seen[name] = true
    60  			mx[px+name+"_service_uptime"] += int64(pm.Value)
    61  		}
    62  	}
    63  	for _, pm := range pms.FindByName(metricIISReceivedBytesTotal) {
    64  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    65  			seen[name] = true
    66  			mx[px+name+"_received_bytes_total"] += int64(pm.Value)
    67  		}
    68  	}
    69  	for _, pm := range pms.FindByName(metricIISSentBytesTotal) {
    70  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    71  			seen[name] = true
    72  			mx[px+name+"_sent_bytes_total"] += int64(pm.Value)
    73  		}
    74  	}
    75  	for _, pm := range pms.FindByName(metricIISRequestsTotal) {
    76  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    77  			seen[name] = true
    78  			mx[px+name+"_requests_total"] += int64(pm.Value)
    79  		}
    80  	}
    81  	for _, pm := range pms.FindByName(metricIISConnAttemptsAllInstancesTotal) {
    82  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    83  			seen[name] = true
    84  			mx[px+name+"_connection_attempts_all_instances_total"] += int64(pm.Value)
    85  		}
    86  	}
    87  	for _, pm := range pms.FindByName(metricIISFilesReceivedTotal) {
    88  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    89  			seen[name] = true
    90  			mx[px+name+"_files_received_total"] += int64(pm.Value)
    91  		}
    92  	}
    93  	for _, pm := range pms.FindByName(metricIISFilesSentTotal) {
    94  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
    95  			seen[name] = true
    96  			mx[px+name+"_files_sent_total"] += int64(pm.Value)
    97  		}
    98  	}
    99  	for _, pm := range pms.FindByName(metricIISIPAPIExtRequestsTotal) {
   100  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
   101  			seen[name] = true
   102  			mx[px+name+"_isapi_extension_requests_total"] += int64(pm.Value)
   103  		}
   104  	}
   105  	for _, pm := range pms.FindByName(metricIISLogonAttemptsTotal) {
   106  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
   107  			seen[name] = true
   108  			mx[px+name+"_logon_attempts_total"] += int64(pm.Value)
   109  		}
   110  	}
   111  	for _, pm := range pms.FindByName(metricIISLockedErrorsTotal) {
   112  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
   113  			seen[name] = true
   114  			mx[px+name+"_locked_errors_total"] += int64(pm.Value)
   115  		}
   116  	}
   117  	for _, pm := range pms.FindByName(metricIISNotFoundErrorsTotal) {
   118  		if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
   119  			seen[name] = true
   120  			mx[px+name+"_not_found_errors_total"] += int64(pm.Value)
   121  		}
   122  	}
   123  
   124  	for site := range seen {
   125  		if !w.cache.iis[site] {
   126  			w.cache.iis[site] = true
   127  			w.addIISWebsiteCharts(site)
   128  		}
   129  	}
   130  	for site := range w.cache.iis {
   131  		if !seen[site] {
   132  			delete(w.cache.iis, site)
   133  			w.removeIIWebsiteSCharts(site)
   134  		}
   135  	}
   136  }
   137  
   138  func cleanWebsiteName(name string) string {
   139  	return strings.ReplaceAll(name, " ", "_")
   140  }