-
Notifications
You must be signed in to change notification settings - Fork 93
/
collector.go
71 lines (62 loc) · 1.89 KB
/
collector.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
// Copyright (C) 2017, 2018, 2019 EGAAS S.A.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or (at
// your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
package metric
import (
"github.com/AplaProject/go-apla/packages/types"
)
// CollectorFunc represents function for collects values of metrics
type CollectorFunc func(int64) ([]*Value, error)
// Value represents value of metrics
type Value struct {
Time int64
Metric string
Key string
Value int64
}
// ToMap returns values as map
func (v *Value) ToMap() *types.Map {
return types.LoadMap(map[string]interface{}{
"time": v.Time,
"metric": v.Metric,
"key": v.Key,
"value": v.Value,
})
}
// Collector represents struct that works with the collection of metrics
type Collector struct {
funcs []CollectorFunc
}
// Values returns values of all metrics
func (c *Collector) Values(timeBlock int64) []interface{} {
values := make([]interface{}, 0)
for _, fn := range c.funcs {
result, err := fn(timeBlock)
if err != nil {
continue
}
for _, v := range result {
values = append(values, v.ToMap())
}
}
return values
}
// NewCollector creates new collector
func NewCollector(funcs ...CollectorFunc) *Collector {
c := &Collector{}
c.funcs = make([]CollectorFunc, 0, len(funcs))
c.funcs = append(c.funcs, funcs...)
return c
}