839 lines
26 KiB
Go
839 lines
26 KiB
Go
// +build windows
|
|
|
|
package collector
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/prometheus/common/log"
|
|
"gopkg.in/alecthomas/kingpin.v2"
|
|
)
|
|
|
|
var dfsrEnabledCollectors = kingpin.Flag("collectors.dfsr.sources-enabled", "Comma-seperated list of DFSR Perflib sources to use.").Default("connection,folder,volume").String()
|
|
|
|
func init() {
|
|
log.Info("dfsr collector is in an experimental state! Metrics for this collector have not been tested.")
|
|
// Perflib sources are dynamic, depending on the enabled child collectors
|
|
var perflibDependencies []string
|
|
for _, source := range expandEnabledChildCollectors(*dfsrEnabledCollectors) {
|
|
perflibDependencies = append(perflibDependencies, dfsrGetPerfObjectName(source))
|
|
}
|
|
|
|
registerCollector("dfsr", NewDFSRCollector, perflibDependencies...)
|
|
}
|
|
|
|
// DFSRCollector contains the metric and state data of the DFSR collectors.
|
|
type DFSRCollector struct {
|
|
// Meta
|
|
dfsrScrapeDurationDesc *prometheus.Desc
|
|
dfsrScrapeSuccessDesc *prometheus.Desc
|
|
|
|
// Connection source
|
|
ConnectionBandwidthSavingsUsingDFSReplicationTotal *prometheus.Desc
|
|
ConnectionBytesReceivedTotal *prometheus.Desc
|
|
ConnectionCompressedSizeOfFilesReceivedTotal *prometheus.Desc
|
|
ConnectionFilesReceivedTotal *prometheus.Desc
|
|
ConnectionRDCBytesReceivedTotal *prometheus.Desc
|
|
ConnectionRDCCompressedSizeOfFilesReceivedTotal *prometheus.Desc
|
|
ConnectionRDCSizeOfFilesReceivedTotal *prometheus.Desc
|
|
ConnectionRDCNumberofFilesReceivedTotal *prometheus.Desc
|
|
ConnectionSizeOfFilesReceivedTotal *prometheus.Desc
|
|
|
|
// Folder source
|
|
FolderBandwidthSavingsUsingDFSReplicationTotal *prometheus.Desc
|
|
FolderCompressedSizeOfFilesReceivedTotal *prometheus.Desc
|
|
FolderConflictBytesCleanedupTotal *prometheus.Desc
|
|
FolderConflictBytesGeneratedTotal *prometheus.Desc
|
|
FolderConflictFilesCleanedUpTotal *prometheus.Desc
|
|
FolderConflictFilesGeneratedTotal *prometheus.Desc
|
|
FolderConflictFolderCleanupsCompletedTotal *prometheus.Desc
|
|
FolderConflictSpaceInUse *prometheus.Desc
|
|
FolderDeletedSpaceInUse *prometheus.Desc
|
|
FolderDeletedBytesCleanedUpTotal *prometheus.Desc
|
|
FolderDeletedBytesGeneratedTotal *prometheus.Desc
|
|
FolderDeletedFilesCleanedUpTotal *prometheus.Desc
|
|
FolderDeletedFilesGeneratedTotal *prometheus.Desc
|
|
FolderFileInstallsRetriedTotal *prometheus.Desc
|
|
FolderFileInstallsSucceededTotal *prometheus.Desc
|
|
FolderFilesReceivedTotal *prometheus.Desc
|
|
FolderRDCBytesReceivedTotal *prometheus.Desc
|
|
FolderRDCCompressedSizeOfFilesReceivedTotal *prometheus.Desc
|
|
FolderRDCNumberofFilesReceivedTotal *prometheus.Desc
|
|
FolderRDCSizeOfFilesReceivedTotal *prometheus.Desc
|
|
FolderSizeOfFilesReceivedTotal *prometheus.Desc
|
|
FolderStagingSpaceInUse *prometheus.Desc
|
|
FolderStagingBytesCleanedUpTotal *prometheus.Desc
|
|
FolderStagingBytesGeneratedTotal *prometheus.Desc
|
|
FolderStagingFilesCleanedUpTotal *prometheus.Desc
|
|
FolderStagingFilesGeneratedTotal *prometheus.Desc
|
|
FolderUpdatesDroppedTotal *prometheus.Desc
|
|
|
|
// Volume source
|
|
VolumeDatabaseLookupsTotal *prometheus.Desc
|
|
VolumeDatabaseCommitsTotal *prometheus.Desc
|
|
VolumeUSNJournalUnreadPercentage *prometheus.Desc
|
|
VolumeUSNJournalRecordsAcceptedTotal *prometheus.Desc
|
|
VolumeUSNJournalRecordsReadTotal *prometheus.Desc
|
|
|
|
// Map of child collector functions used during collection
|
|
dfsrChildCollectors []dfsrCollectorFunc
|
|
}
|
|
|
|
type dfsrCollectorFunc func(ctx *ScrapeContext, ch chan<- prometheus.Metric) error
|
|
|
|
// Map Perflib sources to DFSR collector names
|
|
// E.G. volume -> DFS Replication Service Volumes
|
|
func dfsrGetPerfObjectName(collector string) string {
|
|
prefix := "DFS "
|
|
suffix := ""
|
|
switch collector {
|
|
case "connection":
|
|
suffix = "Replication Connections"
|
|
case "folder":
|
|
suffix = "Replicated Folders"
|
|
case "volume":
|
|
suffix = "Replication Service Volumes"
|
|
}
|
|
return (prefix + suffix)
|
|
}
|
|
|
|
// NewDFSRCollector is registered
|
|
func NewDFSRCollector() (Collector, error) {
|
|
const subsystem = "dfsr"
|
|
|
|
enabled := expandEnabledChildCollectors(*dfsrEnabledCollectors)
|
|
perfCounters := make([]string, 0, len(enabled))
|
|
for _, c := range enabled {
|
|
perfCounters = append(perfCounters, dfsrGetPerfObjectName(c))
|
|
}
|
|
addPerfCounterDependencies(subsystem, perfCounters)
|
|
|
|
dfsrCollector := DFSRCollector{
|
|
// meta
|
|
dfsrScrapeDurationDesc: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "collector_duration_seconds"),
|
|
"windows_exporter: Duration of an dfsr child collection.",
|
|
[]string{"collector"},
|
|
nil,
|
|
),
|
|
dfsrScrapeSuccessDesc: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "collector_success"),
|
|
"windows_exporter: Whether a dfsr child collector was successful.",
|
|
[]string{"collector"},
|
|
nil,
|
|
),
|
|
|
|
// Connection
|
|
ConnectionBandwidthSavingsUsingDFSReplicationTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bandwidth_savings_using_dfs_replication_bytes_total"),
|
|
"Total amount of bandwidth savings using DFS Replication for this connection, in bytes",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
ConnectionBytesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bytes_received_total"),
|
|
"Total bytes received for connection",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
ConnectionCompressedSizeOfFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "compressed_size_of_files_received_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
ConnectionFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "received_files_total"),
|
|
"Total number of files receieved for connection",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
ConnectionRDCBytesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "rdc_received_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
ConnectionRDCCompressedSizeOfFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "rdc_compressed_size_of_files_received_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
ConnectionRDCNumberofFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "rdc_received_files_total"),
|
|
"Total number of Remote Differential Compression files received",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
ConnectionRDCSizeOfFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "rdc_size_of_received_files_bytes_total"),
|
|
"Total size of received Remote Differential Compression files, in bytes.",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
ConnectionSizeOfFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "files_received_bytes_total"),
|
|
"Total size of files received, in bytes",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
// Folder
|
|
FolderBandwidthSavingsUsingDFSReplicationTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "bandwidth_savings_using_dfs_replication_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderCompressedSizeOfFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "compressed_size_of_files_received_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderConflictBytesCleanedupTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "conflict_cleaned_up_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderConflictBytesGeneratedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "conflict_generated_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderConflictFilesCleanedUpTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "conflict_cleaned_up_files_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderConflictFilesGeneratedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "conflict_generated_files_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderConflictFolderCleanupsCompletedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "conflict_folder_cleanups_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderConflictSpaceInUse: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "conflict_space_in_use_bytes"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderDeletedSpaceInUse: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "deleted_space_in_use_bytes"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderDeletedBytesCleanedUpTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "deleted_cleaned_up_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderDeletedBytesGeneratedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "deleted_generated_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderDeletedFilesCleanedUpTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "deleted_cleaned_up_files_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderDeletedFilesGeneratedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "deleted_generated_files_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderFileInstallsRetriedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "file_installs_retried_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderFileInstallsSucceededTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "file_installs_succeeded_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "received_files_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderRDCBytesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "rdc_received_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderRDCCompressedSizeOfFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "rdc_compressed_size_of_files_received_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderRDCNumberofFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "rdc_received_files_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderRDCSizeOfFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "rdc_files_received_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderSizeOfFilesReceivedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "files_received_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderStagingSpaceInUse: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "staging_space_in_use_bytes"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderStagingBytesCleanedUpTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "staging_cleaned_up_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderStagingBytesGeneratedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "staging_generated_bytes_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderStagingFilesCleanedUpTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "staging_cleaned_up_files_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderStagingFilesGeneratedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "staging_generated_files_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
FolderUpdatesDroppedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "dropped_updates_total"),
|
|
"",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
// Volume
|
|
VolumeDatabaseCommitsTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "database_commits_total"),
|
|
"Total number of DFSR Volume database commits",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
VolumeDatabaseLookupsTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "database_lookups_total"),
|
|
"Total number of DFSR Volume database lookups",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
VolumeUSNJournalUnreadPercentage: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "usn_journal_unread_percentage"),
|
|
"Percentage of DFSR Volume USN journal records that are unread",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
VolumeUSNJournalRecordsAcceptedTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "usn_journal_accepted_records_total"),
|
|
"Total number of USN journal records accepted",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
|
|
VolumeUSNJournalRecordsReadTotal: prometheus.NewDesc(
|
|
prometheus.BuildFQName(Namespace, subsystem, "usn_journal_read_records_total"),
|
|
"Total number of DFSR Volume USN journal records read",
|
|
[]string{"name"},
|
|
nil,
|
|
),
|
|
}
|
|
|
|
dfsrCollector.dfsrChildCollectors = dfsrCollector.getDFSRChildCollectors(enabled)
|
|
|
|
return &dfsrCollector, nil
|
|
}
|
|
|
|
// Maps enabled child collectors names to their relevant collection function,
|
|
// for use in DFSRCollector.Collect()
|
|
func (c *DFSRCollector) getDFSRChildCollectors(enabledCollectors []string) []dfsrCollectorFunc {
|
|
var dfsrCollectors []dfsrCollectorFunc
|
|
for _, collector := range enabledCollectors {
|
|
switch collector {
|
|
case "connection":
|
|
dfsrCollectors = append(dfsrCollectors, c.collectConnection)
|
|
case "folder":
|
|
dfsrCollectors = append(dfsrCollectors, c.collectFolder)
|
|
case "volume":
|
|
dfsrCollectors = append(dfsrCollectors, c.collectVolume)
|
|
}
|
|
}
|
|
|
|
return dfsrCollectors
|
|
}
|
|
|
|
// Collect implements the Collector interface.
|
|
// Sends metric values for each metric to the provided prometheus Metric channel.
|
|
func (c *DFSRCollector) Collect(ctx *ScrapeContext, ch chan<- prometheus.Metric) error {
|
|
for _, fn := range c.dfsrChildCollectors {
|
|
err := fn(ctx, ch)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Child-specific functions are provided to this function and executed concurrently.
|
|
// Child collector metrics & results are reported.
|
|
func (c *DFSRCollector) execute(ctx *ScrapeContext, name string, fn dfsrCollectorFunc, ch chan<- prometheus.Metric) error {
|
|
// Child collector function called here, sends metric data back through channel
|
|
err := fn(ctx, ch)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return err
|
|
}
|
|
|
|
// Perflib: "DFS Replication Service Connections"
|
|
type PerflibDFSRConnection struct {
|
|
Name string
|
|
|
|
BandwidthSavingsUsingDFSReplicationTotal float64 `perflib:"Bandwidth Savings Using DFS Replication"`
|
|
BytesReceivedTotal float64 `perflib:"Total Bytes Received"`
|
|
CompressedSizeOfFilesReceivedTotal float64 `perflib:"Compressed Size of Files Received"`
|
|
FilesReceivedTotal float64 `perflib:"Total Files Received"`
|
|
RDCBytesReceivedTotal float64 `perflib:"RDC Bytes Received"`
|
|
RDCCompressedSizeOfFilesReceivedTotal float64 `perflib:"RDC Compressed Size of Files Received"`
|
|
RDCNumberofFilesReceivedTotal float64 `perflib:"RDC Number of Files Received"`
|
|
RDCSizeOfFilesReceivedTotal float64 `perflib:"RDC Size of Files Received"`
|
|
SizeOfFilesReceivedTotal float64 `perflib:"Size of Files Received"`
|
|
}
|
|
|
|
func (c *DFSRCollector) collectConnection(ctx *ScrapeContext, ch chan<- prometheus.Metric) error {
|
|
var dst []PerflibDFSRConnection
|
|
if err := unmarshalObject(ctx.perfObjects["DFS Replication Connections"], &dst); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, connection := range dst {
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionBandwidthSavingsUsingDFSReplicationTotal,
|
|
prometheus.CounterValue,
|
|
connection.BandwidthSavingsUsingDFSReplicationTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionBytesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
connection.BytesReceivedTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionCompressedSizeOfFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
connection.CompressedSizeOfFilesReceivedTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
connection.FilesReceivedTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionRDCBytesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
connection.RDCBytesReceivedTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionRDCCompressedSizeOfFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
connection.RDCCompressedSizeOfFilesReceivedTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionRDCSizeOfFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
connection.RDCSizeOfFilesReceivedTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionRDCNumberofFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
connection.RDCNumberofFilesReceivedTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.ConnectionSizeOfFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
connection.SizeOfFilesReceivedTotal,
|
|
connection.Name,
|
|
)
|
|
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Perflib: "DFS Replicated Folder"
|
|
type PerflibDFSRFolder struct {
|
|
Name string
|
|
|
|
BandwidthSavingsUsingDFSReplicationTotal float64 `perflib:"Bandwidth Savings Using DFS Replication"`
|
|
CompressedSizeOfFilesReceivedTotal float64 `perflib:"Compressed Size of Files Received"`
|
|
ConflictBytesCleanedupTotal float64 `perflib:"Conflict Bytes Cleaned Up"`
|
|
ConflictBytesGeneratedTotal float64 `perflib:"Conflict Bytes Generated"`
|
|
ConflictFilesCleanedUpTotal float64 `perflib:"Conflict Files Cleaned Up"`
|
|
ConflictFilesGeneratedTotal float64 `perflib:"Conflict Files Generated"`
|
|
ConflictFolderCleanupsCompletedTotal float64 `perflib:"Conflict Folder Cleanups Completed"`
|
|
ConflictSpaceInUse float64 `perflib:"Conflict Space In Use"`
|
|
DeletedSpaceInUse float64 `perflib:"Deleted Space In Use"`
|
|
DeletedBytesCleanedUpTotal float64 `perflib:"Deleted Bytes Cleaned Up"`
|
|
DeletedBytesGeneratedTotal float64 `perflib:"Deleted Bytes Generated"`
|
|
DeletedFilesCleanedUpTotal float64 `perflib:"Deleted Files Cleaned Up"`
|
|
DeletedFilesGeneratedTotal float64 `perflib:"Deleted Files Generated"`
|
|
FileInstallsRetriedTotal float64 `perflib:"File Installs Retried"`
|
|
FileInstallsSucceededTotal float64 `perflib:"File Installs Succeeded"`
|
|
FilesReceivedTotal float64 `perflib:"Total Files Received"`
|
|
RDCBytesReceivedTotal float64 `perflib:"RDC Bytes Received"`
|
|
RDCCompressedSizeOfFilesReceivedTotal float64 `perflib:"RDC Compressed Size of Files Received"`
|
|
RDCNumberofFilesReceivedTotal float64 `perflib:"RDC Number of Files Received"`
|
|
RDCSizeOfFilesReceivedTotal float64 `perflib:"RDC Size of Files Received"`
|
|
SizeOfFilesReceivedTotal float64 `perflib:"Size of Files Received"`
|
|
StagingSpaceInUse float64 `perflib:"Staging Space In Use"`
|
|
StagingBytesCleanedUpTotal float64 `perflib:"Staging Bytes Cleaned Up"`
|
|
StagingBytesGeneratedTotal float64 `perflib:"Staging Bytes Generated"`
|
|
StagingFilesCleanedUpTotal float64 `perflib:"Staging Files Cleaned Up"`
|
|
StagingFilesGeneratedTotal float64 `perflib:"Staging Files Generated"`
|
|
UpdatesDroppedTotal float64 `perflib:"Updates Dropped"`
|
|
}
|
|
|
|
func (c *DFSRCollector) collectFolder(ctx *ScrapeContext, ch chan<- prometheus.Metric) error {
|
|
var dst []PerflibDFSRFolder
|
|
if err := unmarshalObject(ctx.perfObjects["DFS Replicated Folders"], &dst); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, folder := range dst {
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderBandwidthSavingsUsingDFSReplicationTotal,
|
|
prometheus.CounterValue,
|
|
folder.BandwidthSavingsUsingDFSReplicationTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderCompressedSizeOfFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
folder.CompressedSizeOfFilesReceivedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderConflictBytesCleanedupTotal,
|
|
prometheus.CounterValue,
|
|
folder.ConflictBytesCleanedupTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderConflictBytesGeneratedTotal,
|
|
prometheus.CounterValue,
|
|
folder.ConflictBytesGeneratedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderConflictFilesCleanedUpTotal,
|
|
prometheus.CounterValue,
|
|
folder.ConflictFilesCleanedUpTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderConflictFilesGeneratedTotal,
|
|
prometheus.CounterValue,
|
|
folder.ConflictFilesGeneratedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderConflictFolderCleanupsCompletedTotal,
|
|
prometheus.CounterValue,
|
|
folder.ConflictFolderCleanupsCompletedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderConflictSpaceInUse,
|
|
prometheus.GaugeValue,
|
|
folder.ConflictSpaceInUse,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderDeletedSpaceInUse,
|
|
prometheus.GaugeValue,
|
|
folder.DeletedSpaceInUse,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderDeletedBytesCleanedUpTotal,
|
|
prometheus.CounterValue,
|
|
folder.DeletedBytesCleanedUpTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderDeletedBytesGeneratedTotal,
|
|
prometheus.CounterValue,
|
|
folder.DeletedBytesGeneratedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderDeletedFilesCleanedUpTotal,
|
|
prometheus.CounterValue,
|
|
folder.DeletedFilesCleanedUpTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderDeletedFilesGeneratedTotal,
|
|
prometheus.CounterValue,
|
|
folder.DeletedFilesGeneratedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderFileInstallsRetriedTotal,
|
|
prometheus.CounterValue,
|
|
folder.FileInstallsRetriedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderFileInstallsSucceededTotal,
|
|
prometheus.CounterValue,
|
|
folder.FileInstallsSucceededTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
folder.FilesReceivedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderRDCBytesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
folder.RDCBytesReceivedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderRDCCompressedSizeOfFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
folder.RDCCompressedSizeOfFilesReceivedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderRDCNumberofFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
folder.RDCNumberofFilesReceivedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderRDCSizeOfFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
folder.RDCSizeOfFilesReceivedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderSizeOfFilesReceivedTotal,
|
|
prometheus.CounterValue,
|
|
folder.SizeOfFilesReceivedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderStagingSpaceInUse,
|
|
prometheus.GaugeValue,
|
|
folder.StagingSpaceInUse,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderStagingBytesCleanedUpTotal,
|
|
prometheus.CounterValue,
|
|
folder.StagingBytesCleanedUpTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderStagingBytesGeneratedTotal,
|
|
prometheus.CounterValue,
|
|
folder.StagingBytesGeneratedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderStagingFilesCleanedUpTotal,
|
|
prometheus.CounterValue,
|
|
folder.StagingFilesCleanedUpTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderStagingFilesGeneratedTotal,
|
|
prometheus.CounterValue,
|
|
folder.StagingFilesGeneratedTotal,
|
|
folder.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.FolderUpdatesDroppedTotal,
|
|
prometheus.CounterValue,
|
|
folder.UpdatesDroppedTotal,
|
|
folder.Name,
|
|
)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Perflib: "DFS Replication Service Volumes"
|
|
type PerflibDFSRVolume struct {
|
|
Name string
|
|
|
|
DatabaseCommitsTotal float64 `perflib:"Database Commits"`
|
|
DatabaseLookupsTotal float64 `perflib:"Database Lookups"`
|
|
USNJournalRecordsReadTotal float64 `perflib:"USN Journal Records Read"`
|
|
USNJournalRecordsAcceptedTotal float64 `perflib:"USN Journal Records Accepted"`
|
|
USNJournalUnreadPercentage float64 `perflib:"USN Journal Records Unread Percentage"`
|
|
}
|
|
|
|
func (c *DFSRCollector) collectVolume(ctx *ScrapeContext, ch chan<- prometheus.Metric) error {
|
|
var dst []PerflibDFSRVolume
|
|
if err := unmarshalObject(ctx.perfObjects["DFS Replication Service Volumes"], &dst); err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, volume := range dst {
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.VolumeDatabaseLookupsTotal,
|
|
prometheus.CounterValue,
|
|
volume.DatabaseLookupsTotal,
|
|
volume.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.VolumeDatabaseCommitsTotal,
|
|
prometheus.CounterValue,
|
|
volume.DatabaseCommitsTotal,
|
|
volume.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.VolumeUSNJournalRecordsAcceptedTotal,
|
|
prometheus.CounterValue,
|
|
volume.USNJournalRecordsAcceptedTotal,
|
|
volume.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.VolumeUSNJournalRecordsReadTotal,
|
|
prometheus.CounterValue,
|
|
volume.USNJournalRecordsReadTotal,
|
|
volume.Name,
|
|
)
|
|
|
|
ch <- prometheus.MustNewConstMetric(
|
|
c.VolumeUSNJournalUnreadPercentage,
|
|
prometheus.GaugeValue,
|
|
volume.USNJournalUnreadPercentage,
|
|
volume.Name,
|
|
)
|
|
|
|
}
|
|
return nil
|
|
}
|