Skip to content

Commit 61f889a

Browse files
Add time_elapsed_db_post metric to have a metric in use
1 parent 531e929 commit 61f889a

File tree

3 files changed

+215
-36
lines changed

3 files changed

+215
-36
lines changed

aggregation_mode/gateway/src/http.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{
22
collections::HashMap,
33
str::FromStr,
4-
time::{SystemTime, UNIX_EPOCH},
4+
time::{Instant, SystemTime, UNIX_EPOCH},
55
};
66

77
use actix_multipart::form::MultipartForm;
@@ -240,6 +240,8 @@ impl GatewayServer {
240240
return HttpResponse::BadRequest().json(AppResponse::new_unsucessfull(message, 400));
241241
};
242242

243+
let start = Instant::now();
244+
243245
match state
244246
.db
245247
.insert_task(
@@ -252,9 +254,16 @@ impl GatewayServer {
252254
)
253255
.await
254256
{
255-
Ok(task_id) => HttpResponse::Ok().json(AppResponse::new_sucessfull(
256-
serde_json::json!({ "task_id": task_id.to_string() }),
257-
)),
257+
Ok(task_id) => {
258+
let duration = start.elapsed();
259+
state
260+
.metrics
261+
.register_db_response_time_post(duration.as_secs_f64());
262+
263+
HttpResponse::Ok().json(AppResponse::new_sucessfull(
264+
serde_json::json!({ "task_id": task_id.to_string() }),
265+
))
266+
}
258267
Err(_) => HttpResponse::InternalServerError()
259268
.json(AppResponse::new_unsucessfull("Internal server error", 500)),
260269
}
Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,21 @@
1-
use prometheus::{self, opts, register_int_counter, IntCounter};
1+
use prometheus::{self, histogram_opts, register_histogram};
22
use warp::{reject::Rejection, reply::Reply, Filter};
33

44
#[derive(Clone, Debug)]
55
pub struct GatewayMetrics {
6-
pub success_response: IntCounter,
7-
pub server_error_response: IntCounter,
8-
pub user_error_response: IntCounter,
6+
pub time_elapsed_db_post: prometheus::Histogram,
97
}
108

119
impl GatewayMetrics {
1210
pub fn start(metrics_port: u16) -> anyhow::Result<Self> {
1311
let registry = prometheus::Registry::new();
1412

15-
let success_response =
16-
register_int_counter!(opts!("success_response_count", "Success Responses"))?;
13+
let time_elapsed_db_post = register_histogram!(histogram_opts!(
14+
"time_elapsed_db_post",
15+
"Time elapsed in DB posts"
16+
))?;
1717

18-
let server_error_response =
19-
register_int_counter!(opts!("server_error_response_count", "Success Responses"))?;
20-
21-
let user_error_response =
22-
register_int_counter!(opts!("user_error_response_count", "Success Responses"))?;
23-
24-
registry.register(Box::new(success_response.clone()))?;
25-
registry.register(Box::new(server_error_response.clone()))?;
26-
registry.register(Box::new(user_error_response.clone()))?;
18+
registry.register(Box::new(time_elapsed_db_post.clone()))?;
2719

2820
let metrics_route = warp::path!("metrics")
2921
.and(warp::any().map(move || registry.clone()))
@@ -36,9 +28,7 @@ impl GatewayMetrics {
3628
});
3729

3830
Ok(Self {
39-
success_response,
40-
server_error_response,
41-
user_error_response,
31+
time_elapsed_db_post,
4232
})
4333
}
4434

@@ -58,15 +48,7 @@ impl GatewayMetrics {
5848
Ok(res)
5949
}
6050

61-
pub fn inc_success_response(&self) {
62-
self.success_response.inc();
63-
}
64-
65-
pub fn inc_server_error_response(&self) {
66-
self.server_error_response.inc();
67-
}
68-
69-
pub fn inc_user_error_response(&self) {
70-
self.user_error_response.inc();
51+
pub fn register_db_response_time_post(&self, value: f64) {
52+
self.time_elapsed_db_post.observe(value);
7153
}
7254
}

grafana/provisioning/dashboards/aligned/aggregation_mode_gateway.json

Lines changed: 192 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
"uid": "prometheus"
107107
},
108108
"editorMode": "code",
109-
"expr": "sum(\n rate(api_response_code{statuscode=~\"4..\"}[$__range])\n)",
109+
"expr": "sum(\n rate(api_response_code{statuscode=~\"4..\"}[5m])\n)",
110110
"instant": false,
111111
"legendFormat": "__auto",
112112
"range": true,
@@ -200,7 +200,7 @@
200200
"uid": "prometheus"
201201
},
202202
"editorMode": "code",
203-
"expr": "sum(\n rate(api_response_code{statuscode=~\"5..\"}[$__range])\n)",
203+
"expr": "sum(\n rate(api_response_code{statuscode=~\"5..\"}[100m])\n)",
204204
"instant": false,
205205
"legendFormat": "__auto",
206206
"range": true,
@@ -303,6 +303,194 @@
303303
],
304304
"title": "Success response count",
305305
"type": "timeseries"
306+
},
307+
{
308+
"datasource": {
309+
"type": "prometheus",
310+
"uid": "prometheus"
311+
},
312+
"fieldConfig": {
313+
"defaults": {
314+
"color": {
315+
"mode": "palette-classic"
316+
},
317+
"custom": {
318+
"axisCenteredZero": false,
319+
"axisColorMode": "text",
320+
"axisLabel": "",
321+
"axisPlacement": "auto",
322+
"barAlignment": 0,
323+
"drawStyle": "line",
324+
"fillOpacity": 0,
325+
"gradientMode": "none",
326+
"hideFrom": {
327+
"legend": false,
328+
"tooltip": false,
329+
"viz": false
330+
},
331+
"insertNulls": false,
332+
"lineInterpolation": "linear",
333+
"lineWidth": 1,
334+
"pointSize": 5,
335+
"scaleDistribution": {
336+
"type": "linear"
337+
},
338+
"showPoints": "auto",
339+
"spanNulls": false,
340+
"stacking": {
341+
"group": "A",
342+
"mode": "none"
343+
},
344+
"thresholdsStyle": {
345+
"mode": "off"
346+
}
347+
},
348+
"mappings": [],
349+
"thresholds": {
350+
"mode": "absolute",
351+
"steps": [
352+
{
353+
"color": "green",
354+
"value": null
355+
},
356+
{
357+
"color": "red",
358+
"value": 80
359+
}
360+
]
361+
}
362+
},
363+
"overrides": []
364+
},
365+
"gridPos": {
366+
"h": 8,
367+
"w": 12,
368+
"x": 0,
369+
"y": 8
370+
},
371+
"id": 4,
372+
"options": {
373+
"legend": {
374+
"calcs": [],
375+
"displayMode": "list",
376+
"placement": "bottom",
377+
"showLegend": true
378+
},
379+
"tooltip": {
380+
"mode": "single",
381+
"sort": "none"
382+
}
383+
},
384+
"targets": [
385+
{
386+
"datasource": {
387+
"type": "prometheus",
388+
"uid": "prometheus"
389+
},
390+
"editorMode": "code",
391+
"expr": "histogram_quantile(0.50, sum by (le) (rate(time_elapsed_db_post_bucket[$__rate_interval])))",
392+
"instant": false,
393+
"legendFormat": "__auto",
394+
"range": true,
395+
"refId": "A"
396+
}
397+
],
398+
"title": "DB posts latency (p50)",
399+
"type": "timeseries"
400+
},
401+
{
402+
"datasource": {
403+
"type": "prometheus",
404+
"uid": "prometheus"
405+
},
406+
"fieldConfig": {
407+
"defaults": {
408+
"color": {
409+
"mode": "palette-classic"
410+
},
411+
"custom": {
412+
"axisCenteredZero": false,
413+
"axisColorMode": "text",
414+
"axisLabel": "",
415+
"axisPlacement": "auto",
416+
"barAlignment": 0,
417+
"drawStyle": "line",
418+
"fillOpacity": 0,
419+
"gradientMode": "none",
420+
"hideFrom": {
421+
"legend": false,
422+
"tooltip": false,
423+
"viz": false
424+
},
425+
"insertNulls": false,
426+
"lineInterpolation": "linear",
427+
"lineWidth": 1,
428+
"pointSize": 5,
429+
"scaleDistribution": {
430+
"type": "linear"
431+
},
432+
"showPoints": "auto",
433+
"spanNulls": false,
434+
"stacking": {
435+
"group": "A",
436+
"mode": "none"
437+
},
438+
"thresholdsStyle": {
439+
"mode": "off"
440+
}
441+
},
442+
"mappings": [],
443+
"thresholds": {
444+
"mode": "absolute",
445+
"steps": [
446+
{
447+
"color": "green",
448+
"value": null
449+
},
450+
{
451+
"color": "red",
452+
"value": 80
453+
}
454+
]
455+
}
456+
},
457+
"overrides": []
458+
},
459+
"gridPos": {
460+
"h": 8,
461+
"w": 12,
462+
"x": 12,
463+
"y": 8
464+
},
465+
"id": 5,
466+
"options": {
467+
"legend": {
468+
"calcs": [],
469+
"displayMode": "list",
470+
"placement": "bottom",
471+
"showLegend": true
472+
},
473+
"tooltip": {
474+
"mode": "single",
475+
"sort": "none"
476+
}
477+
},
478+
"targets": [
479+
{
480+
"datasource": {
481+
"type": "prometheus",
482+
"uid": "prometheus"
483+
},
484+
"editorMode": "code",
485+
"expr": "sum(rate(time_elapsed_db_post_count[$__rate_interval]))",
486+
"instant": false,
487+
"legendFormat": "__auto",
488+
"range": true,
489+
"refId": "A"
490+
}
491+
],
492+
"title": "DB posts throughput",
493+
"type": "timeseries"
306494
}
307495
],
308496
"refresh": "",
@@ -313,8 +501,8 @@
313501
"list": []
314502
},
315503
"time": {
316-
"from": "now-5m",
317-
"to": "now"
504+
"from": "now-19m",
505+
"to": "now-15m"
318506
},
319507
"timepicker": {},
320508
"timezone": "",

0 commit comments

Comments
 (0)