From b5cdeeb300f711fa1767404f7127fbf9699656eb Mon Sep 17 00:00:00 2001 From: Greg Date: Thu, 5 Jul 2018 14:56:41 -0600 Subject: [PATCH] Add user tag to procstat input (#4386) --- plugins/inputs/procstat/process.go | 5 +++++ plugins/inputs/procstat/procstat.go | 8 ++++++++ plugins/inputs/procstat/procstat_test.go | 4 ++++ 3 files changed, 17 insertions(+) diff --git a/plugins/inputs/procstat/process.go b/plugins/inputs/procstat/process.go index 361582c33..30e8f182f 100644 --- a/plugins/inputs/procstat/process.go +++ b/plugins/inputs/procstat/process.go @@ -21,6 +21,7 @@ type Process interface { Percent(interval time.Duration) (float64, error) Times() (*cpu.TimesStat, error) RlimitUsage(bool) ([]process.RlimitStat, error) + Username() (string, error) } type PIDFinder interface { @@ -58,6 +59,10 @@ func (p *Proc) PID() PID { return PID(p.Process.Pid) } +func (p *Proc) Username() (string, error) { + return p.Process.Username() +} + func (p *Proc) Percent(interval time.Duration) (float64, error) { cpu_perc, err := p.Process.Percent(time.Duration(0)) if !p.hasCPUTimes && err == nil { diff --git a/plugins/inputs/procstat/procstat.go b/plugins/inputs/procstat/procstat.go index 01505bdd0..4b253fd1c 100644 --- a/plugins/inputs/procstat/procstat.go +++ b/plugins/inputs/procstat/procstat.go @@ -128,6 +128,14 @@ func (p *Procstat) addMetrics(proc Process, acc telegraf.Accumulator) { } } + //If user tag is not already set, set to actual name + if _, ok := proc.Tags()["user"]; !ok { + user, err := proc.Username() + if err == nil { + proc.Tags()["user"] = user + } + } + //If pid is not present as a tag, include it as a field. if _, pidInTags := proc.Tags()["pid"]; !pidInTags { fields["pid"] = int32(proc.PID()) diff --git a/plugins/inputs/procstat/procstat_test.go b/plugins/inputs/procstat/procstat_test.go index ff4b70060..7a2eaf9ee 100644 --- a/plugins/inputs/procstat/procstat_test.go +++ b/plugins/inputs/procstat/procstat_test.go @@ -104,6 +104,10 @@ func (p *testProc) PID() PID { return p.pid } +func (p *testProc) Username() (string, error) { + return "testuser", nil +} + func (p *testProc) Tags() map[string]string { return p.tags }