Skip to content

Commit 0da9c03

Browse files
pfreixesdjc
authored andcommitted
Adds new connections_created statistic
With the new `connections_created` statistic users can know how many connections have been created by the pool.
1 parent 8ad8b75 commit 0da9c03

File tree

4 files changed

+27
-0
lines changed

4 files changed

+27
-0
lines changed

bb8/src/api.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ pub struct Statistics {
101101
pub get_timed_out: u64,
102102
/// Total time accumulated waiting for a connection.
103103
pub get_wait_time: Duration,
104+
/// Total connections created.
105+
pub connections_created: u64,
104106
/// Total connections that were closed due to be in broken state.
105107
pub connections_closed_broken: u64,
106108
/// Total connections that were closed due to be considered invalid.

bb8/src/inner.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ where
196196
.internals
197197
.lock()
198198
.put(conn, Some(approval), self.inner.clone());
199+
self.inner.statistics.record(StatsKind::Created);
199200
return Ok(());
200201
}
201202
Err(e) => {

bb8/src/internals.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ pub(crate) struct AtomicStatistics {
272272
pub(crate) get_waited: AtomicU64,
273273
pub(crate) get_timed_out: AtomicU64,
274274
pub(crate) get_wait_time_micros: AtomicU64,
275+
pub(crate) connections_created: AtomicU64,
275276
pub(crate) connections_closed_broken: AtomicU64,
276277
pub(crate) connections_closed_invalid: AtomicU64,
277278
pub(crate) connections_closed_max_lifetime: AtomicU64,
@@ -295,6 +296,7 @@ impl AtomicStatistics {
295296

296297
pub(crate) fn record(&self, kind: StatsKind) {
297298
match kind {
299+
StatsKind::Created => &self.connections_created,
298300
StatsKind::ClosedBroken => &self.connections_closed_broken,
299301
StatsKind::ClosedInvalid => &self.connections_closed_invalid,
300302
}
@@ -320,6 +322,7 @@ impl From<&AtomicStatistics> for Statistics {
320322
get_waited: item.get_waited.load(Ordering::SeqCst),
321323
get_timed_out: item.get_timed_out.load(Ordering::SeqCst),
322324
get_wait_time: Duration::from_micros(item.get_wait_time_micros.load(Ordering::SeqCst)),
325+
connections_created: item.connections_created.load(Ordering::SeqCst),
323326
connections_closed_broken: item.connections_closed_broken.load(Ordering::SeqCst),
324327
connections_closed_invalid: item.connections_closed_invalid.load(Ordering::SeqCst),
325328
connections_closed_max_lifetime: item
@@ -339,6 +342,7 @@ pub(crate) enum StatsGetKind {
339342
}
340343

341344
pub(crate) enum StatsKind {
345+
Created,
342346
ClosedBroken,
343347
ClosedInvalid,
344348
}

bb8/tests/test.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -992,3 +992,23 @@ async fn test_state_get_contention() {
992992
assert_eq!(statistics.get_waited, 1);
993993
assert!(statistics.get_wait_time > Duration::from_micros(0));
994994
}
995+
996+
#[tokio::test]
997+
async fn test_statistics_connections_created() {
998+
let pool = Pool::builder()
999+
.max_size(1)
1000+
.min_idle(1)
1001+
.build(OkManager::<FakeConnection>::new())
1002+
.await
1003+
.unwrap();
1004+
let (tx1, rx1) = oneshot::channel();
1005+
let clone = pool.clone();
1006+
tokio::spawn(async move {
1007+
let _ = clone.get().await.unwrap();
1008+
tx1.send(()).unwrap();
1009+
});
1010+
// wait until finished.
1011+
rx1.await.unwrap();
1012+
1013+
assert_eq!(pool.state().statistics.connections_created, 1);
1014+
}

0 commit comments

Comments
 (0)