-
Notifications
You must be signed in to change notification settings - Fork 3
/
utils.go
92 lines (80 loc) · 2.12 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright 2016,2017,2018 Yaacov Zamir <[email protected]>
// and other contributors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Package storage interface for metric data storage
package storage
import (
"log"
"strconv"
"strings"
)
// FilterItems filters a list using a filter function
func FilterItems(vs []Item, f func(Item) bool) []Item {
vsf := make([]Item, 0)
for _, v := range vs {
if f(v) {
vsf = append(vsf, v)
}
}
return vsf
}
// ParseSec parse a time string into seconds,
// posible postfix - s, mn, h, d
// e.g. "2h" => 2 * 60 * 60
func ParseSec(t string) int64 {
var err error
var i int
if len(t) < 2 {
log.Fatal("Can't parse time ", t)
}
// check for ms and mn
switch t[len(t)-2:] {
case "mn":
if i, err = strconv.Atoi(t[:len(t)-2]); err == nil {
return int64(i) * 60
}
}
// check for s, h and d
switch t[len(t)-1:] {
case "s":
if i, err = strconv.Atoi(t[:len(t)-1]); err == nil {
return int64(i)
}
case "h":
if i, err = strconv.Atoi(t[:len(t)-1]); err == nil {
return int64(i) * 60 * 60
}
case "d":
if i, err = strconv.Atoi(t[:len(t)-1]); err == nil {
return int64(i) * 60 * 60 * 24
}
}
// if here must be an error
log.Fatal("Can't parse time ", t)
return 0
}
// ParseTags takes a comma separeted key:value list string and returns a map[string]string
// e.g.
// "warm:kitty,soft:kitty" => {"warm": "kitty", "soft": "kitty"}
func ParseTags(tags string) map[string]string {
vsf := make(map[string]string)
tagsList := strings.Split(tags, ",")
for _, tag := range tagsList {
t := strings.Split(tag, ":")
if len(t) == 2 {
vsf[t[0]] = t[1]
}
}
return vsf
}