2121import io .vertx .oracleclient .OracleConnectOptions ;
2222import io .vertx .sqlclient .SqlConnectOptions ;
2323import io .vertx .sqlclient .SqlConnection ;
24+ import io .vertx .sqlclient .impl .SingletonSupplier ;
25+ import io .vertx .sqlclient .impl .metrics .ClientMetricsProvider ;
26+ import io .vertx .sqlclient .impl .metrics .DynamicClientMetricsProvider ;
27+ import io .vertx .sqlclient .impl .metrics .SingleServerClientMetricsProvider ;
2428import io .vertx .sqlclient .spi .ConnectionFactory ;
2529import oracle .jdbc .OracleConnection ;
2630import oracle .jdbc .datasource .OracleDataSource ;
@@ -36,15 +40,39 @@ public class OracleConnectionFactory implements ConnectionFactory {
3640
3741 private final Supplier <? extends Future <? extends SqlConnectOptions >> options ;
3842 private final Map <JsonObject , OracleDataSource > datasources ;
43+ private final ClientMetricsProvider clientMetricsProvider ;
3944
4045 public OracleConnectionFactory (VertxInternal vertx , Supplier <? extends Future <? extends SqlConnectOptions >> options ) {
46+ VertxMetrics metrics = vertx .metricsSPI ();
47+ ClientMetricsProvider clientMetricsProvider ;
48+ if (metrics != null ) {
49+ if (options instanceof SingletonSupplier ) {
50+ SqlConnectOptions option = (SqlConnectOptions ) ((SingletonSupplier ) options ).unwrap ();
51+ ClientMetrics <?, ?, ?, ?> clientMetrics = metrics .createClientMetrics (option .getSocketAddress (), "sql" , option .getMetricsName ());
52+ clientMetricsProvider = new SingleServerClientMetricsProvider (clientMetrics );
53+ } else {
54+ clientMetricsProvider = new DynamicClientMetricsProvider (metrics );
55+ }
56+ } else {
57+ clientMetricsProvider = null ;
58+ }
59+ this .clientMetricsProvider = clientMetricsProvider ;
4160 this .options = options ;
4261 this .datasources = new HashMap <>();
4362 }
4463
64+ @ Override
65+ public ClientMetricsProvider metricsProvider () {
66+ return clientMetricsProvider ;
67+ }
68+
4569 @ Override
4670 public void close (Promise <Void > promise ) {
47- promise .complete ();
71+ if (clientMetricsProvider != null ) {
72+ clientMetricsProvider .close (promise );
73+ } else {
74+ promise .complete ();
75+ }
4876 }
4977
5078 @ Override
@@ -68,8 +96,7 @@ private OracleDataSource getDatasource(SqlConnectOptions options) {
6896 @ Override
6997 public Future <SqlConnection > connect (Context context , SqlConnectOptions options ) {
7098 OracleDataSource datasource = getDatasource (options );
71- VertxMetrics vertxMetrics = ((VertxInternal )context .owner ()).metricsSPI ();
72- ClientMetrics metrics = vertxMetrics != null ? vertxMetrics .createClientMetrics (options .getSocketAddress (), "sql" , options .getMetricsName ()) : null ;
99+ ClientMetrics metrics = clientMetricsProvider != null ? clientMetricsProvider .metricsFor (options ) : null ;
73100 ContextInternal ctx = (ContextInternal ) context ;
74101 return executeBlocking (context , () -> {
75102 OracleConnection orac = datasource .createConnectionBuilder ().build ();
0 commit comments