dfsr: publish bandwidth savings and USN journal unread as ratios (#2714)

Signed-off-by: Jan-Otto Kröpke <mail@jkroepke.de>
This commit is contained in:
Jan-Otto Kröpke
2026-10-15 18:31:17 +00:00
committed by GitHub
parent 49c955c5a5
commit b36429d07e
6 changed files with 252 additions and 97 deletions
+7 -1
View File
@@ -17,7 +17,7 @@ Most installations need no changes. Go through the checklist below and read the
| You use the `container` collector | Replace `containerd-state-dir` with `cri-endpoint` | [container collector](#container-collector) |
| You query `windows_gpu_info` | Replace the `phys` label with `device_number` | [GPU collector](#gpu-collector) |
| You alert on BitLocker status | Replace `status="disabled"` with `status="off"` | [BitLocker status](#bitlocker-status) |
| You query Active Directory latency or security descriptor propagation, Hyper-V, logical disk queue, cache, IIS output cache, memory, RemoteFX, scheduled task, SMB server share or terminal services metrics | Update queries | [Renamed, deprecated and retyped metrics](#renamed-deprecated-and-retyped-metrics) |
| You query Active Directory latency or security descriptor propagation, DFSR, Hyper-V, logical disk queue, cache, IIS output cache, memory, RemoteFX, scheduled task, SMB server share or terminal services metrics | Update queries | [Renamed, deprecated and retyped metrics](#renamed-deprecated-and-retyped-metrics) |
| You enable the `scheduled_task` collector and use tasks below `\Microsoft\` or missed runs | Set `--collector.scheduled_task.exclude` or `missed-runs` | [scheduled_task collector](#scheduled_task-collector) |
| You chart SQL Server latencies, SQL Server lock counts, DHCP denials, AD LSA writes, AD computer creations or RemoteFX skipped frames | Expect corrected values | [Corrected values](#corrected-values) |
| You enable the `hyperv` or `mscluster` collector | Check the new default sub-collectors | [New default sub-collectors](#new-default-sub-collectors) |
@@ -243,10 +243,16 @@ Renamed:
| `windows_ad_security_descriptor_propagation_access_wait_total_seconds` | `windows_ad_security_descriptor_propagation_average_exclusion_time_seconds` | Now in seconds, was the raw millisecond average; it is an average, not a total |
| `windows_ad_security_descriptor_propagation_events_total` | `windows_ad_security_descriptor_propagation_suboperations_total` | Same value, it counts sub-operations, not events |
| `windows_ad_security_descriptor_propagation_items_queued_total` | `windows_ad_security_descriptor_propagation_items_queued` | Now a gauge, query it without `rate()` |
| `windows_dfsr_connection_bandwidth_savings_using_dfs_replication_bytes_total` | `windows_dfsr_connection_bandwidth_savings_using_dfs_replication_ratio` | Now a gauge, 0-1 instead of percent |
| `windows_dfsr_folder_bandwidth_savings_using_dfs_replication_bytes_total` | `windows_dfsr_folder_bandwidth_savings_using_dfs_replication_ratio` | Now a gauge, 0-1 instead of percent |
| `windows_dfsr_volume_usn_journal_unread_percentage` | `windows_dfsr_volume_usn_journal_unread_ratio` | 0-1 instead of percent |
The RemoteFX loss, FEC and retransmission gauges were not percentages. They exported the raw numerator of a Windows sample fraction, a running count that only grows.
The numerator and its base are now two counters. Get the ratio with `rate(windows_remote_fx_net_lost_packets_total[5m]) / rate(windows_remote_fx_net_loss_sampled_packets_total[5m])`, and likewise with `windows_remote_fx_net_fec_packets_total` / `windows_remote_fx_net_fec_sampled_packets_total` and `windows_remote_fx_net_retransmitted_packets_total` / `windows_remote_fx_net_retransmission_sampled_packets_total`.
The DFSR bandwidth savings metrics were never byte counts. Windows reports the share of bandwidth saved in percent, which 0.31 published as a byte counter.
Multiply the new ratios by 100 to get the old values; alert on `windows_dfsr_volume_usn_journal_unread_ratio` reaching `1` instead of `100`.
Removed:
| Metric | Reason |
+4 -4
View File
@@ -21,16 +21,16 @@ All sources are enabled by default
Name | Description | Type | Labels
-----|-------------|------|-------
`windows_dfsr_connection_bandwidth_savings_using_dfs_replication_bytes_total` | Total bandwidth (in bytes) saved by the DFS Replication service for this connection, using a combination of remote differential compression (RDC) and other compression technologies that minimize network bandwidth use. | counter | name
`windows_dfsr_connection_bandwidth_savings_using_dfs_replication_ratio` | Share of bandwidth (0-1) saved by the DFS Replication service for this connection, using a combination of remote differential compression (RDC) and other compression technologies, compared to transferring the files uncompressed. For example, `0.2` means DFS Replication used 20% less bandwidth. | gauge | name
`windows_dfsr_connection_bytes_received_total` | Total bytes received for connection | counter | name
`windows_dfsr_connection_compressed_size_of_files_received_bytes_total` | Total compressed size of files received on the connection, in bytes | counter | name
`windows_dfsr_connection_received_files_total` | Total number of files received for connection | counter | name
`windows_dfsr_connection_rdc_received_bytes_total` | Total bytes received on the connection while replicating files using Remote Differential Compression. This is the actual bytes received over the network without the networking protocol overhead | counter | name
`windows_dfsr_connection_rdc_compressed_size_of_received_files_bytes_total` | Total compressed size of files received with Remote Differential Compression. This is the number of bytes that would have been received had RDC not been used. This is not the actual number of bytes received over the network. | counter | name
`windows_dfsr_connection_rdc_compressed_size_of_received_files_bytes_total` | Total compressed size of files received with Remote Differential Compression on the connection, in bytes. This is the number of bytes that would have been received had RDC not been used. This is not the actual number of bytes received over the network. | counter | name
`windows_dfsr_connection_rdc_received_files_total` | Total number of files received using remote differential compression | counter | name
`windows_dfsr_connection_rdc_size_of_received_files_bytes_total` | Total uncompressed size of files received with remote differential compression, in bytes. This is the number of bytes that would have been received had neither compression nor RDC been used. This is not the actual number of bytes received over the network. | counter | name
`windows_dfsr_connection_files_received_bytes_total` | Total uncompressed size of files received on the connection, in bytes. This is the number of bytes that would have been received had DFS Replication compression not been used. | counter | name
`windows_dfsr_folder_bandwidth_savings_using_dfs_replication_bytes_total` | Total bandwidth (in bytes) saved by the DFS Replication service for this folder, using a combination of remote differential compression (RDC) and other compression technologies that minimize network bandwidth use. | counter | name
`windows_dfsr_folder_bandwidth_savings_using_dfs_replication_ratio` | Share of bandwidth (0-1) saved by the DFS Replication service for this replicated folder, using a combination of remote differential compression (RDC) and other compression technologies, compared to transferring the files uncompressed. For example, `0.2` means DFS Replication used 20% less bandwidth. | gauge | name
`windows_dfsr_folder_compressed_size_of_received_files_bytes_total` | Total compressed size of files received for this folder, in bytes | counter | name
`windows_dfsr_folder_conflict_cleaned_up_bytes_total` | Total size of conflict loser files and folders deleted from the Conflict and Deleted folder, in bytes. | counter | name
`windows_dfsr_folder_conflict_generated_bytes_total` | Total size of conflict loser files and folders moved to the Conflict and Deleted folder, in bytes. | counter | name
@@ -59,7 +59,7 @@ Name | Description | Type | Labels
`windows_dfsr_folder_dropped_updates_total` | Total number of redundant file replication update records that have been ignored by the DFS Replication service because they did not change the replicated file or folder. | counter | name
`windows_dfsr_volume_database_commits_total` | Total number of DFSR Volume database commits. | counter | name
`windows_dfsr_volume_database_lookups_total` | Total number of DFSR Volume database lookups. | counter | name
`windows_dfsr_volume_usn_journal_unread_percentage` | Percentage of DFSR Volume USN journal records that are unread. | gauge | name
`windows_dfsr_volume_usn_journal_unread_ratio` | Share (0-1) of the volume USN journal that the DFS Replication service has not read and processed yet. A journal wrap occurs when it reaches `1`. | gauge | name
`windows_dfsr_volume_usn_journal_accepted_records_total` | Total number of USN journal records accepted. | counter | name
`windows_dfsr_volume_usn_journal_read_records_total` | Total number of DFSR Volume USN journal records read. | counter | name
+6 -1
View File
@@ -15,7 +15,12 @@ provision DFSR. These notes were recorded on a single Windows Server 2025 DC.
- Gauges: `Staging/Conflict/Deleted Space In Use` (bytes),
`USN Journal Unread Percentage`, connection `Bytes Received Per Second`,
and `Bandwidth Savings Using DFS Replication`, which is a percentage
("a value of 20 indicates ... 20% less bandwidth"), not bytes.
("a value of 20 indicates ... 20% less bandwidth"), not bytes. The collector
publishes it and `USN Journal Unread Percentage` (0-100) as `_ratio`
gauges divided by 100.
- The `collect*Metrics` functions take rows, so tests can check names, types
and values through a registry without a live DFSR service
(`dfsr_internal_test.go`).
- Instances: folders are `<replicated folder>-{<GUID>}`, for example
`SYSVOL Share-{DD658FCA-D7AE-487D-8E75-67481CEBE108}`; volumes are drive
letters (`C:`). A DC without replication partner has no instance of
+71 -55
View File
@@ -55,7 +55,7 @@ type Collector struct {
perfDataObjectVolume []perfDataCounterValuesVolume
// connection source
connectionBandwidthSavingsUsingDFSReplicationTotal *prometheus.Desc
connectionBandwidthSavingsUsingDFSReplicationRatio *prometheus.Desc
connectionBytesReceivedTotal *prometheus.Desc
connectionCompressedSizeOfFilesReceivedTotal *prometheus.Desc
connectionFilesReceivedTotal *prometheus.Desc
@@ -66,7 +66,7 @@ type Collector struct {
connectionSizeOfFilesReceivedTotal *prometheus.Desc
// folder source
folderBandwidthSavingsUsingDFSReplicationTotal *prometheus.Desc
folderBandwidthSavingsUsingDFSReplicationRatio *prometheus.Desc
folderCompressedSizeOfFilesReceivedTotal *prometheus.Desc
folderConflictBytesCleanedUpTotal *prometheus.Desc
folderConflictBytesGeneratedTotal *prometheus.Desc
@@ -97,7 +97,7 @@ type Collector struct {
// volume source
volumeDatabaseLookupsTotal *prometheus.Desc
volumeDatabaseCommitsTotal *prometheus.Desc
volumeUSNJournalUnreadPercentage *prometheus.Desc
volumeUSNJournalUnreadRatio *prometheus.Desc
volumeUSNJournalRecordsAcceptedTotal *prometheus.Desc
volumeUSNJournalRecordsReadTotal *prometheus.Desc
}
@@ -173,10 +173,39 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
}
}
c.buildDescriptors()
var err error
if slices.Contains(c.config.CollectorsEnabled, "connection") {
c.perfDataCollectorConnection, err = pdh.NewCollector[perfDataCounterValuesConnection](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replication Connections", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create DFS Replication Connections collector: %w", err)
}
}
if slices.Contains(c.config.CollectorsEnabled, "folder") {
c.perfDataCollectorFolder, err = pdh.NewCollector[perfDataCounterValuesFolder](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replicated Folders", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create DFS Replicated Folders collector: %w", err)
}
}
if slices.Contains(c.config.CollectorsEnabled, "volume") {
c.perfDataCollectorVolume, err = pdh.NewCollector[perfDataCounterValuesVolume](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replication Service Volumes", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create DFS Replication Service Volumes collector: %w", err)
}
}
return nil
}
func (c *Collector) buildDescriptors() {
// connection
c.connectionBandwidthSavingsUsingDFSReplicationTotal = prometheus.NewDesc(
prometheus.BuildFQName(types.Namespace, Name, "connection_bandwidth_savings_using_dfs_replication_bytes_total"),
"Total bytes of bandwidth saved using DFS Replication for this connection",
c.connectionBandwidthSavingsUsingDFSReplicationRatio = prometheus.NewDesc(
prometheus.BuildFQName(types.Namespace, Name, "connection_bandwidth_savings_using_dfs_replication_ratio"),
"Share of bandwidth saved by DFS Replication for this connection using RDC and other compression, compared to transferring the files uncompressed (0-1)",
[]string{"name"},
nil,
)
@@ -211,7 +240,7 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
c.connectionRDCCompressedSizeOfFilesReceivedTotal = prometheus.NewDesc(
prometheus.BuildFQName(types.Namespace, Name, "connection_rdc_compressed_size_of_received_files_bytes_total"),
"Total uncompressed size of files received with Remote Differential Compression for connection",
"Total compressed size of files received with Remote Differential Compression on the connection, in bytes. This is the number of bytes that would have been received had RDC not been used",
[]string{"name"},
nil,
)
@@ -238,9 +267,9 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
)
// folder
c.folderBandwidthSavingsUsingDFSReplicationTotal = prometheus.NewDesc(
prometheus.BuildFQName(types.Namespace, Name, "folder_bandwidth_savings_using_dfs_replication_bytes_total"),
"Total bytes of bandwidth saved using DFS Replication for this folder",
c.folderBandwidthSavingsUsingDFSReplicationRatio = prometheus.NewDesc(
prometheus.BuildFQName(types.Namespace, Name, "folder_bandwidth_savings_using_dfs_replication_ratio"),
"Share of bandwidth saved by DFS Replication for this replicated folder using RDC and other compression, compared to transferring the files uncompressed (0-1)",
[]string{"name"},
nil,
)
@@ -442,9 +471,9 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
nil,
)
c.volumeUSNJournalUnreadPercentage = prometheus.NewDesc(
prometheus.BuildFQName(types.Namespace, Name, "volume_usn_journal_unread_percentage"),
"Percentage of DFSR volume USN journal records that are unread",
c.volumeUSNJournalUnreadRatio = prometheus.NewDesc(
prometheus.BuildFQName(types.Namespace, Name, "volume_usn_journal_unread_ratio"),
"Share of the volume USN journal that DFS Replication has not read and processed yet (0-1). A journal wrap occurs at 1",
[]string{"name"},
nil,
)
@@ -462,31 +491,6 @@ func (c *Collector) Build(logger *slog.Logger, _ *mi.Session) error {
[]string{"name"},
nil,
)
var err error
if slices.Contains(c.config.CollectorsEnabled, "connection") {
c.perfDataCollectorConnection, err = pdh.NewCollector[perfDataCounterValuesConnection](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replication Connections", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create DFS Replication Connections collector: %w", err)
}
}
if slices.Contains(c.config.CollectorsEnabled, "folder") {
c.perfDataCollectorFolder, err = pdh.NewCollector[perfDataCounterValuesFolder](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replicated Folders", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create DFS Replicated Folders collector: %w", err)
}
}
if slices.Contains(c.config.CollectorsEnabled, "volume") {
c.perfDataCollectorVolume, err = pdh.NewCollector[perfDataCounterValuesVolume](logger.With(slog.String("collector", Name)), pdh.CounterTypeRaw, "DFS Replication Service Volumes", pdh.InstancesAll)
if err != nil {
return fmt.Errorf("failed to create DFS Replication Service Volumes collector: %w", err)
}
}
return nil
}
// Collect implements the Collector interface.
@@ -515,13 +519,19 @@ func (c *Collector) collectPDHConnection(ch chan<- prometheus.Metric) error {
return fmt.Errorf("failed to collect DFS Replication Connections metrics: %w", err)
}
for _, connection := range c.perfDataObjectConnection {
c.collectConnectionMetrics(ch, c.perfDataObjectConnection)
return nil
}
func (c *Collector) collectConnectionMetrics(ch chan<- prometheus.Metric, rows []perfDataCounterValuesConnection) {
for _, connection := range rows {
name := connection.Name
ch <- prometheus.MustNewConstMetric(
c.connectionBandwidthSavingsUsingDFSReplicationTotal,
prometheus.CounterValue,
connection.BandwidthSavingsUsingDFSReplicationTotal,
c.connectionBandwidthSavingsUsingDFSReplicationRatio,
prometheus.GaugeValue,
connection.BandwidthSavingsUsingDFSReplicationPercent/100,
name,
)
@@ -581,8 +591,6 @@ func (c *Collector) collectPDHConnection(ch chan<- prometheus.Metric) error {
name,
)
}
return nil
}
func (c *Collector) collectPDHFolder(ch chan<- prometheus.Metric) error {
@@ -591,13 +599,19 @@ func (c *Collector) collectPDHFolder(ch chan<- prometheus.Metric) error {
return fmt.Errorf("failed to collect DFS Replicated Folders metrics: %w", err)
}
for _, folder := range c.perfDataObjectFolder {
c.collectFolderMetrics(ch, c.perfDataObjectFolder)
return nil
}
func (c *Collector) collectFolderMetrics(ch chan<- prometheus.Metric, rows []perfDataCounterValuesFolder) {
for _, folder := range rows {
name := folder.Name
ch <- prometheus.MustNewConstMetric(
c.folderBandwidthSavingsUsingDFSReplicationTotal,
prometheus.CounterValue,
folder.BandwidthSavingsUsingDFSReplicationTotal,
c.folderBandwidthSavingsUsingDFSReplicationRatio,
prometheus.GaugeValue,
folder.BandwidthSavingsUsingDFSReplicationPercent/100,
name,
)
@@ -783,8 +797,6 @@ func (c *Collector) collectPDHFolder(ch chan<- prometheus.Metric) error {
name,
)
}
return nil
}
func (c *Collector) collectPDHVolume(ch chan<- prometheus.Metric) error {
@@ -793,7 +805,13 @@ func (c *Collector) collectPDHVolume(ch chan<- prometheus.Metric) error {
return fmt.Errorf("failed to collect DFS Replication Volumes metrics: %w", err)
}
for _, volume := range c.perfDataObjectVolume {
c.collectVolumeMetrics(ch, c.perfDataObjectVolume)
return nil
}
func (c *Collector) collectVolumeMetrics(ch chan<- prometheus.Metric, rows []perfDataCounterValuesVolume) {
for _, volume := range rows {
name := volume.Name
ch <- prometheus.MustNewConstMetric(
c.volumeDatabaseLookupsTotal,
@@ -824,12 +842,10 @@ func (c *Collector) collectPDHVolume(ch chan<- prometheus.Metric) error {
)
ch <- prometheus.MustNewConstMetric(
c.volumeUSNJournalUnreadPercentage,
c.volumeUSNJournalUnreadRatio,
prometheus.GaugeValue,
volume.UsnJournalUnreadPercentage,
volume.UsnJournalUnreadPercentage/100,
name,
)
}
return nil
}
@@ -0,0 +1,128 @@
// SPDX-License-Identifier: Apache-2.0
//
// Copyright The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build windows
package dfsr
import (
"strings"
"testing"
"github.com/prometheus/client_golang/prometheus"
dto "github.com/prometheus/client_model/go"
"github.com/stretchr/testify/require"
)
type metricCollector struct {
collector *Collector
connections []perfDataCounterValuesConnection
folders []perfDataCounterValuesFolder
volumes []perfDataCounterValuesVolume
}
func (m metricCollector) Describe(ch chan<- *prometheus.Desc) {
prometheus.DescribeByCollect(m, ch)
}
func (m metricCollector) Collect(ch chan<- prometheus.Metric) {
m.collector.collectConnectionMetrics(ch, m.connections)
m.collector.collectFolderMetrics(ch, m.folders)
m.collector.collectVolumeMetrics(ch, m.volumes)
}
func TestCollectMetrics(t *testing.T) {
t.Parallel()
c := New(nil)
c.buildDescriptors()
registry := prometheus.NewPedanticRegistry()
require.NoError(t, registry.Register(metricCollector{
collector: c,
connections: []perfDataCounterValuesConnection{{
Name: "conn",
BandwidthSavingsUsingDFSReplicationPercent: 20,
BytesReceivedTotal: 4096,
RdcCompressedSizeOfFilesReceivedTotal: 1024,
}},
folders: []perfDataCounterValuesFolder{{
Name: "SYSVOL Share-{DD658FCA-D7AE-487D-8E75-67481CEBE108}",
BandwidthSavingsUsingDFSReplicationPercent: 75,
StagingSpaceInUse: 2048,
StagingBytesGeneratedTotal: 8192,
}},
volumes: []perfDataCounterValuesVolume{{
Name: "C:",
DatabaseCommitsTotal: 800998,
UsnJournalRecordsReadTotal: 1932712,
UsnJournalUnreadPercentage: 40,
}},
}))
families, err := registry.Gather()
require.NoError(t, err)
require.Len(t, families, 9+27+5)
expected := map[string]struct {
metricType dto.MetricType
value float64
}{
"windows_dfsr_connection_bandwidth_savings_using_dfs_replication_ratio": {dto.MetricType_GAUGE, 0.2},
"windows_dfsr_connection_bytes_received_total": {dto.MetricType_COUNTER, 4096},
"windows_dfsr_connection_rdc_compressed_size_of_received_files_bytes_total": {dto.MetricType_COUNTER, 1024},
"windows_dfsr_folder_bandwidth_savings_using_dfs_replication_ratio": {dto.MetricType_GAUGE, 0.75},
"windows_dfsr_folder_staging_space_in_use_bytes": {dto.MetricType_GAUGE, 2048},
"windows_dfsr_folder_staging_generated_bytes_total": {dto.MetricType_COUNTER, 8192},
"windows_dfsr_volume_database_commits_total": {dto.MetricType_COUNTER, 800998},
"windows_dfsr_volume_usn_journal_read_records_total": {dto.MetricType_COUNTER, 1932712},
"windows_dfsr_volume_usn_journal_unread_ratio": {dto.MetricType_GAUGE, 0.4},
}
seen := 0
for _, family := range families {
name := family.GetName()
// Counters and only counters end in _total.
if strings.HasSuffix(name, "_total") {
require.Equal(t, dto.MetricType_COUNTER, family.GetType(), name)
} else {
require.Equal(t, dto.MetricType_GAUGE, family.GetType(), name)
}
require.NotContains(t, name, "percent", name)
require.Len(t, family.GetMetric(), 1, name)
want, ok := expected[name]
if !ok {
continue
}
seen++
metric := family.GetMetric()[0]
require.Equal(t, want.metricType, family.GetType(), name)
actual := metric.GetGauge().GetValue()
if want.metricType == dto.MetricType_COUNTER {
actual = metric.GetCounter().GetValue()
}
require.InDelta(t, want.value, actual, 1e-12, name)
}
require.Equal(t, len(expected), seen)
}
+36 -36
View File
@@ -21,48 +21,48 @@ package dfsr
type perfDataCounterValuesConnection struct {
Name string
BandwidthSavingsUsingDFSReplicationTotal float64 `perfdata:"Bandwidth Savings Using DFS Replication"`
BytesReceivedTotal float64 `perfdata:"Total Bytes Received"`
CompressedSizeOfFilesReceivedTotal float64 `perfdata:"Compressed Size of Files Received"`
FilesReceivedTotal float64 `perfdata:"Total Files Received"`
RdcBytesReceivedTotal float64 `perfdata:"RDC Bytes Received"`
RdcCompressedSizeOfFilesReceivedTotal float64 `perfdata:"RDC Compressed Size of Files Received"`
RdcNumberOfFilesReceivedTotal float64 `perfdata:"RDC Number of Files Received"`
RdcSizeOfFilesReceivedTotal float64 `perfdata:"RDC Size of Files Received"`
SizeOfFilesReceivedTotal float64 `perfdata:"Size of Files Received"`
BandwidthSavingsUsingDFSReplicationPercent float64 `perfdata:"Bandwidth Savings Using DFS Replication"`
BytesReceivedTotal float64 `perfdata:"Total Bytes Received"`
CompressedSizeOfFilesReceivedTotal float64 `perfdata:"Compressed Size of Files Received"`
FilesReceivedTotal float64 `perfdata:"Total Files Received"`
RdcBytesReceivedTotal float64 `perfdata:"RDC Bytes Received"`
RdcCompressedSizeOfFilesReceivedTotal float64 `perfdata:"RDC Compressed Size of Files Received"`
RdcNumberOfFilesReceivedTotal float64 `perfdata:"RDC Number of Files Received"`
RdcSizeOfFilesReceivedTotal float64 `perfdata:"RDC Size of Files Received"`
SizeOfFilesReceivedTotal float64 `perfdata:"Size of Files Received"`
}
// Folder Perflib: "DFS Replicated Folder".
type perfDataCounterValuesFolder struct {
Name string
BandwidthSavingsUsingDFSReplicationTotal float64 `perfdata:"Bandwidth Savings Using DFS Replication"`
CompressedSizeOfFilesReceivedTotal float64 `perfdata:"Compressed Size of Files Received"`
ConflictBytesCleanedUpTotal float64 `perfdata:"Conflict Bytes Cleaned Up"`
ConflictBytesGeneratedTotal float64 `perfdata:"Conflict Bytes Generated"`
ConflictFilesCleanedUpTotal float64 `perfdata:"Conflict Files Cleaned Up"`
ConflictFilesGeneratedTotal float64 `perfdata:"Conflict Files Generated"`
ConflictFolderCleanupsCompletedTotal float64 `perfdata:"Conflict folder Cleanups Completed"`
ConflictSpaceInUse float64 `perfdata:"Conflict Space In Use"`
DeletedSpaceInUse float64 `perfdata:"Deleted Space In Use"`
DeletedBytesCleanedUpTotal float64 `perfdata:"Deleted Bytes Cleaned Up"`
DeletedBytesGeneratedTotal float64 `perfdata:"Deleted Bytes Generated"`
DeletedFilesCleanedUpTotal float64 `perfdata:"Deleted Files Cleaned Up"`
DeletedFilesGeneratedTotal float64 `perfdata:"Deleted Files Generated"`
FileInstallsRetriedTotal float64 `perfdata:"File Installs Retried"`
FileInstallsSucceededTotal float64 `perfdata:"File Installs Succeeded"`
FilesReceivedTotal float64 `perfdata:"Total Files Received"`
RdcBytesReceivedTotal float64 `perfdata:"RDC Bytes Received"`
RdcCompressedSizeOfFilesReceivedTotal float64 `perfdata:"RDC Compressed Size of Files Received"`
RdcNumberOfFilesReceivedTotal float64 `perfdata:"RDC Number of Files Received"`
RdcSizeOfFilesReceivedTotal float64 `perfdata:"RDC Size of Files Received"`
SizeOfFilesReceivedTotal float64 `perfdata:"Size of Files Received"`
StagingSpaceInUse float64 `perfdata:"Staging Space In Use"`
StagingBytesCleanedUpTotal float64 `perfdata:"Staging Bytes Cleaned Up"`
StagingBytesGeneratedTotal float64 `perfdata:"Staging Bytes Generated"`
StagingFilesCleanedUpTotal float64 `perfdata:"Staging Files Cleaned Up"`
StagingFilesGeneratedTotal float64 `perfdata:"Staging Files Generated"`
UpdatesDroppedTotal float64 `perfdata:"Updates Dropped"`
BandwidthSavingsUsingDFSReplicationPercent float64 `perfdata:"Bandwidth Savings Using DFS Replication"`
CompressedSizeOfFilesReceivedTotal float64 `perfdata:"Compressed Size of Files Received"`
ConflictBytesCleanedUpTotal float64 `perfdata:"Conflict Bytes Cleaned Up"`
ConflictBytesGeneratedTotal float64 `perfdata:"Conflict Bytes Generated"`
ConflictFilesCleanedUpTotal float64 `perfdata:"Conflict Files Cleaned Up"`
ConflictFilesGeneratedTotal float64 `perfdata:"Conflict Files Generated"`
ConflictFolderCleanupsCompletedTotal float64 `perfdata:"Conflict folder Cleanups Completed"`
ConflictSpaceInUse float64 `perfdata:"Conflict Space In Use"`
DeletedSpaceInUse float64 `perfdata:"Deleted Space In Use"`
DeletedBytesCleanedUpTotal float64 `perfdata:"Deleted Bytes Cleaned Up"`
DeletedBytesGeneratedTotal float64 `perfdata:"Deleted Bytes Generated"`
DeletedFilesCleanedUpTotal float64 `perfdata:"Deleted Files Cleaned Up"`
DeletedFilesGeneratedTotal float64 `perfdata:"Deleted Files Generated"`
FileInstallsRetriedTotal float64 `perfdata:"File Installs Retried"`
FileInstallsSucceededTotal float64 `perfdata:"File Installs Succeeded"`
FilesReceivedTotal float64 `perfdata:"Total Files Received"`
RdcBytesReceivedTotal float64 `perfdata:"RDC Bytes Received"`
RdcCompressedSizeOfFilesReceivedTotal float64 `perfdata:"RDC Compressed Size of Files Received"`
RdcNumberOfFilesReceivedTotal float64 `perfdata:"RDC Number of Files Received"`
RdcSizeOfFilesReceivedTotal float64 `perfdata:"RDC Size of Files Received"`
SizeOfFilesReceivedTotal float64 `perfdata:"Size of Files Received"`
StagingSpaceInUse float64 `perfdata:"Staging Space In Use"`
StagingBytesCleanedUpTotal float64 `perfdata:"Staging Bytes Cleaned Up"`
StagingBytesGeneratedTotal float64 `perfdata:"Staging Bytes Generated"`
StagingFilesCleanedUpTotal float64 `perfdata:"Staging Files Cleaned Up"`
StagingFilesGeneratedTotal float64 `perfdata:"Staging Files Generated"`
UpdatesDroppedTotal float64 `perfdata:"Updates Dropped"`
}
// Volume Perflib: "DFS Replication Service Volumes".