From 67c0848f6ac249b2f898d8e702f0786b0524e65d Mon Sep 17 00:00:00 2001 From: Steve Brunton Date: Thu, 21 Feb 2019 22:34:39 -0500 Subject: [PATCH 1/3] fix uptime regex and lazy coding for #34 --- collector/resource_collector.go | 33 +++++++++++++++++----------- collector/resource_collector_test.go | 1 + 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/collector/resource_collector.go b/collector/resource_collector.go index e1db6f2..59f1e88 100644 --- a/collector/resource_collector.go +++ b/collector/resource_collector.go @@ -1,6 +1,7 @@ package collector import ( + "fmt" "regexp" "strconv" "strings" @@ -15,7 +16,7 @@ var uptimeRegex *regexp.Regexp var uptimeParts [5]time.Duration 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} } @@ -105,20 +106,26 @@ func (c *resourceCollector) collectMetricForProperty(property string, re *proto. func parseUptime(uptime string) (float64, error) { var u time.Duration - for i, match := range uptimeRegex.FindAllStringSubmatch(uptime, -1)[0] { - if match != "" && i != 0 { - v, err := strconv.Atoi(match) - if err != nil { - log.WithFields(log.Fields{ - "uptime": uptime, - "value": match, - "error": err, - }).Error("error parsing uptime field value") - return float64(0), err + reMatch := uptimeRegex.FindAllStringSubmatch(uptime, -1) + + // should get one and only one match back on the regex + if len(reMatch) != 1 { + return 0, fmt.Errorf("invalid uptime value sent to regex") + } else { + for i, match := range reMatch[0] { + if match != "" && i != 0 { + v, err := strconv.Atoi(match) + 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 } diff --git a/collector/resource_collector_test.go b/collector/resource_collector_test.go index d84fc48..4a6b72e 100644 --- a/collector/resource_collector_test.go +++ b/collector/resource_collector_test.go @@ -13,6 +13,7 @@ func TestParseUptime(t *testing.T) { {"3d3h42m53s", 272573}, {"15w3d3h42m53s", 9344573}, {"42m53s", 2573}, + {"7w6d9h34m", 4786440}, } for _, uptime := range uptimes { From e074600ccc6e483222351850de53704cc5a88383 Mon Sep 17 00:00:00 2001 From: Steve Brunton Date: Thu, 21 Feb 2019 22:38:41 -0500 Subject: [PATCH 2/3] [ci skip] version bump for merge --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index a3dd682..af0b7dd 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.6-DEVEL +1.0.6 From 0563415d9f6996b3e93bb2124986099e515b2800 Mon Sep 17 00:00:00 2001 From: Steve Brunton Date: Thu, 21 Feb 2019 22:42:14 -0500 Subject: [PATCH 3/3] edit and tickle to build --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 878f4b0..c93c44f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2017, brunton at dudeman dot com +Copyright (c) 2019, sbrunton at gmail dot com All rights reserved. Redistribution and use in source and binary forms, with or without