Skip to content
This repository was archived by the owner on Aug 23, 2023. It is now read-only.

Commit e25199a

Browse files
committed
refactor, pull series metrics gathering into a function
1 parent ed4457c commit e25199a

File tree

1 file changed

+36
-31
lines changed

1 file changed

+36
-31
lines changed

cmd/mt-parrot/monitor.go

+36-31
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ import (
1414

1515
var (
1616
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")
1818
invalidError = stats.NewCounter32("parrot.monitoring.error;error=invalid")
1919
)
2020

21+
var metricsBySeries []partitionMetrics
22+
2123
type seriesStats struct {
2224
lastTs uint32
2325
//the partition currently being checked
@@ -42,7 +44,7 @@ type partitionMetrics struct {
4244
}
4345

4446
func monitor() {
45-
metricsBySeries := initMetricsBySeries()
47+
initMetricsBySeries()
4648
for tick := range clock.AlignedTickLossless(queryInterval) {
4749

4850
query := graphite.ExecuteRenderQuery(buildRequest(tick))
@@ -54,41 +56,45 @@ func monitor() {
5456
}
5557

5658
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+
}
6663

67-
for _, dp := range s.Datapoints {
6864

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 {
8077

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
8687
}
8788
}
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))
8895
}
8996

90-
func initMetricsBySeries() []partitionMetrics {
91-
var metricsBySeries []partitionMetrics
97+
func initMetricsBySeries() {
9298
for p := 0; p < int(partitionCount); p++ {
9399
metrics := partitionMetrics{
94100
nanCount: stats.NewGauge32(fmt.Sprintf("parrot.monitoring.nancount;partition=%d", p)),
@@ -98,7 +104,6 @@ func initMetricsBySeries() []partitionMetrics {
98104
}
99105
metricsBySeries = append(metricsBySeries, metrics)
100106
}
101-
return metricsBySeries
102107
}
103108

104109
func buildRequest(now time.Time) *http.Request {

0 commit comments

Comments
 (0)