@@ -181,6 +181,27 @@ private void dequeueMetric(Object metric) {
181181 }
182182 }
183183
184+ private Object beginMetric () {
185+ if (metrics != null ) {
186+ try {
187+ return metrics .begin ();
188+ } catch (Exception e ) {
189+ //
190+ }
191+ }
192+ return NO_METRICS ;
193+ }
194+
195+ private void endMetric (Object metric ) {
196+ if (metrics != null && metric != NO_METRICS ) {
197+ try {
198+ metrics .end (metric );
199+ } catch (Exception e ) {
200+ //
201+ }
202+ }
203+ }
204+
184205 // TODO : try optimize without promise
185206 public <R > void execute (CommandBase <R > cmd , Completable <R > handler ) {
186207 ContextInternal context = vertx .getOrCreateContext ();
@@ -191,6 +212,8 @@ public <R> void execute(CommandBase<R> cmd, Completable<R> handler) {
191212 dequeueMetric (metric );
192213 PooledConnection pooled = lease .get ();
193214 Connection conn = pooled .conn ;
215+ Object useMetric = beginMetric ();
216+
194217 Future <R > future ;
195218 if (afterAcquire != null ) {
196219 future = afterAcquire .apply (conn )
@@ -202,6 +225,7 @@ public <R> void execute(CommandBase<R> cmd, Completable<R> handler) {
202225 future = pp ;
203226 }
204227 return future .andThen (ar -> {
228+ endMetric (useMetric );
205229 pooled .refresh ();
206230 lease .recycle ();
207231 });
@@ -244,6 +268,7 @@ public void complete(Lease<PooledConnection> lease, Throwable failure) {
244268 private void handle (Lease <PooledConnection > lease ) {
245269 dequeueMetric (metric );
246270 PooledConnection pooled = lease .get ();
271+ pooled .usage = beginMetric ();
247272 pooled .lease = lease ;
248273 handler .succeed (pooled );
249274 }
@@ -303,6 +328,7 @@ public class PooledConnection implements Connection, Connection.Holder {
303328 private Holder holder ;
304329 private Promise <ConnectResult <PooledConnection >> poolCallback ;
305330 private Lease <PooledConnection > lease ;
331+ private Object usage ;
306332 public long idleEvictionTimestamp ;
307333 public long lifetimeEvictionTimestamp ;
308334
@@ -443,6 +469,7 @@ private void doClose(Holder holder, Completable<Void> promise) {
443469 }
444470
445471 private void cleanup (Completable <Void > promise ) {
472+ endMetric (usage );
446473 Lease <PooledConnection > l = this .lease ;
447474 this .lease = null ;
448475 refresh ();
0 commit comments