in remappers/hostmetrics/processes.go [26:120]
func remapProcessesMetrics(
src, out pmetric.MetricSlice,
_ pcommon.Resource,
mutator func(pmetric.NumberDataPoint),
) error {
var timestamp pcommon.Timestamp
var idleProcesses, sleepingProcesses, stoppedProcesses, zombieProcesses, runningProcesses, totalProcesses int64
for i := 0; i < src.Len(); i++ {
metric := src.At(i)
if metric.Name() == "system.processes.count" {
dataPoints := metric.Sum().DataPoints()
for j := 0; j < dataPoints.Len(); j++ {
dp := dataPoints.At(j)
if timestamp == 0 {
timestamp = dp.Timestamp()
}
value := dp.IntValue()
if status, ok := dp.Attributes().Get("status"); ok {
switch status.Str() {
case "idle":
idleProcesses = value
totalProcesses += value
case "sleeping":
sleepingProcesses = value
totalProcesses += value
case "stopped":
stoppedProcesses = value
totalProcesses += value
case "zombies":
zombieProcesses = value
totalProcesses += value
case "running":
runningProcesses = value
totalProcesses += value
default:
totalProcesses += value
}
}
}
}
}
finalMutator := remappedmetric.ChainedMutator(
mutator,
func(dp pmetric.NumberDataPoint) {
// Processes tab in the Kibana curated UI requires the event.dataset
// to work. This is a hard dependency.
// TODO (lahsivjar): Unlike datastrea.dataset, we may want to set the
// event.dataset for all cases, would require refactoring the private
// remap functions.
dp.Attributes().PutStr("event.dataset", "system.process.summary")
},
)
remappedmetric.Add(out, finalMutator,
remappedmetric.Metric{
DataType: pmetric.MetricTypeSum,
Name: "system.process.summary.idle",
Timestamp: timestamp,
IntValue: &idleProcesses,
},
remappedmetric.Metric{
DataType: pmetric.MetricTypeSum,
Name: "system.process.summary.sleeping",
Timestamp: timestamp,
IntValue: &sleepingProcesses,
},
remappedmetric.Metric{
DataType: pmetric.MetricTypeSum,
Name: "system.process.summary.stopped",
Timestamp: timestamp,
IntValue: &stoppedProcesses,
},
remappedmetric.Metric{
DataType: pmetric.MetricTypeSum,
Name: "system.process.summary.zombie",
Timestamp: timestamp,
IntValue: &zombieProcesses,
},
remappedmetric.Metric{
DataType: pmetric.MetricTypeSum,
Name: "system.process.summary.running",
Timestamp: timestamp,
IntValue: &runningProcesses,
},
remappedmetric.Metric{
DataType: pmetric.MetricTypeSum,
Name: "system.process.summary.total",
Timestamp: timestamp,
IntValue: &totalProcesses,
},
)
return nil
}