Skip to content

Commit 41e37b8

Browse files
authored
Merge pull request #147 from codex-team/feat/new-time-series-key
chore(): add new time-series key
2 parents 0b11313 + e740794 commit 41e37b8

3 files changed

Lines changed: 21 additions & 14 deletions

File tree

pkg/server/errorshandler/handler.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func (handler *Handler) process(body []byte) ResponseMessage {
7373

7474
if handler.RedisClient.IsBlocked(projectId) {
7575
handler.ErrorsBlockedByLimit.Inc()
76-
handler.recordProjectMetrics(projectId, "events-rate-limited")
76+
handler.recordProjectMetrics(projectId, "events-rate-limited", false)
7777
return ResponseMessage{402, true, "Project has exceeded the events limit"}
7878
}
7979

@@ -83,7 +83,7 @@ func (handler *Handler) process(body []byte) ResponseMessage {
8383
return ResponseMessage{402, true, "Failed to update rate limit"}
8484
}
8585
if !rateWithinLimit {
86-
handler.recordProjectMetrics(projectId, "events-rate-limited")
86+
handler.recordProjectMetrics(projectId, "events-rate-limited", false)
8787
return ResponseMessage{402, true, "Rate limit exceeded"}
8888
}
8989

@@ -110,7 +110,7 @@ func (handler *Handler) process(body []byte) ResponseMessage {
110110
handler.ErrorsProcessed.Inc()
111111

112112
// record project metrics
113-
handler.recordProjectMetrics(projectId, "events-accepted")
113+
handler.recordProjectMetrics(projectId, "events-accepted", true)
114114

115115
return ResponseMessage{200, false, "OK"}
116116
}
@@ -133,16 +133,23 @@ func GetQueueCache(nonDefaultQueues []string) map[string]bool {
133133
}
134134

135135
// getTimeSeriesKey generates a Redis TimeSeries key for project metrics
136-
func getTimeSeriesKey(projectId, metricType, granularity string) string {
136+
func getTimeSeriesKey(projectId, metricType, granularity string, isSystemMetric bool) string {
137+
// flag determines which counter would be incremented
138+
if isSystemMetric {
139+
// ts:collector-project-%s:%s:%s could be used in admin
140+
return fmt.Sprintf("ts:collector-project-%s:%s:%s", metricType, projectId, granularity)
141+
}
142+
143+
// ts:project-%s:%s:%s is used in api for chart retrieving
137144
return fmt.Sprintf("ts:project-%s:%s:%s", metricType, projectId, granularity)
138145
}
139146

140147
// recordProjectMetrics records project metrics to Redis TimeSeries
141148
// metricType can be: "events-accepted", "events-rate-limited", etc.
142-
func (handler *Handler) recordProjectMetrics(projectId, metricType string) {
143-
minutelyKey := getTimeSeriesKey(projectId, metricType, "minutely")
144-
hourlyKey := getTimeSeriesKey(projectId, metricType, "hourly")
145-
dailyKey := getTimeSeriesKey(projectId, metricType, "daily")
149+
func (handler *Handler) recordProjectMetrics(projectId, metricType string, isSystemMetric bool) {
150+
minutelyKey := getTimeSeriesKey(projectId, metricType, "minutely", isSystemMetric)
151+
hourlyKey := getTimeSeriesKey(projectId, metricType, "hourly", isSystemMetric)
152+
dailyKey := getTimeSeriesKey(projectId, metricType, "daily", isSystemMetric)
146153

147154
labels := map[string]string{
148155
"type": "error",

pkg/server/errorshandler/handler_sentry.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (handler *Handler) HandleSentry(ctx *fasthttp.RequestCtx) {
102102

103103
if handler.RedisClient.IsBlocked(projectId) {
104104
handler.ErrorsBlockedByLimit.Inc()
105-
handler.recordProjectMetrics(projectId, "events-rate-limited")
105+
handler.recordProjectMetrics(projectId, "events-rate-limited", false)
106106
sendAnswerHTTP(ctx, ResponseMessage{402, true, "Project has exceeded the events limit"})
107107
return
108108
}
@@ -115,7 +115,7 @@ func (handler *Handler) HandleSentry(ctx *fasthttp.RequestCtx) {
115115
}
116116

117117
if !rateWithinLimit {
118-
handler.recordProjectMetrics(projectId, "events-rate-limited")
118+
handler.recordProjectMetrics(projectId, "events-rate-limited", false)
119119
sendAnswerHTTP(ctx, ResponseMessage{402, true, "Rate limit exceeded"})
120120
return
121121
}
@@ -144,7 +144,7 @@ func (handler *Handler) HandleSentry(ctx *fasthttp.RequestCtx) {
144144
handler.ErrorsProcessed.Inc()
145145

146146
// record project metrics
147-
handler.recordProjectMetrics(projectId, "events-accepted")
147+
handler.recordProjectMetrics(projectId, "events-accepted", true)
148148

149149
sendAnswerHTTP(ctx, ResponseMessage{200, false, "OK"})
150150
}

pkg/server/errorshandler/test_helpers.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import (
1212
// Usage: handler.GenerateTestTimeSeriesData(projectId)
1313
func (handler *Handler) GenerateTestTimeSeriesData(projectId string) error {
1414
metricType := "events-accepted"
15-
minutelyKey := getTimeSeriesKey(projectId, metricType, "minutely")
16-
hourlyKey := getTimeSeriesKey(projectId, metricType, "hourly")
17-
dailyKey := getTimeSeriesKey(projectId, metricType, "daily")
15+
minutelyKey := getTimeSeriesKey(projectId, metricType, "minutely", true)
16+
hourlyKey := getTimeSeriesKey(projectId, metricType, "hourly", true)
17+
dailyKey := getTimeSeriesKey(projectId, metricType, "daily", true)
1818

1919
// Delete existing keys to avoid accumulation
2020
log.Infof("Deleting existing test data keys for project %s...", projectId)

0 commit comments

Comments
 (0)