-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConnectionPool.java
More file actions
116 lines (103 loc) · 4.54 KB
/
ConnectionPool.java
File metadata and controls
116 lines (103 loc) · 4.54 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package tc.oc.occ.database;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.concurrent.CompletableFuture;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.Nullable;
public class ConnectionPool {
private String connectionName;
private HikariDataSource dataSource;
public ConnectionPool(String name, DatabaseConfig configuration) {
this.connectionName = name;
reload(configuration);
}
public boolean isEnabled() {
return getPool() != null;
}
@Nullable
public HikariDataSource getPool() {
return dataSource;
}
public void close() {
if (this.dataSource != null) {
this.dataSource.close();
}
this.dataSource = null;
}
public void reload(DatabaseConfig configuration) {
close();
if (!configuration.isEnabled()) return;
HikariConfig config = new HikariConfig();
config.setJdbcUrl(configuration.getDatabaseURL());
config.setUsername(configuration.getDatabaseUsername());
config.setPassword(configuration.getDatabasePassword());
config.setMaximumPoolSize(configuration.getDatabaseMaxConnections());
config.addDataSourceProperty("serverTimezone", configuration.getDatabaseTimezone());
this.dataSource = new HikariDataSource(config);
}
public void sendStatus(CommandSender sender) {
CompletableFuture.runAsync(
() -> {
if (!isEnabled()) {
sender.sendMessage(
ChatColor.AQUA + connectionName + " database" + ChatColor.RED + " is not enabled!");
return;
}
try (Connection connection = dataSource.getConnection()) {
if (connection.isValid(5000)) {
DatabaseMetaData metaData = connection.getMetaData();
String productName = metaData.getDatabaseProductName();
String productVersion = metaData.getDatabaseProductVersion();
String driverName = metaData.getDriverName();
String driverVersion = metaData.getDriverVersion();
int maxConnections = dataSource.getMaximumPoolSize();
int idleConnections = dataSource.getHikariPoolMXBean().getIdleConnections();
int activeConnections = dataSource.getHikariPoolMXBean().getActiveConnections();
int totalConnections = dataSource.getHikariPoolMXBean().getTotalConnections();
long connectionTimeout = dataSource.getConnectionTimeout();
long validationTimeout = dataSource.getValidationTimeout();
sender.sendMessage(ChatColor.GREEN + "=== Database Info ===");
sender.sendMessage(
ChatColor.YELLOW + "Product Name: " + ChatColor.GOLD + productName);
sender.sendMessage(
ChatColor.YELLOW + "Product Version: " + ChatColor.GOLD + productVersion);
sender.sendMessage(ChatColor.YELLOW + "Driver Name: " + ChatColor.GOLD + driverName);
sender.sendMessage(
ChatColor.YELLOW + "Driver Version: " + ChatColor.GOLD + driverVersion);
sender.sendMessage(ChatColor.DARK_GREEN + "=== Connection Status ===");
sender.sendMessage(
ChatColor.DARK_AQUA + "Max Connections: " + ChatColor.AQUA + maxConnections);
sender.sendMessage(
ChatColor.DARK_AQUA + "Idle Connections: " + ChatColor.AQUA + idleConnections);
sender.sendMessage(
ChatColor.DARK_AQUA
+ "Active Connections: "
+ ChatColor.AQUA
+ activeConnections);
sender.sendMessage(
ChatColor.DARK_AQUA + "Total Connections: " + ChatColor.AQUA + totalConnections);
sender.sendMessage(
ChatColor.DARK_AQUA
+ "Connection Timeout: "
+ ChatColor.AQUA
+ connectionTimeout
+ "ms");
sender.sendMessage(
ChatColor.DARK_AQUA
+ "Validation Timeout: "
+ ChatColor.AQUA
+ validationTimeout
+ "ms");
} else {
sender.sendMessage(ChatColor.RED + "Database status: Disconnected");
}
} catch (SQLException e) {
sender.sendMessage(ChatColor.RED + "Error checking database status: " + e.getMessage());
}
});
}
}