in remappers/hostmetrics/filesystem.go [43:106]
func remapFilesystemMetrics(
src, out pmetric.MetricSlice,
_ pcommon.Resource,
mutator func(pmetric.NumberDataPoint),
) error {
var timestamp pcommon.Timestamp
deviceMetricsMap := make(map[deviceKey]*deviceMetrics)
for i := 0; i < src.Len(); i++ {
metric := src.At(i)
switch metric.Name() {
case "system.filesystem.usage", "system.filesystem.inodes.usage":
dataPoints := metric.Sum().DataPoints()
for j := 0; j < dataPoints.Len(); j++ {
dp := dataPoints.At(j)
value := dp.IntValue()
timestamp = dp.Timestamp()
key, ok := getDeviceKey(dp)
if !ok {
continue
}
if _, exists := deviceMetricsMap[key]; !exists {
deviceMetricsMap[key] = &deviceMetrics{}
}
dmetrics := deviceMetricsMap[key]
if state, ok := dp.Attributes().Get("state"); ok {
switch state.Str() {
case "used":
if metric.Name() == "system.filesystem.usage" {
dmetrics.totalUsage += value
dmetrics.usedBytes += value
addFileSystemMetrics(out, timestamp, mutator, "system.filesystem.used.bytes", key.device, key.mpoint, key.fstype, value)
} else {
dmetrics.totalInodeUsage += value
}
case "free":
if metric.Name() == "system.filesystem.usage" {
dmetrics.totalUsage += value
addFileSystemMetrics(out, timestamp, mutator, "system.filesystem.free", key.device, key.mpoint, key.fstype, value)
addFileSystemMetrics(out, timestamp, mutator, "system.filesystem.available", key.device, key.mpoint, key.fstype, value)
} else {
dmetrics.totalInodeUsage += value
addFileSystemMetrics(out, timestamp, mutator, "system.filesystem.free_files", key.device, key.mpoint, key.fstype, value)
}
}
}
}
}
}
for key, dmetrics := range deviceMetricsMap {
device, mpoint, fstype := key.device, key.mpoint, key.fstype
if dmetrics.totalUsage > 0 {
addFileSystemMetrics(out, timestamp, mutator, "system.filesystem.total", device, mpoint, fstype, dmetrics.totalUsage)
usedPercentage := float64(dmetrics.usedBytes) / float64(dmetrics.totalUsage)
addFileSystemMetrics(out, timestamp, mutator, "system.filesystem.used.pct", device, mpoint, fstype, usedPercentage)
}
if dmetrics.totalInodeUsage > 0 {
addFileSystemMetrics(out, timestamp, mutator, "system.filesystem.files", device, mpoint, fstype, dmetrics.totalInodeUsage)
}
}
return nil
}