1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| package com.weimob.mp.decoration.boot.config;
import com.alibaba.druid.pool.DruidDataSource; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry;
import javax.sql.DataSource; import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.function.ToDoubleFunction;
public class DruidCollector { private static final String LABEL_NAME = "pool";
private final Map<String, DataSource> dataSourceMap;
private final MeterRegistry registry;
DruidCollector(Map<String, DataSource> dataSourceMap, MeterRegistry registry) { this.registry = registry; this.dataSourceMap = dataSourceMap; }
void register() throws SQLException{ this.dataSourceMap.forEach((key,dataSource) -> {
DruidDataSource druidDataSource = (DruidDataSource)dataSource; createGauge(key,druidDataSource, "druid_initial_size", "Initial size", (datasource) -> (double) druidDataSource.getInitialSize()); createGauge(key,druidDataSource, "druid_min_idle", "Min idle", datasource -> (double) druidDataSource.getMinIdle()); createGauge(key,druidDataSource, "druid_max_active", "Max active", datasource -> (double) druidDataSource.getMaxActive());
createGauge(key,druidDataSource, "druid_active_count", "Active count", datasource -> (double) druidDataSource.getActiveCount()); createGauge(key,druidDataSource, "druid_active_peak", "Active peak", datasource -> (double) druidDataSource.getActivePeak()); createGauge(key,druidDataSource, "druid_pooling_peak", "Pooling peak", datasource -> (double) druidDataSource.getPoolingPeak()); createGauge(key,druidDataSource, "druid_pooling_count", "Pooling count", datasource -> (double) druidDataSource.getPoolingCount()); createGauge(key,druidDataSource, "druid_wait_thread_count", "Wait thread count", datasource -> (double) druidDataSource.getWaitThreadCount());
createGauge(key,druidDataSource, "druid_not_empty_wait_count", "Not empty wait count", datasource -> (double) druidDataSource.getNotEmptyWaitCount()); createGauge(key,druidDataSource, "druid_not_empty_wait_millis", "Not empty wait millis", datasource -> (double) druidDataSource.getNotEmptyWaitMillis()); createGauge(key,druidDataSource, "druid_not_empty_thread_count", "Not empty thread count", datasource -> (double) druidDataSource.getNotEmptyWaitThreadCount());
createGauge(key,druidDataSource, "druid_logic_connect_count", "Logic connect count", datasource -> (double) druidDataSource.getConnectCount()); createGauge(key,druidDataSource, "druid_logic_close_count", "Logic close count", datasource -> (double) druidDataSource.getCloseCount()); createGauge(key,druidDataSource, "druid_logic_connect_error_count", "Logic connect error count", datasource -> (double) druidDataSource.getConnectErrorCount()); createGauge(key,druidDataSource, "druid_physical_connect_count", "Physical connect count", datasource -> (double) druidDataSource.getCreateCount()); createGauge(key,druidDataSource, "druid_physical_close_count", "Physical close count", datasource -> (double) druidDataSource.getDestroyCount()); createGauge(key,druidDataSource, "druid_physical_connect_error_count", "Physical connect error count", datasource -> (double) druidDataSource.getCreateErrorCount());
createGauge(key,druidDataSource, "druid_error_count", "Error count", datasource -> (double) druidDataSource.getErrorCount()); createGauge(key,druidDataSource, "druid_execute_count", "Execute count", datasource -> (double) druidDataSource.getExecuteCount()); createGauge(key,druidDataSource, "druid_start_transaction_count", "Start transaction count", datasource -> (double) druidDataSource.getStartTransactionCount()); createGauge(key,druidDataSource, "druid_commit_count", "Commit count", datasource -> (double) druidDataSource.getCommitCount()); createGauge(key,druidDataSource, "druid_rollback_count", "Rollback count", datasource -> (double) druidDataSource.getRollbackCount());
createGauge(key,druidDataSource, "druid_prepared_statement_open_count", "Prepared statement open count", datasource -> (double) druidDataSource.getPreparedStatementCount()); createGauge(key,druidDataSource, "druid_prepared_statement_closed_count", "Prepared statement closed count", datasource -> (double) druidDataSource.getClosedPreparedStatementCount()); createGauge(key,druidDataSource, "druid_ps_cache_access_count", "PS cache access count", datasource -> (double) druidDataSource.getCachedPreparedStatementAccessCount()); createGauge(key,druidDataSource, "druid_ps_cache_hit_count", "PS cache hit count", datasource -> (double) druidDataSource.getCachedPreparedStatementHitCount()); createGauge(key,druidDataSource, "druid_ps_cache_miss_count", "PS cache miss count", datasource -> (double) druidDataSource.getCachedPreparedStatementMissCount());
createGauge(key,druidDataSource, "druid_max_wait", "Max wait", datasource -> (double) druidDataSource.getMaxWait()); createGauge(key,druidDataSource, "druid_max_wait_thread_count", "Max wait thread count", datasource -> (double) druidDataSource.getMaxWaitThreadCount()); createGauge(key,druidDataSource, "druid_login_timeout", "Login timeout", datasource -> (double) druidDataSource.getLoginTimeout()); createGauge(key,druidDataSource, "druid_query_timeout", "Query timeout", datasource -> (double) druidDataSource.getQueryTimeout()); createGauge(key,druidDataSource, "druid_transaction_query_timeout", "Transaction query timeout", datasource -> (double) druidDataSource.getTransactionQueryTimeout()); }); }
private void createGauge(String key,DruidDataSource weakRef, String metric, String help, ToDoubleFunction<DruidDataSource> measure) { Gauge.builder(metric, weakRef, measure) .description(help) .tag(LABEL_NAME, key) .register(this.registry); } }
|