From a95710ed0c9c57ea333d76de1e3e4b0d5b25723b Mon Sep 17 00:00:00 2001
From: Thibault Cohen <titilambert@gmail.com>
Date: Mon, 21 Mar 2016 20:10:17 -0400
Subject: [PATCH] SNMP plugin fixes

fixes #873
---
 CHANGELOG.md                  |  1 +
 plugins/inputs/snmp/README.md |  8 ++++----
 plugins/inputs/snmp/snmp.go   | 10 ++++------
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8f605ee9..a5e6aba1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,7 @@
 - [#656](https://github.com/influxdata/telegraf/issues/656): No longer run `lsof` on linux to get netstat data, fixes permissions issue.
 - [#907](https://github.com/influxdata/telegraf/issues/907): Fix prometheus invalid label/measurement name key.
 - [#841](https://github.com/influxdata/telegraf/issues/841): Fix memcached unix socket panic.
+- [#873](https://github.com/influxdata/telegraf/issues/873): Fix SNMP plugin sometimes not returning metrics. Thanks @titiliambert!
 
 ## v0.11.1 [2016-03-17]
 
diff --git a/plugins/inputs/snmp/README.md b/plugins/inputs/snmp/README.md
index ee6d1785..bee78322 100644
--- a/plugins/inputs/snmp/README.md
+++ b/plugins/inputs/snmp/README.md
@@ -492,12 +492,12 @@ Note: the plugin will add instance name as tag *instance*
     # oid attribute is useless
 
   # SNMP SUBTABLES
-  [[plugins.snmp.subtable]]
+  [[inputs.snmp.subtable]]
     name = "bytes_recv"
     oid = ".1.3.6.1.2.1.31.1.1.1.6"
     unit = "octets"
 
-  [[plugins.snmp.subtable]]
+  [[inputs.snmp.subtable]]
     name = "bytes_send"
     oid = ".1.3.6.1.2.1.31.1.1.1.10"
     unit = "octets"
@@ -505,10 +505,10 @@ Note: the plugin will add instance name as tag *instance*
 
 #### Configuration notes
 
-- In **plugins.snmp.table** section, the `oid` attribute is useless if
+- In **inputs.snmp.table** section, the `oid` attribute is useless if
   the `sub_tables` attributes is defined
 
-- In **plugins.snmp.subtable** section, you can put a name from `snmptranslate_file`
+- In **inputs.snmp.subtable** section, you can put a name from `snmptranslate_file`
   as `oid` attribute instead of a valid OID
 
 ### Measurements & Fields:
diff --git a/plugins/inputs/snmp/snmp.go b/plugins/inputs/snmp/snmp.go
index ba270cb1..a56e53ff 100644
--- a/plugins/inputs/snmp/snmp.go
+++ b/plugins/inputs/snmp/snmp.go
@@ -4,7 +4,6 @@ import (
 	"io/ioutil"
 	"log"
 	"net"
-	"regexp"
 	"strconv"
 	"strings"
 	"time"
@@ -308,11 +307,10 @@ func (s *Snmp) Gather(acc telegraf.Accumulator) error {
 			return err
 		} else {
 			for _, line := range strings.Split(string(data), "\n") {
-				oidsRegEx := regexp.MustCompile(`([^\t]*)\t*([^\t]*)`)
-				oids := oidsRegEx.FindStringSubmatch(string(line))
-				if oids[2] != "" {
-					oid_name := oids[1]
-					oid := oids[2]
+				oids := strings.Fields(string(line))
+				if len(oids) == 2 && oids[1] != "" {
+					oid_name := oids[0]
+					oid := oids[1]
 					fillnode(s.initNode, oid_name, strings.Split(string(oid), "."))
 					s.nameToOid[oid_name] = oid
 				}
-- 
GitLab