From 0453516e9571889f979679a887c239e9c79a37ff Mon Sep 17 00:00:00 2001 From: Greg Linton Date: Wed, 27 Jun 2018 17:39:38 -0600 Subject: [PATCH 1/2] Gather IPMI metrics concurrently from list of servers Resolves #4175 --- .circleci/config.yml | 4 ++-- plugins/inputs/ipmi_sensor/ipmi.go | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 122f28af0f837..578e0bcbdf5fe 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,11 +16,11 @@ jobs: steps: - checkout - restore_cache: - key: vendor-{{ .Branch }}-{{ checksum "Gopkg.lock" }} + key: vendor-{{ checksum "Gopkg.lock" }} - run: 'make deps' - save_cache: name: 'vendored deps' - key: vendor-{{ .Branch }}-{{ checksum "Gopkg.lock" }} + key: vendor-{{ checksum "Gopkg.lock" }} paths: - './vendor' - persist_to_workspace: diff --git a/plugins/inputs/ipmi_sensor/ipmi.go b/plugins/inputs/ipmi_sensor/ipmi.go index 2d7bcaefc7dfd..b36787fc00154 100644 --- a/plugins/inputs/ipmi_sensor/ipmi.go +++ b/plugins/inputs/ipmi_sensor/ipmi.go @@ -62,11 +62,12 @@ func (m *Ipmi) Gather(acc telegraf.Accumulator) error { if len(m.Servers) > 0 { for _, server := range m.Servers { - err := m.parse(acc, server) - if err != nil { - acc.AddError(err) - continue - } + go func(a telegraf.Accumulator, s string) { + err := m.parse(a, s) + if err != nil { + a.AddError(err) + } + }(acc, server) } } else { err := m.parse(acc, "") From 3e5ffc0a97d21a6c9bad62abcbf78b7daf182107 Mon Sep 17 00:00:00 2001 From: Greg Linton Date: Thu, 28 Jun 2018 12:12:14 -0600 Subject: [PATCH 2/2] Add waitgroup for parallel metric gathering --- plugins/inputs/ipmi_sensor/ipmi.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/inputs/ipmi_sensor/ipmi.go b/plugins/inputs/ipmi_sensor/ipmi.go index b36787fc00154..ee99b0a3d15fe 100644 --- a/plugins/inputs/ipmi_sensor/ipmi.go +++ b/plugins/inputs/ipmi_sensor/ipmi.go @@ -5,6 +5,7 @@ import ( "os/exec" "strconv" "strings" + "sync" "time" "github.com/influxdata/telegraf" @@ -61,14 +62,18 @@ func (m *Ipmi) Gather(acc telegraf.Accumulator) error { } if len(m.Servers) > 0 { + wg := sync.WaitGroup{} for _, server := range m.Servers { + wg.Add(1) go func(a telegraf.Accumulator, s string) { + defer wg.Done() err := m.parse(a, s) if err != nil { a.AddError(err) } }(acc, server) } + wg.Wait() } else { err := m.parse(acc, "") if err != nil {