Skip to content

Commit 20b4803

Browse files
committed
Add PulseLogger interface and implementations for Bukkit and Velocity logging
1 parent 7f64c11 commit 20b4803

File tree

5 files changed

+91
-22
lines changed

5 files changed

+91
-22
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package it.renvins.serverpulse.bukkit.logger;
2+
3+
import java.util.logging.Level;
4+
import java.util.logging.Logger;
5+
6+
import it.renvins.serverpulse.common.logger.PulseLogger;
7+
import lombok.RequiredArgsConstructor;
8+
9+
@RequiredArgsConstructor
10+
public class BukkitLogger implements PulseLogger {
11+
12+
private final Logger logger;
13+
14+
@Override
15+
public void info(String message) {
16+
logger.info(message);
17+
}
18+
19+
@Override
20+
public void warning(String message) {
21+
logger.warning(message);
22+
}
23+
24+
@Override
25+
public void error(String message) {
26+
logger.severe(message);
27+
}
28+
29+
@Override
30+
public void error(String message, Throwable throwable) {
31+
logger.log(Level.SEVERE, message, throwable);
32+
}
33+
}

common/src/main/java/it/renvins/serverpulse/common/DatabaseService.java

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,21 @@
66
import java.net.http.HttpRequest;
77
import java.net.http.HttpResponse;
88
import java.time.Duration;
9-
import java.util.logging.Level;
10-
import java.util.logging.Logger;
119

1210
import com.influxdb.client.InfluxDBClient;
1311
import com.influxdb.client.InfluxDBClientFactory;
1412
import com.influxdb.client.WriteApi;
1513
import it.renvins.serverpulse.api.service.IDatabaseService;
1614
import it.renvins.serverpulse.common.config.DatabaseConfiguration;
15+
import it.renvins.serverpulse.common.logger.PulseLogger;
1716
import it.renvins.serverpulse.common.platform.Platform;
1817
import it.renvins.serverpulse.common.scheduler.Task;
1918
import it.renvins.serverpulse.common.scheduler.TaskScheduler;
2019
import lombok.Getter;
2120

