From b77dc90741ef1efd7ba3e9b76b80d98c39cc4cd8 Mon Sep 17 00:00:00 2001 From: Cameron Sparr Date: Wed, 21 Dec 2016 10:51:07 +0000 Subject: [PATCH] docker: check type when totalling blkio & net metrics closes #2027 --- CHANGELOG.md | 1 + plugins/inputs/docker/docker.go | 30 ++++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ad357f66dae1..dd0f848a2764f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,7 @@ plugins, not just statsd. - [#1825](https://github.com/influxdata/telegraf/issues/1825): Consul plugin: add check_id as a tag in metrics to avoid overwrites. - [#1973](https://github.com/influxdata/telegraf/issues/1973): Partial fix: logparser CLF pattern with IPv6 addresses. - [#1975](https://github.com/influxdata/telegraf/issues/1975) & [#2102](https://github.com/influxdata/telegraf/issues/2102): Fix thread-safety when using multiple instances of the statsd input plugin. +- [#2027](https://github.com/influxdata/telegraf/issues/2027): docker input: interface conversion panic fix. ## v1.1.2 [2016-12-12] diff --git a/plugins/inputs/docker/docker.go b/plugins/inputs/docker/docker.go index 7fc48689fc2a0..82a3791b6e37e 100644 --- a/plugins/inputs/docker/docker.go +++ b/plugins/inputs/docker/docker.go @@ -368,11 +368,22 @@ func gatherContainerStats( if field == "container_id" { continue } + + var uintV uint64 + switch v := value.(type) { + case uint64: + uintV = v + case int64: + uintV = uint64(v) + default: + continue + } + _, ok := totalNetworkStatMap[field] if ok { - totalNetworkStatMap[field] = totalNetworkStatMap[field].(uint64) + value.(uint64) + totalNetworkStatMap[field] = totalNetworkStatMap[field].(uint64) + uintV } else { - totalNetworkStatMap[field] = value + totalNetworkStatMap[field] = uintV } } } @@ -491,11 +502,22 @@ func gatherBlockIOMetrics( if field == "container_id" { continue } + + var uintV uint64 + switch v := value.(type) { + case uint64: + uintV = v + case int64: + uintV = uint64(v) + default: + continue + } + _, ok := totalStatMap[field] if ok { - totalStatMap[field] = totalStatMap[field].(uint64) + value.(uint64) + totalStatMap[field] = totalStatMap[field].(uint64) + uintV } else { - totalStatMap[field] = value + totalStatMap[field] = uintV } } }