@@ -26,23 +26,32 @@ impl r2d2::HandleError<r2d2::Error> for ErrorHandler {
26
26
27
27
struct EventHandler {
28
28
logger : Logger ,
29
- gauge : Box < Gauge > ,
29
+ count_gauge : Box < Gauge > ,
30
+ wait_gauge : Box < Gauge > ,
30
31
wait_stats : PoolWaitStats ,
31
32
last_log : RwLock < Instant > ,
32
33
}
33
34
34
35
impl EventHandler {
35
36
fn new ( logger : Logger , registry : Arc < dyn MetricsRegistry > , wait_stats : PoolWaitStats ) -> Self {
36
- let gauge = registry
37
+ let count_gauge = registry
37
38
. new_gauge (
38
39
String :: from ( "store_connection_checkout_count" ) ,
39
40
String :: from ( "The number of Postgres connections currently checked out" ) ,
40
41
HashMap :: new ( ) ,
41
42
)
42
43
. expect ( "failed to create `store_connection_checkout_count` counter" ) ;
44
+ let wait_gauge = registry
45
+ . new_gauge (
46
+ String :: from ( "store_connection_wait_time_ms" ) ,
47
+ String :: from ( "Average connection wait time" ) ,
48
+ HashMap :: new ( ) ,
49
+ )
50
+ . expect ( "failed to create `store_connection_wait_time_ms` counter" ) ;
43
51
EventHandler {
44
52
logger,
45
- gauge,
53
+ count_gauge,
54
+ wait_gauge,
46
55
wait_stats,
47
56
last_log : RwLock :: new ( Instant :: now ( ) ) ,
48
57
}
@@ -62,15 +71,13 @@ impl EventHandler {
62
71
let wait_avg = {
63
72
let mut wait_stats = self . wait_stats . write ( ) . unwrap ( ) ;
64
73
wait_stats. add ( duration) ;
65
- if should_log {
66
- wait_stats. average ( )
67
- } else {
68
- None
69
- }
74
+ wait_stats. average ( )
70
75
} ;
71
- if let Some ( wait_avg) = wait_avg {
76
+ let wait_avg = wait_avg. map ( |wait_avg| wait_avg. as_millis ( ) ) . unwrap_or ( 0 ) ;
77
+ self . wait_gauge . set ( wait_avg as f64 ) ;
78
+ if should_log {
72
79
info ! ( self . logger, "Average connection wait time" ;
73
- "wait_ms" => wait_avg. as_millis ( ) ) ;
80
+ "wait_ms" => wait_avg) ;
74
81
}
75
82
}
76
83
}
@@ -85,7 +92,7 @@ impl HandleEvent for EventHandler {
85
92
fn handle_acquire ( & self , _: e:: AcquireEvent ) { }
86
93
fn handle_release ( & self , _: e:: ReleaseEvent ) { }
87
94
fn handle_checkout ( & self , event : e:: CheckoutEvent ) {
88
- self . gauge . inc ( ) ;
95
+ self . count_gauge . inc ( ) ;
89
96
self . add_wait_time ( event. duration ( ) ) ;
90
97
}
91
98
fn handle_timeout ( & self , event : e:: TimeoutEvent ) {
@@ -94,7 +101,7 @@ impl HandleEvent for EventHandler {
94
101
"wait_ms" => event. timeout( ) . as_millis( ) )
95
102
}
96
103
fn handle_checkin ( & self , _: e:: CheckinEvent ) {
97
- self . gauge . dec ( ) ;
104
+ self . count_gauge . dec ( ) ;
98
105
}
99
106
}
100
107
0 commit comments