fix uptime regex and lazy coding for #34 (#35)

* fix uptime regex and lazy coding for #34
* [ci skip] version bump for merge
This commit is contained in:
Steve Brunton
2019-02-21 22:39:25 -05:00
committed by GitHub
parent 9f22fc0232
commit 81e258fec1
3 changed files with 22 additions and 14 deletions

View File

@@ -1 +1 @@
1.0.6-DEVEL 1.0.6

View File

@@ -1,6 +1,7 @@
package collector package collector
import ( import (
"fmt"
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
@@ -15,7 +16,7 @@ var uptimeRegex *regexp.Regexp
var uptimeParts [5]time.Duration var uptimeParts [5]time.Duration
func init() { func init() {
uptimeRegex = regexp.MustCompile(`(?:(\d*)w)?(?:(\d*)d)?(?:(\d*)h)?(?:(\d*)m)?(?:(\d*)s)`) uptimeRegex = regexp.MustCompile(`(?:(\d*)w)?(?:(\d*)d)?(?:(\d*)h)?(?:(\d*)m)?(?:(\d*)s)?`)
uptimeParts = [5]time.Duration{time.Hour * 168, time.Hour * 24, time.Hour, time.Minute, time.Second} uptimeParts = [5]time.Duration{time.Hour * 168, time.Hour * 24, time.Hour, time.Minute, time.Second}
} }
@@ -105,20 +106,26 @@ func (c *resourceCollector) collectMetricForProperty(property string, re *proto.
func parseUptime(uptime string) (float64, error) { func parseUptime(uptime string) (float64, error) {
var u time.Duration var u time.Duration
for i, match := range uptimeRegex.FindAllStringSubmatch(uptime, -1)[0] { reMatch := uptimeRegex.FindAllStringSubmatch(uptime, -1)
if match != "" && i != 0 {
v, err := strconv.Atoi(match) // should get one and only one match back on the regex
if err != nil { if len(reMatch) != 1 {
log.WithFields(log.Fields{ return 0, fmt.Errorf("invalid uptime value sent to regex")
"uptime": uptime, } else {
"value": match, for i, match := range reMatch[0] {
"error": err, if match != "" && i != 0 {
}).Error("error parsing uptime field value") v, err := strconv.Atoi(match)
return float64(0), err if err != nil {
log.WithFields(log.Fields{
"uptime": uptime,
"value": match,
"error": err,
}).Error("error parsing uptime field value")
return float64(0), err
}
u += time.Duration(v) * uptimeParts[i-1]
} }
u += time.Duration(v) * uptimeParts[i-1]
} }
} }
return u.Seconds(), nil return u.Seconds(), nil
} }

View File

@@ -13,6 +13,7 @@ func TestParseUptime(t *testing.T) {
{"3d3h42m53s", 272573}, {"3d3h42m53s", 272573},
{"15w3d3h42m53s", 9344573}, {"15w3d3h42m53s", 9344573},
{"42m53s", 2573}, {"42m53s", 2573},
{"7w6d9h34m", 4786440},
} }
for _, uptime := range uptimes { for _, uptime := range uptimes {