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 672df186be8f8..5034312866095 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 @@ -73,10 +73,7 @@ public Optional getContextManager() { if (isEnhancedForProxy) { return Optional.ofNullable(ProxyContext.getInstance().getContextManager()); } - Optional> dataSourceMap = ShardingSphereDriverUtils.findShardingSphereDataSources(); - if (dataSourceMap.isPresent() && !dataSourceMap.get().isEmpty()) { - return Optional.ofNullable(AgentReflectionUtils.getFieldValue(dataSourceMap.get().values().iterator().next(), "contextManager")); - } - return Optional.empty(); + Map dataSourceMap = ShardingSphereDriverUtils.findShardingSphereDataSources(); + return dataSourceMap.isEmpty() ? Optional.empty() : Optional.ofNullable(AgentReflectionUtils.getFieldValue(dataSourceMap.values().iterator().next(), "contextManager")); } } 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 9e7bc95b01b03..f3c1a84062966 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 @@ -26,6 +26,7 @@ import javax.sql.DataSource; import java.sql.Driver; import java.sql.DriverManager; +import java.util.Collections; import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; @@ -43,22 +44,23 @@ public final class ShardingSphereDriverUtils { * * @return found data source */ - public static Optional> findShardingSphereDataSources() { - return findShardingSphereDriver().flatMap(ShardingSphereDriverUtils::findShardingSphereDataSources); + public static Map findShardingSphereDataSources() { + return findShardingSphereDriver().map(ShardingSphereDriverUtils::findShardingSphereDataSources).orElse(Collections.emptyMap()); } - private static Optional> findShardingSphereDataSources(final Driver driver) { + private static Map findShardingSphereDataSources(final Driver driver) { DriverDataSourceCache dataSourceCache = AgentReflectionUtils.getFieldValue(driver, "dataSourceCache"); Map dataSourceMap = AgentReflectionUtils.getFieldValue(dataSourceCache, "dataSourceMap"); - Map result = new LinkedHashMap<>(); + Map result = new LinkedHashMap<>(dataSourceMap.size(), 1F); for (Entry entry : dataSourceMap.entrySet()) { if (entry.getValue() instanceof ShardingSphereDataSource) { result.put(entry.getKey(), (ShardingSphereDataSource) entry.getValue()); } } - return Optional.of(result); + return result; } + @SuppressWarnings("UseOfJDBCDriverClass") private static Optional findShardingSphereDriver() { Enumeration driverEnumeration = DriverManager.getDrivers(); while (driverEnumeration.hasMoreElements()) { 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 4d615de677421..ef47df7f6b30f 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 @@ -44,13 +44,10 @@ public final class JDBCMetaDataInfoExporter implements MetricsExporter { @Override public Optional export(final String pluginType) { - Optional> dataSourceMap = ShardingSphereDriverUtils.findShardingSphereDataSources(); - if (!dataSourceMap.isPresent()) { - return Optional.empty(); - } + Map dataSourceMap = ShardingSphereDriverUtils.findShardingSphereDataSources(); GaugeMetricFamilyMetricsCollector result = MetricsCollectorRegistry.get(config, pluginType); result.cleanMetrics(); - for (Entry entry : dataSourceMap.get().entrySet()) { + for (Entry entry : dataSourceMap.entrySet()) { ShardingSphereDataSource dataSource = entry.getValue(); String databaseName = AgentReflectionUtils.getFieldValue(dataSource, "databaseName"); ContextManager contextManager = AgentReflectionUtils.getFieldValue(dataSource, "contextManager"); 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 1ea3598257a0a..e60b2dd3c01f9 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 @@ -41,13 +41,10 @@ public final class JDBCStateExporter implements MetricsExporter { @Override public Optional export(final String pluginType) { - Optional> dataSourceMap = ShardingSphereDriverUtils.findShardingSphereDataSources(); - if (!dataSourceMap.isPresent()) { - return Optional.empty(); - } + Map dataSourceMap = ShardingSphereDriverUtils.findShardingSphereDataSources(); GaugeMetricFamilyMetricsCollector result = MetricsCollectorRegistry.get(config, pluginType); result.cleanMetrics(); - for (Entry entry : dataSourceMap.get().entrySet()) { + for (Entry entry : dataSourceMap.entrySet()) { ShardingSphereDataSource dataSource = entry.getValue(); ContextManager contextManager = AgentReflectionUtils.getFieldValue(dataSource, "contextManager"); result.addMetric(Collections.emptyList(), contextManager.getComputeNodeInstanceContext().getInstance().getState().getCurrentState().ordinal());