2221
public class DatabaseService implements IDatabaseService {
2322

24-
private final Logger logger;
23+
private final PulseLogger logger;
2524
private final Platform platform;
2625

2726
private final DatabaseConfiguration configuration;
@@ -41,7 +40,7 @@ public class DatabaseService implements IDatabaseService {
4140
private volatile boolean isConnected = false;
4241
private volatile int retryCount = 0;
4342

44-
public DatabaseService(Logger logger, Platform platform, DatabaseConfiguration configuration, TaskScheduler scheduler) {
43+
public DatabaseService(PulseLogger logger, Platform platform, DatabaseConfiguration configuration, TaskScheduler scheduler) {
4544
this.logger = logger;
4645
this.platform = platform;
4746

@@ -57,7 +56,7 @@ public DatabaseService(Logger logger, Platform platform, DatabaseConfiguration c
5756
@Override
5857
public void load() {
5958
if (!checkConnectionData()) {
60-
logger.severe("InfluxDB connection data is missing or invalid. Disabling plugin...");
59+
logger.error("InfluxDB connection data is missing or invalid. Disabling plugin...");
6160
platform.disable();
6261
return;
6362
}
@@ -78,13 +77,13 @@ public void unload() {
7877
public boolean ping() {
7978
String url = configuration.getHost();
8079
if (url == null || url.isEmpty()) {
81-
logger.severe("InfluxDB URL is missing for ping...");
80+
logger.error("InfluxDB URL is missing for ping...");
8281
return false;
8382
}
8483

8584
// Ensure httpClient is initialized
8685
if (this.httpClient == null) {
87-
logger.severe("HttpClient not initialized for ping...");
86+
logger.error("HttpClient not initialized for ping...");
8887
this.httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build();
8988
}
9089

@@ -97,7 +96,7 @@ public boolean ping() {
9796
.timeout(Duration.ofSeconds(5)) // Add timeout specific to ping
9897
.build();
9998
} catch (IllegalArgumentException e) {
100-
logger.log(Level.SEVERE, "Invalid InfluxDB URL format for ping: " + url, e);
99+
logger.error("Invalid InfluxDB URL format for ping: " + url, e);
101100
return false;
102101
}
103102

@@ -112,7 +111,7 @@ public boolean ping() {
112111
logger.warning("InfluxDB ping timed out: " + e.getMessage());
113112
return false;
114113
} catch (Exception e) {
115-
logger.log(Level.SEVERE, "Error during InfluxDB ping: " + e.getMessage(), e);
114+
logger.error("Error during InfluxDB ping: " + e.getMessage(), e);
116115
return false;
117116
}
118117
}
@@ -170,7 +169,7 @@ private void connect() {
170169
}
171170
} catch (Exception e) {
172171
// Handle exceptions during InfluxDBClientFactory.create() or ping()
173-
logger.log(Level.SEVERE, "Failed to connect or ping InfluxDB: " + e.getMessage());
172+
logger.error("Failed to connect or ping InfluxDB: " + e.getMessage());
174173
this.isConnected = false;
175174
if (client != null) { // Ensure client is closed on exception
176175
client.close();
@@ -186,15 +185,15 @@ public void disconnect() {
186185
try {
187186
writeApi.close();
188187
} catch (Exception e) {
189-
logger.log(Level.WARNING, "Error closing InfluxDB WriteApi...", e);
188+
logger.error("Error closing InfluxDB WriteApi...", e);
190189
}
191190
writeApi = null;
192191
}
193192
if (client != null) {
194193
try {
195194
client.close();
196195
} catch (Exception e) {
197-
logger.log(Level.WARNING, "Error closing InfluxDB Client...", e);
196+
logger.error("Error closing InfluxDB Client...", e);
198197
}
199198
client = null;
200199
}
@@ -233,7 +232,7 @@ public synchronized void startRetryTaskIfNeeded() {
233232

234233
// Check retries *before* attempting connection
235234
if (retryCount >= MAX_RETRIES) {
236-
logger.severe("Max connection retries (" + MAX_RETRIES + ") reached. Disabling ServerPulse metrics...");
235+
logger.error("Max connection retries (" + MAX_RETRIES + ") reached. Disabling ServerPulse metrics...");
237236
stopRetryTask();
238237
disconnect(); // Clean up any partial connection
239238
// Schedule plugin disable on main thread
@@ -275,19 +274,19 @@ private boolean checkConnectionData() {
275274

276275
boolean valid = true;
277276
if (url == null || url.isEmpty()) {
278-
logger.severe("Missing or empty 'metrics.influxdb.url' in config...");
277+
logger.error("Missing or empty 'metrics.influxdb.url' in config...");
279278
valid = false;
280279
}
281280
if (bucket == null || bucket.isEmpty()) {
282-
logger.severe("Missing or empty 'metrics.influxdb.bucket' in config...");
281+
logger.error("Missing or empty 'metrics.influxdb.bucket' in config...");
283282
valid = false;
284283
}
285284
if (org == null || org.isEmpty()) {
286-
logger.severe("Missing or empty 'metrics.influxdb.org' in config...");
285+
logger.error("Missing or empty 'metrics.influxdb.org' in config...");
287286
valid = false;
288287
}
289288
if (token == null || token.isEmpty() || token.equals("my-token")) {
290-
logger.severe("Missing, empty, or default 'metrics.influxdb.token' in config...");
289+
logger.error("Missing, empty, or default 'metrics.influxdb.token' in config...");
291290
valid = false;
292291
}
293292
return valid;

common/src/main/java/it/renvins/serverpulse/common/MetricsService.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,21 @@
1717
import it.renvins.serverpulse.api.data.WorldData;
1818
import it.renvins.serverpulse.api.service.IMetricsService;
1919
import it.renvins.serverpulse.common.config.MetricsConfiguration;
20+
import it.renvins.serverpulse.common.logger.PulseLogger;
2021
import it.renvins.serverpulse.common.platform.Platform;
2122
import it.renvins.serverpulse.common.scheduler.TaskScheduler;
2223

2324
public class MetricsService implements IMetricsService {
2425

25-
private final Logger logger;
26+
private final PulseLogger logger;
2627

2728
private final Platform platform;
2829
private final MetricsConfiguration configuration;
2930

3031
private final TaskScheduler scheduler;
3132
private final Executor asyncExecutor;
3233

33-
public MetricsService(Logger logger, Platform platform, MetricsConfiguration configuration, TaskScheduler scheduler) {
34+
public MetricsService(PulseLogger logger, Platform platform, MetricsConfiguration configuration, TaskScheduler scheduler) {
3435
this.logger = logger;
3536

3637
this.platform = platform;
@@ -78,12 +79,12 @@ public void collectAndSendMetrics() {
7879
try {
7980
ServerPulseProvider.get().getDatabaseService().getWriteApi().writePoints(points);
8081
} catch (Exception e) {
81-
logger.log(Level.SEVERE, "Error sending metrics to InfluxDB...", e);
82+
logger.error("Error sending metrics to InfluxDB...", e);
8283
}
8384
}
8485
}, asyncExecutor)
8586
.exceptionally(ex -> {
86-
logger.log(Level.SEVERE, "Failed metrics pipeline stage...", ex);
87+
logger.error( "Failed metrics pipeline stage...", ex);
8788
return null;
8889
});
8990
}
@@ -113,7 +114,7 @@ private SyncMetricsSnapshot collectSnapshot() {
113114

114115
return new SyncMetricsSnapshot(tps, playerCount, worldsData);
115116
} catch (Exception e) {
116-
logger.severe("Unexpected error during sync data collection: " + e.getMessage());
117+
logger.error("Unexpected error during sync data collection: " + e.getMessage());
117118
// Return null or re-throw to signal failure to the CompletableFuture chain
118119
// Throwing is often cleaner as it goes directly to exceptionally()
119120
throw new RuntimeException("Sync data collection failed...", e);
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package it.renvins.serverpulse.common.logger;
2+
3+
public interface PulseLogger {
4+
5+
void info(String message);
6+
void warning(String message);
7+
8+
void error(String message);
9+
void error(String message, Throwable throwable);
10+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package it.renvins.serverpulse.velocity.logger;
2+
3+
import it.renvins.serverpulse.common.logger.PulseLogger;
4+
import lombok.RequiredArgsConstructor;
5+
import org.slf4j.Logger;
6+
7+
@RequiredArgsConstructor
8+
public class VelocityLogger implements PulseLogger {
9+
10+
private final Logger logger;
11+
12+
@Override
13+
public void info(String message) {
14+
logger.info(message);
15+
}
16+
17+
@Override
18+
public void warn(String message) {
19+
logger.warn(message);
20+
}
21+
22+
@Override
23+
public void error(String message, Throwable throwable) {
24+
logger.error(message, throwable);
25+
}
26+
}

0 commit comments

Comments
 (0)