netdata/netdata

View on GitHub
src/go/collectors/go.d.plugin/modules/windows/collect_iis.go

Summary

Maintainability
C
1 day
Test Coverage
// SPDX-License-Identifier: GPL-3.0-or-later

package windows

import (
    "strings"

    "github.com/netdata/netdata/go/go.d.plugin/pkg/prometheus"
)

const (
    metricIISCurrentAnonymousUsers    = "windows_iis_current_anonymous_users"
    metricIISCurrentNonAnonymousUsers = "windows_iis_current_non_anonymous_users"
    metricIISCurrentConnections       = "windows_iis_current_connections"
    metricIICurrentISAPIExtRequests   = "windows_iis_current_isapi_extension_requests"
    metricIISUptime                   = "windows_iis_service_uptime"

    metricIISReceivedBytesTotal            = "windows_iis_received_bytes_total"
    metricIISSentBytesTotal                = "windows_iis_sent_bytes_total"
    metricIISRequestsTotal                 = "windows_iis_requests_total"
    metricIISIPAPIExtRequestsTotal         = "windows_iis_ipapi_extension_requests_total"
    metricIISConnAttemptsAllInstancesTotal = "windows_iis_connection_attempts_all_instances_total"
    metricIISFilesReceivedTotal            = "windows_iis_files_received_total"
    metricIISFilesSentTotal                = "windows_iis_files_sent_total"
    metricIISLogonAttemptsTotal            = "windows_iis_logon_attempts_total"
    metricIISLockedErrorsTotal             = "windows_iis_locked_errors_total"
    metricIISNotFoundErrorsTotal           = "windows_iis_not_found_errors_total"
)

func (w *Windows) collectIIS(mx map[string]int64, pms prometheus.Series) {
    seen := make(map[string]bool)
    px := "iis_website_"
    for _, pm := range pms.FindByName(metricIISCurrentAnonymousUsers) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_current_anonymous_users"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISCurrentNonAnonymousUsers) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_current_non_anonymous_users"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISCurrentConnections) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_current_connections"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIICurrentISAPIExtRequests) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_current_isapi_extension_requests"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISUptime) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_service_uptime"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISReceivedBytesTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_received_bytes_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISSentBytesTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_sent_bytes_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISRequestsTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_requests_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISConnAttemptsAllInstancesTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_connection_attempts_all_instances_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISFilesReceivedTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_files_received_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISFilesSentTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_files_sent_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISIPAPIExtRequestsTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_isapi_extension_requests_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISLogonAttemptsTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_logon_attempts_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISLockedErrorsTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_locked_errors_total"] += int64(pm.Value)
        }
    }
    for _, pm := range pms.FindByName(metricIISNotFoundErrorsTotal) {
        if name := cleanWebsiteName(pm.Labels.Get("site")); name != "" {
            seen[name] = true
            mx[px+name+"_not_found_errors_total"] += int64(pm.Value)
        }
    }

    for site := range seen {
        if !w.cache.iis[site] {
            w.cache.iis[site] = true
            w.addIISWebsiteCharts(site)
        }
    }
    for site := range w.cache.iis {
        if !seen[site] {
            delete(w.cache.iis, site)
            w.removeIIWebsiteSCharts(site)
        }
    }
}

func cleanWebsiteName(name string) string {
    return strings.ReplaceAll(name, " ", "_")
}