process: Use registry collector for V1 data (#1814)

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
Jan-Otto Kröpke
2024-12-21 22:58:47 +01:00
committed by GitHub
parent 39c929eefe
commit a9f8b3b722
158 changed files with 7793 additions and 7748 deletions

View File

@@ -19,14 +19,12 @@ import (
"errors"
"fmt"
"log/slog"
"maps"
"regexp"
"slices"
"strings"
"github.com/alecthomas/kingpin/v2"
"github.com/prometheus-community/windows_exporter/internal/mi"
"github.com/prometheus-community/windows_exporter/internal/perfdata"
"github.com/prometheus-community/windows_exporter/internal/types"
"github.com/prometheus/client_golang/prometheus"
"golang.org/x/sys/windows/registry"
@@ -270,26 +268,36 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) error {
return errors.Join(errs...)
}
type collectorName interface {
GetName() string
}
// deduplicateIISNames deduplicate IIS site names from various IIS perflib objects.
//
// E.G. Given the following list of site names, "Site_B" would be
// discarded, and "Site_B#2" would be kept and presented as "Site_B" in the
// Collector metrics.
// [ "Site_A", "Site_B", "Site_C", "Site_B#2" ].
func deduplicateIISNames(counterValues map[string]map[string]perfdata.CounterValue) {
services := slices.Collect(maps.Keys(counterValues))
func deduplicateIISNames[T collectorName](counterValues []T) {
indexes := make(map[string]int)
// Ensure IIS entry with the highest suffix occurs last
slices.Sort(services)
slices.SortFunc(counterValues, func(a, b T) int {
return strings.Compare(a.GetName(), b.GetName())
})
// Use map to deduplicate IIS entries
for _, entry := range services {
name := strings.Split(entry, "#")[0]
if name == entry {
for index, counterValue := range counterValues {
name := strings.Split(counterValue.GetName(), "#")[0]
if name == counterValue.GetName() {
continue
}
counterValues[name] = counterValues[entry]
delete(counterValues, entry)
if originalIndex, ok := indexes[name]; !ok {
counterValues[originalIndex] = counterValue
counterValues = slices.Delete(counterValues, index, 1)
} else {
indexes[name] = index
}
}
}

View File

@@ -18,13 +18,14 @@ package iis
import (
"fmt"
"github.com/prometheus-community/windows_exporter/internal/perfdata"
"github.com/prometheus-community/windows_exporter/internal/pdh"
"github.com/prometheus-community/windows_exporter/internal/types"
"github.com/prometheus/client_golang/prometheus"
)
type collectorAppPoolWAS struct {
perfDataCollectorAppPoolWAS *perfdata.Collector
perfDataCollectorAppPoolWAS *pdh.Collector
perfDataObjectAppPoolWAS []perfDataCounterValuesAppPoolWAS
currentApplicationPoolState *prometheus.Desc
currentApplicationPoolUptime *prometheus.Desc
@@ -40,22 +41,27 @@ type collectorAppPoolWAS struct {
totalWorkerProcessShutdownFailures *prometheus.Desc
totalWorkerProcessStartupFailures *prometheus.Desc
}
type perfDataCounterValuesAppPoolWAS struct {
Name string
const (
CurrentApplicationPoolState = "Current Application Pool State"
CurrentApplicationPoolUptime = "Current Application Pool Uptime"
CurrentWorkerProcesses = "Current Worker Processes"
MaximumWorkerProcesses = "Maximum Worker Processes"
RecentWorkerProcessFailures = "Recent Worker Process Failures"
TimeSinceLastWorkerProcessFailure = "Time Since Last Worker Process Failure"
TotalApplicationPoolRecycles = "Total Application Pool Recycles"
TotalApplicationPoolUptime = "Total Application Pool Uptime"
TotalWorkerProcessesCreated = "Total Worker Processes Created"
TotalWorkerProcessFailures = "Total Worker Process Failures"
TotalWorkerProcessPingFailures = "Total Worker Process Ping Failures"
TotalWorkerProcessShutdownFailures = "Total Worker Process Shutdown Failures"
TotalWorkerProcessStartupFailures = "Total Worker Process Startup Failures"
)
CurrentApplicationPoolState float64 `perfdata:"Current Application Pool State"`
CurrentApplicationPoolUptime float64 `perfdata:"Current Application Pool Uptime"`
CurrentWorkerProcesses float64 `perfdata:"Current Worker Processes"`
MaximumWorkerProcesses float64 `perfdata:"Maximum Worker Processes"`
RecentWorkerProcessFailures float64 `perfdata:"Recent Worker Process Failures"`
TimeSinceLastWorkerProcessFailure float64 `perfdata:"Time Since Last Worker Process Failure"`
TotalApplicationPoolRecycles float64 `perfdata:"Total Application Pool Recycles"`
TotalApplicationPoolUptime float64 `perfdata:"Total Application Pool Uptime"`
TotalWorkerProcessesCreated float64 `perfdata:"Total Worker Processes Created"`
TotalWorkerProcessFailures float64 `perfdata:"Total Worker Process Failures"`
TotalWorkerProcessPingFailures float64 `perfdata:"Total Worker Process Ping Failures"`
TotalWorkerProcessShutdownFailures float64 `perfdata:"Total Worker Process Shutdown Failures"`
TotalWorkerProcessStartupFailures float64 `perfdata:"Total Worker Process Startup Failures"`
}
func (p perfDataCounterValuesAppPoolWAS) GetName() string {
return p.Name
}
//nolint:gochecknoglobals
var applicationStates = map[uint32]string{
@@ -71,21 +77,7 @@ var applicationStates = map[uint32]string{
func (c *Collector) buildAppPoolWAS() error {
var err error
c.perfDataCollectorAppPoolWAS, err = perfdata.NewCollector("APP_POOL_WAS", perfdata.InstancesAll, []string{
CurrentApplicationPoolState,
CurrentApplicationPoolUptime,
CurrentWorkerProcesses,
MaximumWorkerProcesses,
RecentWorkerProcessFailures,
TimeSinceLastWorkerProcessFailure,
TotalApplicationPoolRecycles,
TotalApplicationPoolUptime,
TotalWorkerProcessesCreated,
TotalWorkerProcessFailures,
TotalWorkerProcessPingFailures,
TotalWorkerProcessShutdownFailures,
TotalWorkerProcessStartupFailures,
})
c.perfDataCollectorAppPoolWAS, err = pdh.NewCollector[perfDataCounterValuesAppPoolWAS]("APP_POOL_WAS", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create APP_POOL_WAS collector: %w", err)
}
@@ -174,21 +166,21 @@ func (c *Collector) buildAppPoolWAS() error {
}
func (c *Collector) collectAppPoolWAS(ch chan<- prometheus.Metric) error {
perfData, err := c.perfDataCollectorAppPoolWAS.Collect()
err := c.perfDataCollectorAppPoolWAS.Collect(&c.perfDataObjectAppPoolWAS)
if err != nil {
return fmt.Errorf("failed to collect APP_POOL_WAS metrics: %w", err)
}
deduplicateIISNames(perfData)
deduplicateIISNames(c.perfDataObjectAppPoolWAS)
for name, app := range perfData {
if c.config.AppExclude.MatchString(name) || !c.config.AppInclude.MatchString(name) {
for _, data := range c.perfDataObjectAppPoolWAS {
if c.config.AppExclude.MatchString(data.Name) || !c.config.AppInclude.MatchString(data.Name) {
continue
}
for key, label := range applicationStates {
isCurrentState := 0.0
if key == uint32(app[CurrentApplicationPoolState].FirstValue) {
if key == uint32(data.CurrentApplicationPoolState) {
isCurrentState = 1.0
}
@@ -196,7 +188,7 @@ func (c *Collector) collectAppPoolWAS(ch chan<- prometheus.Metric) error {
c.currentApplicationPoolState,
prometheus.GaugeValue,
isCurrentState,
name,
data.Name,
label,
)
}
@@ -204,74 +196,74 @@ func (c *Collector) collectAppPoolWAS(ch chan<- prometheus.Metric) error {
ch <- prometheus.MustNewConstMetric(
c.currentApplicationPoolUptime,
prometheus.GaugeValue,
app[CurrentApplicationPoolUptime].FirstValue,
name,
data.CurrentApplicationPoolUptime,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.currentWorkerProcesses,
prometheus.GaugeValue,
app[CurrentWorkerProcesses].FirstValue,
name,
data.CurrentWorkerProcesses,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.maximumWorkerProcesses,
prometheus.GaugeValue,
app[MaximumWorkerProcesses].FirstValue,
name,
data.MaximumWorkerProcesses,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.recentWorkerProcessFailures,
prometheus.GaugeValue,
app[RecentWorkerProcessFailures].FirstValue,
name,
data.RecentWorkerProcessFailures,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.timeSinceLastWorkerProcessFailure,
prometheus.GaugeValue,
app[TimeSinceLastWorkerProcessFailure].FirstValue,
name,
data.TimeSinceLastWorkerProcessFailure,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.totalApplicationPoolRecycles,
prometheus.CounterValue,
app[TotalApplicationPoolRecycles].FirstValue,
name,
data.TotalApplicationPoolRecycles,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.totalApplicationPoolUptime,
prometheus.CounterValue,
app[TotalApplicationPoolUptime].FirstValue,
name,
data.TotalApplicationPoolUptime,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.totalWorkerProcessesCreated,
prometheus.CounterValue,
app[TotalWorkerProcessesCreated].FirstValue,
name,
data.TotalWorkerProcessesCreated,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.totalWorkerProcessFailures,
prometheus.CounterValue,
app[TotalWorkerProcessFailures].FirstValue,
name,
data.TotalWorkerProcessFailures,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.totalWorkerProcessPingFailures,
prometheus.CounterValue,
app[TotalWorkerProcessPingFailures].FirstValue,
name,
data.TotalWorkerProcessPingFailures,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.totalWorkerProcessShutdownFailures,
prometheus.CounterValue,
app[TotalWorkerProcessShutdownFailures].FirstValue,
name,
data.TotalWorkerProcessShutdownFailures,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.totalWorkerProcessStartupFailures,
prometheus.CounterValue,
app[TotalWorkerProcessStartupFailures].FirstValue,
name,
data.TotalWorkerProcessStartupFailures,
data.Name,
)
}

View File

@@ -20,13 +20,16 @@ import (
"regexp"
"strings"
"github.com/prometheus-community/windows_exporter/internal/perfdata"
"github.com/prometheus-community/windows_exporter/internal/pdh"
"github.com/prometheus-community/windows_exporter/internal/types"
"github.com/prometheus/client_golang/prometheus"
)
type collectorW3SVCW3WP struct {
w3SVCW3WPPerfDataCollector *perfdata.Collector
w3SVCW3WPPerfDataCollector *pdh.Collector
w3SVCW3WPPerfDataCollectorV8 *pdh.Collector
perfDataObjectW3SVCW3WP []perfDataCounterValuesW3SVCW3WP
perfDataObjectW3SVCW3WPV8 []perfDataCounterValuesW3SVCW3WPV8
// W3SVC_W3WP
w3SVCW3WPThreads *prometheus.Desc
@@ -78,112 +81,85 @@ type collectorW3SVCW3WP struct {
var workerProcessNameExtractor = regexp.MustCompile(`^(\d+)_(.+)$`)
const (
w3SVCW3WPThreads = "Active Threads Count"
w3SVCW3WPMaximumThreads = "Maximum Threads Count"
type perfDataCounterValuesW3SVCW3WP struct {
Name string
w3SVCW3WPRequestsTotal = "Total HTTP Requests Served"
w3SVCW3WPRequestsActive = "Active Requests"
W3SVCW3WPThreads float64 `perfdata:"Active Threads Count"`
W3SVCW3WPMaximumThreads float64 `perfdata:"Maximum Threads Count"`
w3SVCW3WPActiveFlushedEntries = "Active Flushed Entries"
W3SVCW3WPRequestsTotal float64 `perfdata:"Total HTTP Requests Served"`
W3SVCW3WPRequestsActive float64 `perfdata:"Active Requests"`
w3SVCW3WPCurrentFileCacheMemoryUsage = "Current File Cache Memory Usage"
w3SVCW3WPMaximumFileCacheMemoryUsage = "Maximum File Cache Memory Usage"
w3SVCW3WPFileCacheFlushesTotal = "File Cache Flushes"
w3SVCW3WPFileCacheHitsTotal = "File Cache Hits"
w3SVCW3WPFileCacheMissesTotal = "File Cache Misses"
w3SVCW3WPFilesCached = "Current Files Cached"
w3SVCW3WPFilesCachedTotal = "Total Files Cached"
w3SVCW3WPFilesFlushedTotal = "Total Flushed Files"
W3SVCW3WPActiveFlushedEntries float64 `perfdata:"Active Flushed Entries"`
w3SVCW3WPURICacheFlushesTotal = "Total Flushed URIs"
w3SVCW3WPURICacheHitsTotal = "URI Cache Hits"
w3SVCW3WPURICacheMissesTotal = "URI Cache Misses"
w3SVCW3WPURIsCached = "Current URIs Cached"
w3SVCW3WPURIsCachedTotal = "Total URIs Cached"
w3SVCW3WPURIsFlushedTotal = "Total Flushed URIs"
W3SVCW3WPCurrentFileCacheMemoryUsage float64 `perfdata:"Current File Cache Memory Usage"`
W3SVCW3WPMaximumFileCacheMemoryUsage float64 `perfdata:"Maximum File Cache Memory Usage"`
W3SVCW3WPFileCacheFlushesTotal float64 `perfdata:"File Cache Flushes"`
W3SVCW3WPFileCacheHitsTotal float64 `perfdata:"File Cache Hits"`
W3SVCW3WPFileCacheMissesTotal float64 `perfdata:"File Cache Misses"`
W3SVCW3WPFilesCached float64 `perfdata:"Current Files Cached"`
W3SVCW3WPFilesCachedTotal float64 `perfdata:"Total Files Cached"`
W3SVCW3WPFilesFlushedTotal float64 `perfdata:"Total Flushed Files"`
w3SVCW3WPMetaDataCacheHits = "Metadata Cache Hits"
w3SVCW3WPMetaDataCacheMisses = "Metadata Cache Misses"
w3SVCW3WPMetadataCached = "Current Metadata Cached"
w3SVCW3WPMetadataCacheFlushes = "Metadata Cache Flushes"
w3SVCW3WPMetadataCachedTotal = "Total Metadata Cached"
w3SVCW3WPMetadataFlushedTotal = "Total Flushed Metadata"
W3SVCW3WPURICacheFlushesTotal float64 `perfdata:"Total Flushed URIs"`
W3SVCW3WPURICacheHitsTotal float64 `perfdata:"URI Cache Hits"`
W3SVCW3WPURICacheMissesTotal float64 `perfdata:"URI Cache Misses"`
W3SVCW3WPURIsCached float64 `perfdata:"Current URIs Cached"`
W3SVCW3WPURIsCachedTotal float64 `perfdata:"Total URIs Cached"`
W3SVCW3WPURIsFlushedTotal float64 `perfdata:"Total Flushed URIs"`
w3SVCW3WPOutputCacheActiveFlushedItems = "Output Cache Current Flushed Items"
w3SVCW3WPOutputCacheItems = "Output Cache Current Items"
w3SVCW3WPOutputCacheMemoryUsage = "Output Cache Current Memory Usage"
w3SVCW3WPOutputCacheHitsTotal = "Output Cache Total Hits"
w3SVCW3WPOutputCacheMissesTotal = "Output Cache Total Misses"
w3SVCW3WPOutputCacheFlushedItemsTotal = "Output Cache Total Flushed Items"
w3SVCW3WPOutputCacheFlushesTotal = "Output Cache Total Flushes"
W3SVCW3WPMetaDataCacheHits float64 `perfdata:"Metadata Cache Hits"`
W3SVCW3WPMetaDataCacheMisses float64 `perfdata:"Metadata Cache Misses"`
W3SVCW3WPMetadataCached float64 `perfdata:"Current Metadata Cached"`
W3SVCW3WPMetadataCacheFlushes float64 `perfdata:"Metadata Cache Flushes"`
W3SVCW3WPMetadataCachedTotal float64 `perfdata:"Total Metadata Cached"`
W3SVCW3WPMetadataFlushedTotal float64 `perfdata:"Total Flushed Metadata"`
W3SVCW3WPOutputCacheActiveFlushedItems float64 `perfdata:"Output Cache Current Flushed Items"`
W3SVCW3WPOutputCacheItems float64 `perfdata:"Output Cache Current Items"`
W3SVCW3WPOutputCacheMemoryUsage float64 `perfdata:"Output Cache Current Memory Usage"`
W3SVCW3WPOutputCacheHitsTotal float64 `perfdata:"Output Cache Total Hits"`
W3SVCW3WPOutputCacheMissesTotal float64 `perfdata:"Output Cache Total Misses"`
W3SVCW3WPOutputCacheFlushedItemsTotal float64 `perfdata:"Output Cache Total Flushed Items"`
W3SVCW3WPOutputCacheFlushesTotal float64 `perfdata:"Output Cache Total Flushes"`
}
func (p perfDataCounterValuesW3SVCW3WP) GetName() string {
return p.Name
}
type perfDataCounterValuesW3SVCW3WPV8 struct {
Name string
// IIS8
w3SVCW3WPRequestErrors500 = "% 500 HTTP Response Sent"
w3SVCW3WPRequestErrors404 = "% 404 HTTP Response Sent"
w3SVCW3WPRequestErrors403 = "% 403 HTTP Response Sent"
w3SVCW3WPRequestErrors401 = "% 401 HTTP Response Sent"
W3SVCW3WPRequestErrors500 float64 `perfdata:"% 500 HTTP Response Sent"`
W3SVCW3WPRequestErrors404 float64 `perfdata:"% 404 HTTP Response Sent"`
W3SVCW3WPRequestErrors403 float64 `perfdata:"% 403 HTTP Response Sent"`
W3SVCW3WPRequestErrors401 float64 `perfdata:"% 401 HTTP Response Sent"`
w3SVCW3WPWebSocketRequestsActive = "WebSocket Active Requests"
w3SVCW3WPWebSocketConnectionAttempts = "WebSocket Connection Attempts / Sec"
w3SVCW3WPWebSocketConnectionsAccepted = "WebSocket Connections Accepted / Sec"
w3SVCW3WPWebSocketConnectionsRejected = "WebSocket Connections Rejected / Sec"
)
W3SVCW3WPWebSocketRequestsActive float64 `perfdata:"WebSocket Active Requests"`
W3SVCW3WPWebSocketConnectionAttempts float64 `perfdata:"WebSocket Connection Attempts / Sec"`
W3SVCW3WPWebSocketConnectionsAccepted float64 `perfdata:"WebSocket Connections Accepted / Sec"`
W3SVCW3WPWebSocketConnectionsRejected float64 `perfdata:"WebSocket Connections Rejected / Sec"`
}
func (p perfDataCounterValuesW3SVCW3WPV8) GetName() string {
return p.Name
}
func (c *Collector) buildW3SVCW3WP() error {
counters := []string{
w3SVCW3WPThreads,
w3SVCW3WPMaximumThreads,
w3SVCW3WPRequestsTotal,
w3SVCW3WPRequestsActive,
w3SVCW3WPActiveFlushedEntries,
w3SVCW3WPCurrentFileCacheMemoryUsage,
w3SVCW3WPMaximumFileCacheMemoryUsage,
w3SVCW3WPFileCacheFlushesTotal,
w3SVCW3WPFileCacheHitsTotal,
w3SVCW3WPFileCacheMissesTotal,
w3SVCW3WPFilesCached,
w3SVCW3WPFilesCachedTotal,
w3SVCW3WPFilesFlushedTotal,
w3SVCW3WPURICacheFlushesTotal,
w3SVCW3WPURICacheHitsTotal,
w3SVCW3WPURICacheMissesTotal,
w3SVCW3WPURIsCached,
w3SVCW3WPURIsCachedTotal,
w3SVCW3WPURIsFlushedTotal,
w3SVCW3WPMetaDataCacheHits,
w3SVCW3WPMetaDataCacheMisses,
w3SVCW3WPMetadataCached,
w3SVCW3WPMetadataCacheFlushes,
w3SVCW3WPMetadataCachedTotal,
w3SVCW3WPMetadataFlushedTotal,
w3SVCW3WPOutputCacheActiveFlushedItems,
w3SVCW3WPOutputCacheItems,
w3SVCW3WPOutputCacheMemoryUsage,
w3SVCW3WPOutputCacheHitsTotal,
w3SVCW3WPOutputCacheMissesTotal,
w3SVCW3WPOutputCacheFlushedItemsTotal,
w3SVCW3WPOutputCacheFlushesTotal,
var err error
c.w3SVCW3WPPerfDataCollector, err = pdh.NewCollector[perfDataCounterValuesW3SVCW3WP]("W3SVC_W3WP", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create W3SVC_W3WP collector: %w", err)
}
if c.iisVersion.major >= 8 {
counters = append(counters, []string{
w3SVCW3WPRequestErrors500,
w3SVCW3WPRequestErrors404,
w3SVCW3WPRequestErrors403,
w3SVCW3WPRequestErrors401,
w3SVCW3WPWebSocketRequestsActive,
w3SVCW3WPWebSocketConnectionAttempts,
w3SVCW3WPWebSocketConnectionsAccepted,
w3SVCW3WPWebSocketConnectionsRejected,
}...)
}
var err error
c.w3SVCW3WPPerfDataCollector, err = perfdata.NewCollector("W3SVC_W3WP", perfdata.InstancesAll, counters)
if err != nil {
return fmt.Errorf("failed to create W3SVC_W3WP collector: %w", err)
c.w3SVCW3WPPerfDataCollectorV8, err = pdh.NewCollector[perfDataCounterValuesW3SVCW3WPV8]("W3SVC_W3WP", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create W3SVC_W3WP collector: %w", err)
}
}
// W3SVC_W3WP
@@ -415,22 +391,128 @@ func (c *Collector) buildW3SVCW3WP() error {
}
func (c *Collector) collectW3SVCW3WP(ch chan<- prometheus.Metric) error {
perfData, err := c.w3SVCW3WPPerfDataCollector.Collect()
if err := c.collectW3SVCW3WPv7(ch); err != nil {
return err
}
if c.iisVersion.major >= 8 {
if err := c.collectW3SVCW3WPv8(ch); err != nil {
return err
}
}
return nil
}
func (c *Collector) collectW3SVCW3WPv8(ch chan<- prometheus.Metric) error {
err := c.w3SVCW3WPPerfDataCollector.Collect(&c.perfDataObjectW3SVCW3WPV8)
if err != nil {
return fmt.Errorf("failed to collect APP_POOL_WAS metrics: %w", err)
}
deduplicateIISNames(perfData)
deduplicateIISNames(c.perfDataObjectW3SVCW3WPV8)
for name, app := range perfData {
if c.config.AppExclude.MatchString(name) || !c.config.AppInclude.MatchString(name) {
for _, data := range c.perfDataObjectW3SVCW3WPV8 {
if c.config.AppExclude.MatchString(data.Name) || !c.config.AppInclude.MatchString(data.Name) {
continue
}
// Extract the apppool name from the format <PID>_<NAME>
pid := workerProcessNameExtractor.ReplaceAllString(name, "$1")
pid := workerProcessNameExtractor.ReplaceAllString(data.Name, "$1")
name := workerProcessNameExtractor.ReplaceAllString(name, "$2")
name := workerProcessNameExtractor.ReplaceAllString(data.Name, "$2")
if name == "" || c.config.AppExclude.MatchString(name) ||
!c.config.AppInclude.MatchString(name) {
continue
}
// Duplicate instances are suffixed # with an index number. These should be ignored
if strings.Contains(name, "#") {
continue
}
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestErrorsTotal,
prometheus.CounterValue,
data.W3SVCW3WPRequestErrors401,
name,
pid,
"401",
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestErrorsTotal,
prometheus.CounterValue,
data.W3SVCW3WPRequestErrors403,
name,
pid,
"403",
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestErrorsTotal,
prometheus.CounterValue,
data.W3SVCW3WPRequestErrors404,
name,
pid,
"404",
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestErrorsTotal,
prometheus.CounterValue,
data.W3SVCW3WPRequestErrors500,
name,
pid,
"500",
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPWebSocketRequestsActive,
prometheus.CounterValue,
data.W3SVCW3WPWebSocketRequestsActive,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPWebSocketConnectionAttempts,
prometheus.CounterValue,
data.W3SVCW3WPWebSocketConnectionAttempts,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPWebSocketConnectionsAccepted,
prometheus.CounterValue,
data.W3SVCW3WPWebSocketConnectionsAccepted,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPWebSocketConnectionsRejected,
prometheus.CounterValue,
data.W3SVCW3WPWebSocketConnectionsRejected,
name,
pid,
)
}
return nil
}
func (c *Collector) collectW3SVCW3WPv7(ch chan<- prometheus.Metric) error {
err := c.w3SVCW3WPPerfDataCollector.Collect(&c.perfDataObjectW3SVCW3WP)
if err != nil {
return fmt.Errorf("failed to collect APP_POOL_WAS metrics: %w", err)
}
deduplicateIISNames(c.perfDataObjectW3SVCW3WP)
for _, data := range c.perfDataObjectW3SVCW3WP {
if c.config.AppExclude.MatchString(data.Name) || !c.config.AppInclude.MatchString(data.Name) {
continue
}
// Extract the apppool name from the format <PID>_<NAME>
pid := workerProcessNameExtractor.ReplaceAllString(data.Name, "$1")
name := workerProcessNameExtractor.ReplaceAllString(data.Name, "$2")
if name == "" || c.config.AppExclude.MatchString(name) ||
!c.config.AppInclude.MatchString(name) {
continue
@@ -444,7 +526,7 @@ func (c *Collector) collectW3SVCW3WP(ch chan<- prometheus.Metric) error {
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPThreads,
prometheus.GaugeValue,
app[w3SVCW3WPThreads].FirstValue,
data.W3SVCW3WPThreads,
name,
pid,
"busy",
@@ -452,283 +534,220 @@ func (c *Collector) collectW3SVCW3WP(ch chan<- prometheus.Metric) error {
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPMaximumThreads,
prometheus.CounterValue,
app[w3SVCW3WPMaximumThreads].FirstValue,
data.W3SVCW3WPMaximumThreads,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestsTotal,
prometheus.CounterValue,
app[w3SVCW3WPRequestsTotal].FirstValue,
data.W3SVCW3WPRequestsTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestsActive,
prometheus.CounterValue,
app[w3SVCW3WPRequestsActive].FirstValue,
data.W3SVCW3WPRequestsActive,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPActiveFlushedEntries,
prometheus.GaugeValue,
app[w3SVCW3WPActiveFlushedEntries].FirstValue,
data.W3SVCW3WPActiveFlushedEntries,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPCurrentFileCacheMemoryUsage,
prometheus.GaugeValue,
app[w3SVCW3WPCurrentFileCacheMemoryUsage].FirstValue,
data.W3SVCW3WPCurrentFileCacheMemoryUsage,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPMaximumFileCacheMemoryUsage,
prometheus.CounterValue,
app[w3SVCW3WPMaximumFileCacheMemoryUsage].FirstValue,
data.W3SVCW3WPMaximumFileCacheMemoryUsage,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPFileCacheFlushesTotal,
prometheus.CounterValue,
app[w3SVCW3WPFileCacheFlushesTotal].FirstValue,
data.W3SVCW3WPFileCacheFlushesTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPFileCacheQueriesTotal,
prometheus.CounterValue,
app[w3SVCW3WPFileCacheHitsTotal].FirstValue+app[w3SVCW3WPFileCacheMissesTotal].FirstValue,
data.W3SVCW3WPFileCacheHitsTotal+data.W3SVCW3WPFileCacheMissesTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPFileCacheHitsTotal,
prometheus.CounterValue,
app[w3SVCW3WPFileCacheHitsTotal].FirstValue,
data.W3SVCW3WPFileCacheHitsTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPFilesCached,
prometheus.GaugeValue,
app[w3SVCW3WPFilesCached].FirstValue,
data.W3SVCW3WPFilesCached,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPFilesCachedTotal,
prometheus.CounterValue,
app[w3SVCW3WPFilesCachedTotal].FirstValue,
data.W3SVCW3WPFilesCachedTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPFilesFlushedTotal,
prometheus.CounterValue,
app[w3SVCW3WPFilesFlushedTotal].FirstValue,
data.W3SVCW3WPFilesFlushedTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPURICacheFlushesTotal,
prometheus.CounterValue,
app[w3SVCW3WPURICacheFlushesTotal].FirstValue,
data.W3SVCW3WPURICacheFlushesTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPURICacheQueriesTotal,
prometheus.CounterValue,
app[w3SVCW3WPURICacheHitsTotal].FirstValue+app[w3SVCW3WPURICacheMissesTotal].FirstValue,
data.W3SVCW3WPURICacheHitsTotal+data.W3SVCW3WPURICacheMissesTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPURICacheHitsTotal,
prometheus.CounterValue,
app[w3SVCW3WPURICacheHitsTotal].FirstValue,
data.W3SVCW3WPURICacheHitsTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPURIsCached,
prometheus.GaugeValue,
app[w3SVCW3WPURIsCached].FirstValue,
data.W3SVCW3WPURIsCached,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPURIsCachedTotal,
prometheus.CounterValue,
app[w3SVCW3WPURIsCachedTotal].FirstValue,
data.W3SVCW3WPURIsCachedTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPURIsFlushedTotal,
prometheus.CounterValue,
app[w3SVCW3WPURIsFlushedTotal].FirstValue,
data.W3SVCW3WPURIsFlushedTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPMetadataCached,
prometheus.GaugeValue,
app[w3SVCW3WPMetadataCached].FirstValue,
data.W3SVCW3WPMetadataCached,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPMetadataCacheFlushes,
prometheus.CounterValue,
app[w3SVCW3WPMetadataCacheFlushes].FirstValue,
data.W3SVCW3WPMetadataCacheFlushes,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPMetadataCacheQueriesTotal,
prometheus.CounterValue,
app[w3SVCW3WPMetaDataCacheHits].FirstValue+app[w3SVCW3WPMetaDataCacheMisses].FirstValue,
data.W3SVCW3WPMetaDataCacheHits+data.W3SVCW3WPMetaDataCacheMisses,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPMetadataCacheHitsTotal,
prometheus.CounterValue,
app[w3SVCW3WPMetaDataCacheHits].FirstValue,
data.W3SVCW3WPMetaDataCacheHits,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPMetadataCachedTotal,
prometheus.CounterValue,
app[w3SVCW3WPMetadataCachedTotal].FirstValue,
data.W3SVCW3WPMetadataCachedTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPMetadataFlushedTotal,
prometheus.CounterValue,
app[w3SVCW3WPMetadataFlushedTotal].FirstValue,
data.W3SVCW3WPMetadataFlushedTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPOutputCacheActiveFlushedItems,
prometheus.CounterValue,
app[w3SVCW3WPOutputCacheActiveFlushedItems].FirstValue,
data.W3SVCW3WPOutputCacheActiveFlushedItems,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPOutputCacheItems,
prometheus.CounterValue,
app[w3SVCW3WPOutputCacheItems].FirstValue,
data.W3SVCW3WPOutputCacheItems,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPOutputCacheMemoryUsage,
prometheus.CounterValue,
app[w3SVCW3WPOutputCacheMemoryUsage].FirstValue,
data.W3SVCW3WPOutputCacheMemoryUsage,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPOutputCacheQueriesTotal,
prometheus.CounterValue,
app[w3SVCW3WPOutputCacheHitsTotal].FirstValue+app[w3SVCW3WPOutputCacheMissesTotal].FirstValue,
data.W3SVCW3WPOutputCacheHitsTotal+data.W3SVCW3WPOutputCacheMissesTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPOutputCacheHitsTotal,
prometheus.CounterValue,
app[w3SVCW3WPOutputCacheHitsTotal].FirstValue,
data.W3SVCW3WPOutputCacheHitsTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPOutputCacheFlushedItemsTotal,
prometheus.CounterValue,
app[w3SVCW3WPOutputCacheFlushedItemsTotal].FirstValue,
data.W3SVCW3WPOutputCacheFlushedItemsTotal,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPOutputCacheFlushesTotal,
prometheus.CounterValue,
app[w3SVCW3WPOutputCacheFlushesTotal].FirstValue,
data.W3SVCW3WPOutputCacheFlushesTotal,
name,
pid,
)
if c.iisVersion.major >= 8 {
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestErrorsTotal,
prometheus.CounterValue,
app[w3SVCW3WPRequestErrors401].FirstValue,
name,
pid,
"401",
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestErrorsTotal,
prometheus.CounterValue,
app[w3SVCW3WPRequestErrors403].FirstValue,
name,
pid,
"403",
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestErrorsTotal,
prometheus.CounterValue,
app[w3SVCW3WPRequestErrors404].FirstValue,
name,
pid,
"404",
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPRequestErrorsTotal,
prometheus.CounterValue,
app[w3SVCW3WPRequestErrors500].FirstValue,
name,
pid,
"500",
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPWebSocketRequestsActive,
prometheus.CounterValue,
app[w3SVCW3WPWebSocketRequestsActive].FirstValue,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPWebSocketConnectionAttempts,
prometheus.CounterValue,
app[w3SVCW3WPWebSocketConnectionAttempts].FirstValue,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPWebSocketConnectionsAccepted,
prometheus.CounterValue,
app[w3SVCW3WPWebSocketConnectionsAccepted].FirstValue,
name,
pid,
)
ch <- prometheus.MustNewConstMetric(
c.w3SVCW3WPWebSocketConnectionsRejected,
prometheus.CounterValue,
app[w3SVCW3WPWebSocketConnectionsRejected].FirstValue,
name,
pid,
)
}
}
return nil

View File

@@ -18,13 +18,14 @@ package iis
import (
"fmt"
"github.com/prometheus-community/windows_exporter/internal/perfdata"
"github.com/prometheus-community/windows_exporter/internal/pdh"
"github.com/prometheus-community/windows_exporter/internal/types"
"github.com/prometheus/client_golang/prometheus"
)
type collectorWebService struct {
perfDataCollectorWebService *perfdata.Collector
perfDataCollectorWebService *pdh.Collector
perfDataObjectWebService []perfDataCounterValuesWebService
webServiceCurrentAnonymousUsers *prometheus.Desc
webServiceCurrentBlockedAsyncIORequests *prometheus.Desc
@@ -50,88 +51,56 @@ type collectorWebService struct {
webServiceTotalRejectedAsyncIORequests *prometheus.Desc
}
const (
webServiceCurrentAnonymousUsers = "Current Anonymous Users"
webServiceCurrentBlockedAsyncIORequests = "Current Blocked Async I/O Requests"
webServiceCurrentCGIRequests = "Current CGI Requests"
webServiceCurrentConnections = "Current Connections"
webServiceCurrentISAPIExtensionRequests = "Current ISAPI Extension Requests"
webServiceCurrentNonAnonymousUsers = "Current NonAnonymous Users"
webServiceServiceUptime = "Service Uptime"
webServiceTotalBytesReceived = "Total Bytes Received"
webServiceTotalBytesSent = "Total Bytes Sent"
webServiceTotalAnonymousUsers = "Total Anonymous Users"
webServiceTotalBlockedAsyncIORequests = "Total Blocked Async I/O Requests"
webServiceTotalCGIRequests = "Total CGI Requests"
webServiceTotalConnectionAttemptsAllInstances = "Total Connection Attempts (all instances)"
webServiceTotalFilesReceived = "Total Files Received"
webServiceTotalFilesSent = "Total Files Sent"
webServiceTotalISAPIExtensionRequests = "Total ISAPI Extension Requests"
webServiceTotalLockedErrors = "Total Locked Errors"
webServiceTotalLogonAttempts = "Total Logon Attempts"
webServiceTotalNonAnonymousUsers = "Total NonAnonymous Users"
webServiceTotalNotFoundErrors = "Total Not Found Errors"
webServiceTotalRejectedAsyncIORequests = "Total Rejected Async I/O Requests"
webServiceTotalCopyRequests = "Total Copy Requests"
webServiceTotalDeleteRequests = "Total Delete Requests"
webServiceTotalGetRequests = "Total Get Requests"
webServiceTotalHeadRequests = "Total Head Requests"
webServiceTotalLockRequests = "Total Lock Requests"
webServiceTotalMkcolRequests = "Total Mkcol Requests"
webServiceTotalMoveRequests = "Total Move Requests"
webServiceTotalOptionsRequests = "Total Options Requests"
webServiceTotalOtherRequests = "Total Other Request Methods"
webServiceTotalPostRequests = "Total Post Requests"
webServiceTotalPropfindRequests = "Total Propfind Requests"
webServiceTotalProppatchRequests = "Total Proppatch Requests"
webServiceTotalPutRequests = "Total Put Requests"
webServiceTotalSearchRequests = "Total Search Requests"
webServiceTotalTraceRequests = "Total Trace Requests"
webServiceTotalUnlockRequests = "Total Unlock Requests"
)
type perfDataCounterValuesWebService struct {
Name string
WebServiceCurrentAnonymousUsers float64 `perfdata:"Current Anonymous Users"`
WebServiceCurrentBlockedAsyncIORequests float64 `perfdata:"Current Blocked Async I/O Requests"`
WebServiceCurrentCGIRequests float64 `perfdata:"Current CGI Requests"`
WebServiceCurrentConnections float64 `perfdata:"Current Connections"`
WebServiceCurrentISAPIExtensionRequests float64 `perfdata:"Current ISAPI Extension Requests"`
WebServiceCurrentNonAnonymousUsers float64 `perfdata:"Current NonAnonymous Users"`
WebServiceServiceUptime float64 `perfdata:"Service Uptime"`
WebServiceTotalBytesReceived float64 `perfdata:"Total Bytes Received"`
WebServiceTotalBytesSent float64 `perfdata:"Total Bytes Sent"`
WebServiceTotalAnonymousUsers float64 `perfdata:"Total Anonymous Users"`
WebServiceTotalBlockedAsyncIORequests float64 `perfdata:"Total Blocked Async I/O Requests"`
WebServiceTotalCGIRequests float64 `perfdata:"Total CGI Requests"`
WebServiceTotalConnectionAttemptsAllInstances float64 `perfdata:"Total Connection Attempts (all instances)"`
WebServiceTotalFilesReceived float64 `perfdata:"Total Files Received"`
WebServiceTotalFilesSent float64 `perfdata:"Total Files Sent"`
WebServiceTotalISAPIExtensionRequests float64 `perfdata:"Total ISAPI Extension Requests"`
WebServiceTotalLockedErrors float64 `perfdata:"Total Locked Errors"`
WebServiceTotalLogonAttempts float64 `perfdata:"Total Logon Attempts"`
WebServiceTotalNonAnonymousUsers float64 `perfdata:"Total NonAnonymous Users"`
WebServiceTotalNotFoundErrors float64 `perfdata:"Total Not Found Errors"`
WebServiceTotalRejectedAsyncIORequests float64 `perfdata:"Total Rejected Async I/O Requests"`
WebServiceTotalCopyRequests float64 `perfdata:"Total Copy Requests"`
WebServiceTotalDeleteRequests float64 `perfdata:"Total Delete Requests"`
WebServiceTotalGetRequests float64 `perfdata:"Total Get Requests"`
WebServiceTotalHeadRequests float64 `perfdata:"Total Head Requests"`
WebServiceTotalLockRequests float64 `perfdata:"Total Lock Requests"`
WebServiceTotalMkcolRequests float64 `perfdata:"Total Mkcol Requests"`
WebServiceTotalMoveRequests float64 `perfdata:"Total Move Requests"`
WebServiceTotalOptionsRequests float64 `perfdata:"Total Options Requests"`
WebServiceTotalOtherRequests float64 `perfdata:"Total Other Request Methods"`
WebServiceTotalPostRequests float64 `perfdata:"Total Post Requests"`
WebServiceTotalPropfindRequests float64 `perfdata:"Total Propfind Requests"`
WebServiceTotalProppatchRequests float64 `perfdata:"Total Proppatch Requests"`
WebServiceTotalPutRequests float64 `perfdata:"Total Put Requests"`
WebServiceTotalSearchRequests float64 `perfdata:"Total Search Requests"`
WebServiceTotalTraceRequests float64 `perfdata:"Total Trace Requests"`
WebServiceTotalUnlockRequests float64 `perfdata:"Total Unlock Requests"`
}
func (p perfDataCounterValuesWebService) GetName() string {
return p.Name
}
func (c *Collector) buildWebService() error {
var err error
c.perfDataCollectorWebService, err = perfdata.NewCollector("Web Service", perfdata.InstancesAll, []string{
webServiceCurrentAnonymousUsers,
webServiceCurrentBlockedAsyncIORequests,
webServiceCurrentCGIRequests,
webServiceCurrentConnections,
webServiceCurrentISAPIExtensionRequests,
webServiceCurrentNonAnonymousUsers,
webServiceServiceUptime,
webServiceTotalBytesReceived,
webServiceTotalBytesSent,
webServiceTotalAnonymousUsers,
webServiceTotalBlockedAsyncIORequests,
webServiceTotalCGIRequests,
webServiceTotalConnectionAttemptsAllInstances,
webServiceTotalFilesReceived,
webServiceTotalFilesSent,
webServiceTotalISAPIExtensionRequests,
webServiceTotalLockedErrors,
webServiceTotalLogonAttempts,
webServiceTotalNonAnonymousUsers,
webServiceTotalNotFoundErrors,
webServiceTotalRejectedAsyncIORequests,
webServiceTotalCopyRequests,
webServiceTotalDeleteRequests,
webServiceTotalGetRequests,
webServiceTotalHeadRequests,
webServiceTotalLockRequests,
webServiceTotalMkcolRequests,
webServiceTotalMoveRequests,
webServiceTotalOptionsRequests,
webServiceTotalOtherRequests,
webServiceTotalPostRequests,
webServiceTotalPropfindRequests,
webServiceTotalProppatchRequests,
webServiceTotalPutRequests,
webServiceTotalSearchRequests,
webServiceTotalTraceRequests,
webServiceTotalUnlockRequests,
})
c.perfDataCollectorWebService, err = pdh.NewCollector[perfDataCounterValuesWebService]("Web Service", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create Web Service collector: %w", err)
}
@@ -273,254 +242,254 @@ func (c *Collector) buildWebService() error {
}
func (c *Collector) collectWebService(ch chan<- prometheus.Metric) error {
perfData, err := c.perfDataCollectorWebService.Collect()
err := c.perfDataCollectorWebService.Collect(&c.perfDataObjectWebService)
if err != nil {
return fmt.Errorf("failed to collect Web Service metrics: %w", err)
}
deduplicateIISNames(perfData)
deduplicateIISNames(c.perfDataObjectWebService)
for name, app := range perfData {
if c.config.SiteExclude.MatchString(name) || !c.config.SiteInclude.MatchString(name) {
for _, data := range c.perfDataObjectWebService {
if c.config.SiteExclude.MatchString(data.Name) || !c.config.SiteInclude.MatchString(data.Name) {
continue
}
ch <- prometheus.MustNewConstMetric(
c.webServiceCurrentAnonymousUsers,
prometheus.GaugeValue,
app[webServiceCurrentAnonymousUsers].FirstValue,
name,
data.WebServiceCurrentAnonymousUsers,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceCurrentBlockedAsyncIORequests,
prometheus.GaugeValue,
app[webServiceCurrentBlockedAsyncIORequests].FirstValue,
name,
data.WebServiceCurrentBlockedAsyncIORequests,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceCurrentCGIRequests,
prometheus.GaugeValue,
app[webServiceCurrentCGIRequests].FirstValue,
name,
data.WebServiceCurrentCGIRequests,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceCurrentConnections,
prometheus.GaugeValue,
app[webServiceCurrentConnections].FirstValue,
name,
data.WebServiceCurrentConnections,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceCurrentISAPIExtensionRequests,
prometheus.GaugeValue,
app[webServiceCurrentISAPIExtensionRequests].FirstValue,
name,
data.WebServiceCurrentISAPIExtensionRequests,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceCurrentNonAnonymousUsers,
prometheus.GaugeValue,
app[webServiceCurrentNonAnonymousUsers].FirstValue,
name,
data.WebServiceCurrentNonAnonymousUsers,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceServiceUptime,
prometheus.GaugeValue,
app[webServiceServiceUptime].FirstValue,
name,
data.WebServiceServiceUptime,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalBytesReceived,
prometheus.CounterValue,
app[webServiceTotalBytesReceived].FirstValue,
name,
data.WebServiceTotalBytesReceived,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalBytesSent,
prometheus.CounterValue,
app[webServiceTotalBytesSent].FirstValue,
name,
data.WebServiceTotalBytesSent,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalAnonymousUsers,
prometheus.CounterValue,
app[webServiceTotalAnonymousUsers].FirstValue,
name,
data.WebServiceTotalAnonymousUsers,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalBlockedAsyncIORequests,
prometheus.CounterValue,
app[webServiceTotalBlockedAsyncIORequests].FirstValue,
name,
data.WebServiceTotalBlockedAsyncIORequests,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalCGIRequests,
prometheus.CounterValue,
app[webServiceTotalCGIRequests].FirstValue,
name,
data.WebServiceTotalCGIRequests,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalConnectionAttemptsAllInstances,
prometheus.CounterValue,
app[webServiceTotalConnectionAttemptsAllInstances].FirstValue,
name,
data.WebServiceTotalConnectionAttemptsAllInstances,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalFilesReceived,
prometheus.CounterValue,
app[webServiceTotalFilesReceived].FirstValue,
name,
data.WebServiceTotalFilesReceived,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalFilesSent,
prometheus.CounterValue,
app[webServiceTotalFilesSent].FirstValue,
name,
data.WebServiceTotalFilesSent,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalISAPIExtensionRequests,
prometheus.CounterValue,
app[webServiceTotalISAPIExtensionRequests].FirstValue,
name,
data.WebServiceTotalISAPIExtensionRequests,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalLockedErrors,
prometheus.CounterValue,
app[webServiceTotalLockedErrors].FirstValue,
name,
data.WebServiceTotalLockedErrors,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalLogonAttempts,
prometheus.CounterValue,
app[webServiceTotalLogonAttempts].FirstValue,
name,
data.WebServiceTotalLogonAttempts,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalNonAnonymousUsers,
prometheus.CounterValue,
app[webServiceTotalNonAnonymousUsers].FirstValue,
name,
data.WebServiceTotalNonAnonymousUsers,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalNotFoundErrors,
prometheus.CounterValue,
app[webServiceTotalNotFoundErrors].FirstValue,
name,
data.WebServiceTotalNotFoundErrors,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRejectedAsyncIORequests,
prometheus.CounterValue,
app[webServiceTotalRejectedAsyncIORequests].FirstValue,
name,
data.WebServiceTotalRejectedAsyncIORequests,
data.Name,
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalOtherRequests].FirstValue,
name,
data.WebServiceTotalOtherRequests,
data.Name,
"other",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalCopyRequests].FirstValue,
name,
data.WebServiceTotalCopyRequests,
data.Name,
"COPY",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalDeleteRequests].FirstValue,
name,
data.WebServiceTotalDeleteRequests,
data.Name,
"DELETE",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalGetRequests].FirstValue,
name,
data.WebServiceTotalGetRequests,
data.Name,
"GET",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalHeadRequests].FirstValue,
name,
data.WebServiceTotalHeadRequests,
data.Name,
"HEAD",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalLockRequests].FirstValue,
name,
data.WebServiceTotalLockRequests,
data.Name,
"LOCK",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalMkcolRequests].FirstValue,
name,
data.WebServiceTotalMkcolRequests,
data.Name,
"MKCOL",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalMoveRequests].FirstValue,
name,
data.WebServiceTotalMoveRequests,
data.Name,
"MOVE",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalOptionsRequests].FirstValue,
name,
data.WebServiceTotalOptionsRequests,
data.Name,
"OPTIONS",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalPostRequests].FirstValue,
name,
data.WebServiceTotalPostRequests,
data.Name,
"POST",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalPropfindRequests].FirstValue,
name,
data.WebServiceTotalPropfindRequests,
data.Name,
"PROPFIND",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalProppatchRequests].FirstValue,
name,
data.WebServiceTotalProppatchRequests,
data.Name,
"PROPPATCH",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalPutRequests].FirstValue,
name,
data.WebServiceTotalPutRequests,
data.Name,
"PUT",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalSearchRequests].FirstValue,
name,
data.WebServiceTotalSearchRequests,
data.Name,
"SEARCH",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalTraceRequests].FirstValue,
name,
data.WebServiceTotalTraceRequests,
data.Name,
"TRACE",
)
ch <- prometheus.MustNewConstMetric(
c.webServiceTotalRequests,
prometheus.CounterValue,
app[webServiceTotalUnlockRequests].FirstValue,
name,
data.WebServiceTotalUnlockRequests,
data.Name,
"UNLOCK",
)
}

View File

@@ -18,13 +18,14 @@ package iis
import (
"fmt"
"github.com/prometheus-community/windows_exporter/internal/perfdata"
"github.com/prometheus-community/windows_exporter/internal/pdh"
"github.com/prometheus-community/windows_exporter/internal/types"
"github.com/prometheus/client_golang/prometheus"
)
type collectorWebServiceCache struct {
serviceCachePerfDataCollector *perfdata.Collector
serviceCachePerfDataCollector *pdh.Collector
perfDataObjectServiceCache []perfDataCounterServiceCache
serviceCacheActiveFlushedEntries *prometheus.Desc
@@ -60,82 +61,53 @@ type collectorWebServiceCache struct {
serviceCacheOutputCacheFlushesTotal *prometheus.Desc
}
const (
serviceCacheActiveFlushedEntries = "Active Flushed Entries"
serviceCacheCurrentFileCacheMemoryUsage = "Current File Cache Memory Usage"
serviceCacheMaximumFileCacheMemoryUsage = "Maximum File Cache Memory Usage"
serviceCacheFileCacheFlushesTotal = "File Cache Flushes"
serviceCacheFileCacheHitsTotal = "File Cache Hits"
serviceCacheFileCacheMissesTotal = "File Cache Misses"
serviceCacheFilesCached = "Current Files Cached"
serviceCacheFilesCachedTotal = "Total Files Cached"
serviceCacheFilesFlushedTotal = "Total Flushed Files"
serviceCacheURICacheFlushesTotal = "Total Flushed URIs"
serviceCacheURICacheFlushesTotalKernel = "Total Flushed URIs"
serviceCacheURIsFlushedTotalKernel = "Kernel: Total Flushed URIs"
serviceCacheURICacheHitsTotal = "URI Cache Hits"
serviceCacheURICacheHitsTotalKernel = "Kernel: URI Cache Hits"
serviceCacheURICacheMissesTotal = "URI Cache Misses"
serviceCacheURICacheMissesTotalKernel = "Kernel: URI Cache Misses"
serviceCacheURIsCached = "Current URIs Cached"
serviceCacheURIsCachedKernel = "Kernel: Current URIs Cached"
serviceCacheURIsCachedTotal = "Total URIs Cached"
serviceCacheURIsCachedTotalKernel = "Total URIs Cached"
serviceCacheURIsFlushedTotal = "Total Flushed URIs"
serviceCacheMetaDataCacheHits = "Metadata Cache Hits"
serviceCacheMetaDataCacheMisses = "Metadata Cache Misses"
serviceCacheMetadataCached = "Current Metadata Cached"
serviceCacheMetadataCacheFlushes = "Metadata Cache Flushes"
serviceCacheMetadataCachedTotal = "Total Metadata Cached"
serviceCacheMetadataFlushedTotal = "Total Flushed Metadata"
serviceCacheOutputCacheActiveFlushedItems = "Output Cache Current Flushed Items"
serviceCacheOutputCacheItems = "Output Cache Current Items"
serviceCacheOutputCacheMemoryUsage = "Output Cache Current Memory Usage"
serviceCacheOutputCacheHitsTotal = "Output Cache Total Hits"
serviceCacheOutputCacheMissesTotal = "Output Cache Total Misses"
serviceCacheOutputCacheFlushedItemsTotal = "Output Cache Total Flushed Items"
serviceCacheOutputCacheFlushesTotal = "Output Cache Total Flushes"
)
type perfDataCounterServiceCache struct {
Name string
ServiceCacheActiveFlushedEntries float64 `perfdata:"Active Flushed Entries"`
ServiceCacheCurrentFileCacheMemoryUsage float64 `perfdata:"Current File Cache Memory Usage"`
ServiceCacheMaximumFileCacheMemoryUsage float64 `perfdata:"Maximum File Cache Memory Usage"`
ServiceCacheFileCacheFlushesTotal float64 `perfdata:"File Cache Flushes"`
ServiceCacheFileCacheHitsTotal float64 `perfdata:"File Cache Hits"`
ServiceCacheFileCacheMissesTotal float64 `perfdata:"File Cache Misses"`
ServiceCacheFilesCached float64 `perfdata:"Current Files Cached"`
ServiceCacheFilesCachedTotal float64 `perfdata:"Total Files Cached"`
ServiceCacheFilesFlushedTotal float64 `perfdata:"Total Flushed Files"`
ServiceCacheURICacheFlushesTotal float64 `perfdata:"Total Flushed URIs"`
ServiceCacheURICacheFlushesTotalKernel float64 `perfdata:"Total Flushed URIs"`
ServiceCacheURIsFlushedTotalKernel float64 `perfdata:"Kernel: Total Flushed URIs"`
ServiceCacheURICacheHitsTotal float64 `perfdata:"URI Cache Hits"`
ServiceCacheURICacheHitsTotalKernel float64 `perfdata:"Kernel: URI Cache Hits"`
ServiceCacheURICacheMissesTotal float64 `perfdata:"URI Cache Misses"`
ServiceCacheURICacheMissesTotalKernel float64 `perfdata:"Kernel: URI Cache Misses"`
ServiceCacheURIsCached float64 `perfdata:"Current URIs Cached"`
ServiceCacheURIsCachedKernel float64 `perfdata:"Kernel: Current URIs Cached"`
ServiceCacheURIsCachedTotal float64 `perfdata:"Total URIs Cached"`
ServiceCacheURIsCachedTotalKernel float64 `perfdata:"Total URIs Cached"`
ServiceCacheURIsFlushedTotal float64 `perfdata:"Total Flushed URIs"`
ServiceCacheMetaDataCacheHits float64 `perfdata:"Metadata Cache Hits"`
ServiceCacheMetaDataCacheMisses float64 `perfdata:"Metadata Cache Misses"`
ServiceCacheMetadataCached float64 `perfdata:"Current Metadata Cached"`
ServiceCacheMetadataCacheFlushes float64 `perfdata:"Metadata Cache Flushes"`
ServiceCacheMetadataCachedTotal float64 `perfdata:"Total Metadata Cached"`
ServiceCacheMetadataFlushedTotal float64 `perfdata:"Total Flushed Metadata"`
ServiceCacheOutputCacheActiveFlushedItems float64 `perfdata:"Output Cache Current Flushed Items"`
ServiceCacheOutputCacheItems float64 `perfdata:"Output Cache Current Items"`
ServiceCacheOutputCacheMemoryUsage float64 `perfdata:"Output Cache Current Memory Usage"`
ServiceCacheOutputCacheHitsTotal float64 `perfdata:"Output Cache Total Hits"`
ServiceCacheOutputCacheMissesTotal float64 `perfdata:"Output Cache Total Misses"`
ServiceCacheOutputCacheFlushedItemsTotal float64 `perfdata:"Output Cache Total Flushed Items"`
ServiceCacheOutputCacheFlushesTotal float64 `perfdata:"Output Cache Total Flushes"`
}
func (p perfDataCounterServiceCache) GetName() string {
return p.Name
}
func (c *Collector) buildWebServiceCache() error {
var err error
c.serviceCachePerfDataCollector, err = perfdata.NewCollector("Web Service Cache", perfdata.InstancesAll, []string{
serviceCacheActiveFlushedEntries,
serviceCacheCurrentFileCacheMemoryUsage,
serviceCacheMaximumFileCacheMemoryUsage,
serviceCacheFileCacheFlushesTotal,
serviceCacheFileCacheHitsTotal,
serviceCacheFileCacheMissesTotal,
serviceCacheFilesCached,
serviceCacheFilesCachedTotal,
serviceCacheFilesFlushedTotal,
serviceCacheURICacheFlushesTotal,
serviceCacheURICacheFlushesTotalKernel,
serviceCacheURIsFlushedTotalKernel,
serviceCacheURICacheHitsTotal,
serviceCacheURICacheHitsTotalKernel,
serviceCacheURICacheMissesTotal,
serviceCacheURICacheMissesTotalKernel,
serviceCacheURIsCached,
serviceCacheURIsCachedKernel,
serviceCacheURIsCachedTotal,
serviceCacheURIsCachedTotalKernel,
serviceCacheURIsFlushedTotal,
serviceCacheMetaDataCacheHits,
serviceCacheMetaDataCacheMisses,
serviceCacheMetadataCached,
serviceCacheMetadataCacheFlushes,
serviceCacheMetadataCachedTotal,
serviceCacheMetadataFlushedTotal,
serviceCacheOutputCacheActiveFlushedItems,
serviceCacheOutputCacheItems,
serviceCacheOutputCacheMemoryUsage,
serviceCacheOutputCacheHitsTotal,
serviceCacheOutputCacheMissesTotal,
serviceCacheOutputCacheFlushedItemsTotal,
serviceCacheOutputCacheFlushesTotal,
})
c.serviceCachePerfDataCollector, err = pdh.NewCollector[perfDataCounterServiceCache]("Web Service Cache", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create Web Service Cache collector: %w", err)
}
@@ -314,199 +286,199 @@ func (c *Collector) buildWebServiceCache() error {
}
func (c *Collector) collectWebServiceCache(ch chan<- prometheus.Metric) error {
perfData, err := c.serviceCachePerfDataCollector.Collect()
err := c.serviceCachePerfDataCollector.Collect(&c.perfDataObjectServiceCache)
if err != nil {
return fmt.Errorf("failed to collect Web Service Cache metrics: %w", err)
}
deduplicateIISNames(perfData)
deduplicateIISNames(c.perfDataObjectServiceCache)
for name, app := range perfData {
if c.config.SiteExclude.MatchString(name) || !c.config.SiteInclude.MatchString(name) {
for _, data := range c.perfDataObjectServiceCache {
if c.config.SiteExclude.MatchString(data.Name) || !c.config.SiteInclude.MatchString(data.Name) {
continue
}
ch <- prometheus.MustNewConstMetric(
c.serviceCacheActiveFlushedEntries,
prometheus.GaugeValue,
app[serviceCacheActiveFlushedEntries].FirstValue,
data.ServiceCacheActiveFlushedEntries,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheCurrentFileCacheMemoryUsage,
prometheus.GaugeValue,
app[serviceCacheCurrentFileCacheMemoryUsage].FirstValue,
data.ServiceCacheCurrentFileCacheMemoryUsage,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheMaximumFileCacheMemoryUsage,
prometheus.CounterValue,
app[serviceCacheMaximumFileCacheMemoryUsage].FirstValue,
data.ServiceCacheMaximumFileCacheMemoryUsage,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheFileCacheFlushesTotal,
prometheus.CounterValue,
app[serviceCacheFileCacheFlushesTotal].FirstValue,
data.ServiceCacheFileCacheFlushesTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheFileCacheQueriesTotal,
prometheus.CounterValue,
app[serviceCacheFileCacheHitsTotal].FirstValue+app[serviceCacheFileCacheMissesTotal].FirstValue,
data.ServiceCacheFileCacheHitsTotal+data.ServiceCacheFileCacheMissesTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheFileCacheHitsTotal,
prometheus.CounterValue,
app[serviceCacheFileCacheHitsTotal].FirstValue,
data.ServiceCacheFileCacheHitsTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheFilesCached,
prometheus.GaugeValue,
app[serviceCacheFilesCached].FirstValue,
data.ServiceCacheFilesCached,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheFilesCachedTotal,
prometheus.CounterValue,
app[serviceCacheFilesCachedTotal].FirstValue,
data.ServiceCacheFilesCachedTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheFilesFlushedTotal,
prometheus.CounterValue,
app[serviceCacheFilesFlushedTotal].FirstValue,
data.ServiceCacheFilesFlushedTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURICacheFlushesTotal,
prometheus.CounterValue,
app[serviceCacheURICacheFlushesTotal].FirstValue,
data.ServiceCacheURICacheFlushesTotal,
"user",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURICacheFlushesTotal,
prometheus.CounterValue,
app[serviceCacheURICacheFlushesTotalKernel].FirstValue,
data.ServiceCacheURICacheFlushesTotalKernel,
"kernel",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURICacheQueriesTotal,
prometheus.CounterValue,
app[serviceCacheURICacheHitsTotal].FirstValue+app[serviceCacheURICacheMissesTotal].FirstValue,
data.ServiceCacheURICacheHitsTotal+data.ServiceCacheURICacheMissesTotal,
"user",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURICacheQueriesTotal,
prometheus.CounterValue,
app[serviceCacheURICacheHitsTotalKernel].FirstValue+app[serviceCacheURICacheMissesTotalKernel].FirstValue,
data.ServiceCacheURICacheHitsTotalKernel+data.ServiceCacheURICacheMissesTotalKernel,
"kernel",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURICacheHitsTotal,
prometheus.CounterValue,
app[serviceCacheURICacheHitsTotal].FirstValue,
data.ServiceCacheURICacheHitsTotal,
"user",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURICacheHitsTotal,
prometheus.CounterValue,
app[serviceCacheURICacheHitsTotalKernel].FirstValue,
data.ServiceCacheURICacheHitsTotalKernel,
"kernel",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURIsCached,
prometheus.GaugeValue,
app[serviceCacheURIsCached].FirstValue,
data.ServiceCacheURIsCached,
"user",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURIsCached,
prometheus.GaugeValue,
app[serviceCacheURIsCachedKernel].FirstValue,
data.ServiceCacheURIsCachedKernel,
"kernel",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURIsCachedTotal,
prometheus.CounterValue,
app[serviceCacheURIsCachedTotal].FirstValue,
data.ServiceCacheURIsCachedTotal,
"user",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURIsCachedTotal,
prometheus.CounterValue,
app[serviceCacheURIsCachedTotalKernel].FirstValue,
data.ServiceCacheURIsCachedTotalKernel,
"kernel",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURIsFlushedTotal,
prometheus.CounterValue,
app[serviceCacheURIsFlushedTotal].FirstValue,
data.ServiceCacheURIsFlushedTotal,
"user",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheURIsFlushedTotal,
prometheus.CounterValue,
app[serviceCacheURIsFlushedTotalKernel].FirstValue,
data.ServiceCacheURIsFlushedTotalKernel,
"kernel",
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheMetadataCached,
prometheus.GaugeValue,
app[serviceCacheMetadataCached].FirstValue,
data.ServiceCacheMetadataCached,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheMetadataCacheFlushes,
prometheus.CounterValue,
app[serviceCacheMetadataCacheFlushes].FirstValue,
data.ServiceCacheMetadataCacheFlushes,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheMetadataCacheQueriesTotal,
prometheus.CounterValue,
app[serviceCacheMetaDataCacheHits].FirstValue+app[serviceCacheMetaDataCacheMisses].FirstValue,
data.ServiceCacheMetaDataCacheHits+data.ServiceCacheMetaDataCacheMisses,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheMetadataCacheHitsTotal,
prometheus.CounterValue,
0, // app[serviceCacheMetadataCacheHitsTotal].FirstValue,
0, // data.ServiceCacheMetadataCacheHitsTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheMetadataCachedTotal,
prometheus.CounterValue,
app[serviceCacheMetadataCachedTotal].FirstValue,
data.ServiceCacheMetadataCachedTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheMetadataFlushedTotal,
prometheus.CounterValue,
app[serviceCacheMetadataFlushedTotal].FirstValue,
data.ServiceCacheMetadataFlushedTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheOutputCacheActiveFlushedItems,
prometheus.CounterValue,
app[serviceCacheOutputCacheActiveFlushedItems].FirstValue,
data.ServiceCacheOutputCacheActiveFlushedItems,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheOutputCacheItems,
prometheus.CounterValue,
app[serviceCacheOutputCacheItems].FirstValue,
data.ServiceCacheOutputCacheItems,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheOutputCacheMemoryUsage,
prometheus.CounterValue,
app[serviceCacheOutputCacheMemoryUsage].FirstValue,
data.ServiceCacheOutputCacheMemoryUsage,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheOutputCacheQueriesTotal,
prometheus.CounterValue,
app[serviceCacheOutputCacheHitsTotal].FirstValue+app[serviceCacheOutputCacheMissesTotal].FirstValue,
data.ServiceCacheOutputCacheHitsTotal+data.ServiceCacheOutputCacheMissesTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheOutputCacheHitsTotal,
prometheus.CounterValue,
app[serviceCacheOutputCacheHitsTotal].FirstValue,
data.ServiceCacheOutputCacheHitsTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheOutputCacheFlushedItemsTotal,
prometheus.CounterValue,
app[serviceCacheOutputCacheFlushedItemsTotal].FirstValue,
data.ServiceCacheOutputCacheFlushedItemsTotal,
)
ch <- prometheus.MustNewConstMetric(
c.serviceCacheOutputCacheFlushesTotal,
prometheus.CounterValue,
app[serviceCacheOutputCacheFlushesTotal].FirstValue,
data.ServiceCacheOutputCacheFlushesTotal,
)
}