@@ -14,10 +14,12 @@ import (
14
14
15
15
var (
16
16
httpError = stats .NewCounter32 ("parrot.monitoring.error;error=http" )
17
- decodeError = stats .NewCounter32 ("parrot.monitoring.error;error=decode" )
17
+ decodeError = stats .NewCounter32 ("parrot.monitoring.error;error=decode" )
18
18
invalidError = stats .NewCounter32 ("parrot.monitoring.error;error=invalid" )
19
19
)
20
20
21
+ var metricsBySeries []partitionMetrics
22
+
21
23
type seriesStats struct {
22
24
lastTs uint32
23
25
//the partition currently being checked
@@ -42,7 +44,7 @@ type partitionMetrics struct {
42
44
}
43
45
44
46
func monitor () {
45
- metricsBySeries := initMetricsBySeries ()
47
+ initMetricsBySeries ()
46
48
for tick := range clock .AlignedTickLossless (queryInterval ) {
47
49
48
50
query := graphite .ExecuteRenderQuery (buildRequest (tick ))
@@ -54,41 +56,45 @@ func monitor() {
54
56
}
55
57
56
58
for _ , s := range query .Decoded {
57
- log .Infof ("%d - %d" , s .Datapoints [0 ].Ts , s .Datapoints [len (s .Datapoints )- 1 ].Ts )
58
- partition , err := strconv .Atoi (s .Target )
59
- if err != nil {
60
- log .Debug ("unable to parse partition" , err )
61
- invalidError .Inc ()
62
- continue
63
- }
64
- serStats := seriesStats {}
65
- serStats .lastTs = s .Datapoints [len (s .Datapoints )- 1 ].Ts
59
+ processPartitionSeries (s )
60
+ }
61
+ }
62
+ }
66
63
67
- for _ , dp := range s .Datapoints {
68
64
69
- if math .IsNaN (dp .Val ) {
70
- serStats .nans += 1
71
- continue
72
- }
73
- serStats .lastSeen = dp .Ts
74
- if diff := dp .Val - float64 (dp .Ts ); diff != 0 {
75
- log .Debugf ("partition=%d dp.Val=%f dp.Ts=%d diff=%f" , partition , dp .Val , dp .Ts , diff )
76
- serStats .deltaSum += diff
77
- serStats .numNonMatching += 1
78
- }
79
- }
65
+ func processPartitionSeries (s graphite.Series ) {
66
+ log .Infof ("%d - %d" , s .Datapoints [0 ].Ts , s .Datapoints [len (s .Datapoints )- 1 ].Ts )
67
+ partition , err := strconv .Atoi (s .Target )
68
+ if err != nil {
69
+ log .Debug ("unable to parse partition" , err )
70
+ invalidError .Inc ()
71
+ return
72
+ }
73
+ serStats := seriesStats {}
74
+ serStats .lastTs = s .Datapoints [len (s .Datapoints )- 1 ].Ts
75
+
76
+ for _ , dp := range s .Datapoints {
80
77
81
- metrics := metricsBySeries [partition ]
82
- metrics .nanCount .Set (int (serStats .nans ))
83
- metrics .lag .Set (int (serStats .lastTs - serStats .lastSeen ))
84
- metrics .deltaSum .Set (int (serStats .deltaSum ))
85
- metrics .nonMatching .Set (int (serStats .numNonMatching ))
78
+ if math .IsNaN (dp .Val ) {
79
+ serStats .nans += 1
80
+ continue
81
+ }
82
+ serStats .lastSeen = dp .Ts
83
+ if diff := dp .Val - float64 (dp .Ts ); diff != 0 {
84
+ log .Debugf ("partition=%d dp.Val=%f dp.Ts=%d diff=%f" , partition , dp .Val , dp .Ts , diff )
85
+ serStats .deltaSum += diff
86
+ serStats .numNonMatching += 1
86
87
}
87
88
}
89
+
90
+ metrics := metricsBySeries [partition ]
91
+ metrics .nanCount .Set (int (serStats .nans ))
92
+ metrics .lag .Set (int (serStats .lastTs - serStats .lastSeen ))
93
+ metrics .deltaSum .Set (int (serStats .deltaSum ))
94
+ metrics .nonMatching .Set (int (serStats .numNonMatching ))
88
95
}
89
96
90
- func initMetricsBySeries () []partitionMetrics {
91
- var metricsBySeries []partitionMetrics
97
+ func initMetricsBySeries () {
92
98
for p := 0 ; p < int (partitionCount ); p ++ {
93
99
metrics := partitionMetrics {
94
100
nanCount : stats .NewGauge32 (fmt .Sprintf ("parrot.monitoring.nancount;partition=%d" , p )),
@@ -98,7 +104,6 @@ func initMetricsBySeries() []partitionMetrics {
98
104
}
99
105
metricsBySeries = append (metricsBySeries , metrics )
100
106
}
101
- return metricsBySeries
102
107
}
103
108
104
109
func buildRequest (now time.Time ) * http.Request {
0 commit comments