Skip to content

Commit

Permalink
- move filter creation to function
Browse files Browse the repository at this point in the history
- created a bool such that we only compile the filter on the first gather
- no longer collecting errors but rather displaying them as we go along
- Changelog updated
  • Loading branch information
Shakeel Sorathia committed Apr 3, 2017
1 parent b55d7d2 commit b662241
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 25 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ be deprecated eventually.
- [#2501](https://github.com/influxdata/telegraf/pull/2501): Support DEAD(X) state in system input plugin.
- [#2522](https://github.com/influxdata/telegraf/pull/2522): Add support for mongodb client certificates.
- [#1948](https://github.com/influxdata/telegraf/pull/1948): Support adding SNMP table indexes as tags.
- [#2425](https://github.com/influxdata/telegraf/pull/2425): Support to include/exclude docker container labels as tags

### Bugfixes

Expand Down
45 changes: 29 additions & 16 deletions plugins/inputs/docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ type Docker struct {
client *client.Client
engine_host string

testing bool
testing bool
labelFiltersCreated bool
}

// infoWrapper wraps client.Client.List for testing.
Expand Down Expand Up @@ -146,22 +147,13 @@ func (d *Docker) Gather(acc telegraf.Accumulator) error {
}
d.client = c
}

// Create label filters
if len(d.LabelInclude) != 0 {
var err error
d.LabelFilter.labelInclude, err = filter.Compile(d.LabelInclude)
if err != nil {
return err
}
}

if len(d.LabelExclude) != 0 {
var err error
d.LabelFilter.labelExclude, err = filter.Compile(d.LabelExclude)
// Create label filters if not already created
if !d.labelFiltersCreated {
err := d.createLabelFilters()
if err != nil {
return err
}
d.labelFiltersCreated = true
}

// Get daemon info
Expand Down Expand Up @@ -633,11 +625,32 @@ func parseSize(sizeStr string) (int64, error) {
return int64(size), nil
}

func (d *Docker) createLabelFilters() error {
if len(d.LabelInclude) != 0 && d.LabelFilter.labelInclude == nil {
var err error
d.LabelFilter.labelInclude, err = filter.Compile(d.LabelInclude)
if err != nil {
return err
}
}

if len(d.LabelExclude) != 0 && d.LabelFilter.labelExclude == nil {
var err error
d.LabelFilter.labelExclude, err = filter.Compile(d.LabelExclude)
if err != nil {
return err
}
}

return nil
}

func init() {
inputs.Add("docker", func() telegraf.Input {
return &Docker{
PerDevice: true,
Timeout: internal.Duration{Duration: time.Second * 5},
PerDevice: true,
Timeout: internal.Duration{Duration: time.Second * 5},
labelFiltersCreated: false,
}
})
}
13 changes: 4 additions & 9 deletions plugins/inputs/docker/docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (

"github.com/influxdata/telegraf/testutil"

"fmt"
"github.com/docker/docker/api/types"
"github.com/stretchr/testify/require"
)
Expand Down Expand Up @@ -280,23 +279,19 @@ func TestDockerGatherLabels(t *testing.T) {
err := d.Gather(&acc)
require.NoError(t, err)

var expectedErrors []string
for _, label := range tt.expected {
if !acc.HasTag("docker_container_cpu", label) {
expectedErrors = append(expectedErrors, fmt.Sprintf("%s ", label))
t.Errorf("Didn't get expected label of %s. Test was: Include: %s Exclude %s",
label, tt.include, tt.exclude)
}
}

var notexpectedErrors []string
for _, label := range tt.notexpected {
if acc.HasTag("docker_container_cpu", label) {
notexpectedErrors = append(notexpectedErrors, fmt.Sprintf("%s ", label))
t.Errorf("Got unexpected label of %s. Test was: Include: %s Exclude %s",
label, tt.include, tt.exclude)
}
}

if len(expectedErrors) > 0 || len(notexpectedErrors) > 0 {
t.Errorf("Failed test for: Include: %s Exclude: %s", tt.include, tt.exclude)
}
}
}

Expand Down

0 comments on commit b662241

Please sign in to comment.