This is an automated email from the ASF dual-hosted git repository.

jianglongtao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 0886c357edf Refactor ShardingSphereDriverUtils (#30257)
0886c357edf is described below

commit 0886c357edf337f23de7ad0685348e40d0358b29
Author: jiangML <[email protected]>
AuthorDate: Fri Feb 23 17:28:43 2024 +0800

    Refactor ShardingSphereDriverUtils (#30257)
    
    * Refactor ShardingSphereDriverUtils
    
    * Optimize ShardingSphereDriverUtils
    
    * Fix checkstyle error
---
 .../agent/plugin/core/context/PluginContext.java   | 27 ++++-----------------
 .../core/util/ShardingSphereDriverUtils.java       | 28 +++++++++++++++++++---
 .../impl/jdbc/JDBCMetaDataInfoExporter.java        | 13 ++++------
 .../core/exporter/impl/jdbc/JDBCStateExporter.java | 13 ++++------
 4 files changed, 38 insertions(+), 43 deletions(-)

diff --git 
a/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/context/PluginContext.java
 
b/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/context/PluginContext.java
index 68496405788..1649eecf5ba 100644
--- 
a/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/context/PluginContext.java
+++ 
b/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/context/PluginContext.java
@@ -21,16 +21,12 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.apache.shardingsphere.agent.plugin.core.util.AgentReflectionUtils;
-import org.apache.shardingsphere.driver.ShardingSphereDriver;
-import org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache;
+import 
org.apache.shardingsphere.agent.plugin.core.util.ShardingSphereDriverUtils;
+import 
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 
-import javax.sql.DataSource;
-import java.sql.Driver;
-import java.sql.DriverManager;
-import java.util.Enumeration;
 import java.util.Map;
 import java.util.Optional;
 
@@ -77,22 +73,9 @@ public final class PluginContext {
         if (isEnhancedForProxy) {
             return 
Optional.ofNullable(ProxyContext.getInstance().getContextManager());
         }
-        Optional<ShardingSphereDriver> shardingSphereDriver = 
getShardingSphereDriver();
-        if (shardingSphereDriver.isPresent()) {
-            DriverDataSourceCache dataSourceCache = 
AgentReflectionUtils.getFieldValue(shardingSphereDriver.get(), 
"dataSourceCache");
-            Map<String, DataSource> dataSourceMap = 
AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap");
-            return dataSourceMap.isEmpty() ? Optional.empty() : 
Optional.ofNullable(AgentReflectionUtils.getFieldValue(dataSourceMap.values().iterator().next(),
 "contextManager"));
-        }
-        return Optional.empty();
-    }
-    
-    private Optional<ShardingSphereDriver> getShardingSphereDriver() {
-        Enumeration<Driver> driverEnumeration = DriverManager.getDrivers();
-        while (driverEnumeration.hasMoreElements()) {
-            Driver driver = driverEnumeration.nextElement();
-            if (driver instanceof ShardingSphereDriver) {
-                return Optional.of((ShardingSphereDriver) driver);
-            }
+        Optional<Map<String, ShardingSphereDataSource>> dataSourceMap = 
ShardingSphereDriverUtils.getShardingSphereDataSources();
+        if (dataSourceMap.isPresent() && !dataSourceMap.get().isEmpty()) {
+            return 
Optional.ofNullable(AgentReflectionUtils.getFieldValue(dataSourceMap.get().values().iterator().next(),
 "contextManager"));
         }
         return Optional.empty();
     }
diff --git 
a/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/util/ShardingSphereDriverUtils.java
 
b/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/util/ShardingSphereDriverUtils.java
index 2be08e87a01..d1c90e39ad6 100644
--- 
a/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/util/ShardingSphereDriverUtils.java
+++ 
b/agent/plugins/core/src/main/java/org/apache/shardingsphere/agent/plugin/core/util/ShardingSphereDriverUtils.java
@@ -20,10 +20,16 @@ package org.apache.shardingsphere.agent.plugin.core.util;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.driver.ShardingSphereDriver;
+import 
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
+import org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache;
 
+import javax.sql.DataSource;
 import java.sql.Driver;
 import java.sql.DriverManager;
 import java.util.Enumeration;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
 
 /**
@@ -33,11 +39,27 @@ import java.util.Optional;
 public final class ShardingSphereDriverUtils {
     
     /**
-     * Get sharding sphere driver.
+     * Get ShardingSphere data sources.
      *
-     * @return ShardingSphereDriver
+     * @return got data source
      */
-    public static Optional<ShardingSphereDriver> getShardingSphereDriver() {
+    public static Optional<Map<String, ShardingSphereDataSource>> 
getShardingSphereDataSources() {
+        Optional<ShardingSphereDriver> driver = getShardingSphereDriver();
+        if (driver.isPresent()) {
+            DriverDataSourceCache dataSourceCache = 
AgentReflectionUtils.getFieldValue(driver.get(), "dataSourceCache");
+            Map<String, DataSource> dataSourceMap = 
AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap");
+            Map<String, ShardingSphereDataSource> result = new 
LinkedHashMap<>();
+            for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
+                if (entry.getValue() instanceof ShardingSphereDataSource) {
+                    result.put(entry.getKey(), (ShardingSphereDataSource) 
entry.getValue());
+                }
+            }
+            return Optional.of(result);
+        }
+        return Optional.empty();
+    }
+    
+    private static Optional<ShardingSphereDriver> getShardingSphereDriver() {
         Enumeration<Driver> driverEnumeration = DriverManager.getDrivers();
         while (driverEnumeration.hasMoreElements()) {
             Driver driver = driverEnumeration.nextElement();
diff --git 
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCMetaDataInfoExporter.java
 
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCMetaDataInfoExporter.java
index ed249b6955f..415bb1251a3 100644
--- 
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCMetaDataInfoExporter.java
+++ 
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCMetaDataInfoExporter.java
@@ -24,12 +24,9 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeM
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.exporter.MetricsExporter;
-import org.apache.shardingsphere.driver.ShardingSphereDriver;
 import 
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
-import org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 
-import javax.sql.DataSource;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
@@ -47,16 +44,14 @@ public final class JDBCMetaDataInfoExporter implements 
MetricsExporter {
     
     @Override
     public Optional<GaugeMetricFamilyMetricsCollector> export(final String 
pluginType) {
-        Optional<ShardingSphereDriver> driver = 
ShardingSphereDriverUtils.getShardingSphereDriver();
-        if (!driver.isPresent()) {
+        Optional<Map<String, ShardingSphereDataSource>> dataSourceMap = 
ShardingSphereDriverUtils.getShardingSphereDataSources();
+        if (!dataSourceMap.isPresent()) {
             return Optional.empty();
         }
         GaugeMetricFamilyMetricsCollector result = 
MetricsCollectorRegistry.get(config, pluginType);
         result.cleanMetrics();
-        DriverDataSourceCache dataSourceCache = 
AgentReflectionUtils.getFieldValue(driver.get(), "dataSourceCache");
-        Map<String, DataSource> dataSourceMap = 
AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap");
-        for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
-            ShardingSphereDataSource dataSource = (ShardingSphereDataSource) 
entry.getValue();
+        for (Entry<String, ShardingSphereDataSource> entry : 
dataSourceMap.get().entrySet()) {
+            ShardingSphereDataSource dataSource = entry.getValue();
             String databaseName = 
AgentReflectionUtils.getFieldValue(dataSource, "databaseName");
             ContextManager contextManager = 
AgentReflectionUtils.getFieldValue(dataSource, "contextManager");
             result.addMetric(Arrays.asList(databaseName, 
"storage_unit_count"), contextManager.getStorageUnits(databaseName).size());
diff --git 
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCStateExporter.java
 
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCStateExporter.java
index 16c5866d7c4..6572582cfea 100644
--- 
a/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCStateExporter.java
+++ 
b/agent/plugins/metrics/core/src/main/java/org/apache/shardingsphere/agent/plugin/metrics/core/exporter/impl/jdbc/JDBCStateExporter.java
@@ -24,12 +24,9 @@ import 
org.apache.shardingsphere.agent.plugin.metrics.core.collector.type.GaugeM
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricCollectorType;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.config.MetricConfiguration;
 import 
org.apache.shardingsphere.agent.plugin.metrics.core.exporter.MetricsExporter;
-import org.apache.shardingsphere.driver.ShardingSphereDriver;
 import 
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
-import org.apache.shardingsphere.driver.jdbc.core.driver.DriverDataSourceCache;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 
-import javax.sql.DataSource;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -44,16 +41,14 @@ public final class JDBCStateExporter implements 
MetricsExporter {
     
     @Override
     public Optional<GaugeMetricFamilyMetricsCollector> export(final String 
pluginType) {
-        Optional<ShardingSphereDriver> driver = 
ShardingSphereDriverUtils.getShardingSphereDriver();
-        if (!driver.isPresent()) {
+        Optional<Map<String, ShardingSphereDataSource>> dataSourceMap = 
ShardingSphereDriverUtils.getShardingSphereDataSources();
+        if (!dataSourceMap.isPresent()) {
             return Optional.empty();
         }
         GaugeMetricFamilyMetricsCollector result = 
MetricsCollectorRegistry.get(config, pluginType);
         result.cleanMetrics();
-        DriverDataSourceCache dataSourceCache = 
AgentReflectionUtils.getFieldValue(driver.get(), "dataSourceCache");
-        Map<String, DataSource> dataSourceMap = 
AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap");
-        for (Entry<String, DataSource> entry : dataSourceMap.entrySet()) {
-            ShardingSphereDataSource dataSource = (ShardingSphereDataSource) 
entry.getValue();
+        for (Entry<String, ShardingSphereDataSource> entry : 
dataSourceMap.get().entrySet()) {
+            ShardingSphereDataSource dataSource = entry.getValue();
             ContextManager contextManager = 
AgentReflectionUtils.getFieldValue(dataSource, "contextManager");
             result.addMetric(Collections.emptyList(), 
contextManager.getInstanceContext().getInstance().getState().getCurrentState().ordinal());
         }

Reply via email to