Skip to content

Commit 92c0e16

Browse files
committed
Implement Velocity platform and task scheduler, add metrics service integration
1 parent be133e6 commit 92c0e16

File tree

6 files changed

+141
-3
lines changed

6 files changed

+141
-3
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,13 @@ private SyncMetricsSnapshot collectSnapshot() {
102102
try {
103103
double[] tps = ServerPulseProvider.get().getTPSRetriever().getTPS();
104104
int playerCount = platform.getOnlinePlayerCount();
105-
Map<String, WorldData> worldsData = platform.getWorldsData();
105+
106+
Map<String, WorldData> worldsData = null;
107+
try {
108+
worldsData = platform.getWorldsData();
109+
} catch (UnsupportedOperationException e) {
110+
worldsData = Map.of();
111+
}
106112

107113
return new SyncMetricsSnapshot(tps, playerCount, worldsData);
108114
} catch (Exception e) {

velocity/src/main/java/it/renvins/serverpulse/velocity/ServerPulseVelocity.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,23 @@
44
import com.google.inject.Inject;
55
import com.velocitypowered.api.plugin.Plugin;
66
import com.velocitypowered.api.proxy.ProxyServer;
7+
import it.renvins.serverpulse.api.service.IDatabaseService;
8+
import it.renvins.serverpulse.api.service.IMetricsService;
9+
import it.renvins.serverpulse.common.DatabaseService;
10+
import it.renvins.serverpulse.common.MetricsService;
11+
import lombok.Getter;
712
import org.slf4j.Logger;
813

914
@Plugin(id = "serverpulse", name = "ServerPulse", version = "0.2.0-SNAPSHOT",
1015
description = "Effortless Minecraft performance monitoring with pre-configured Grafana/InfluxDB via Docker.", authors = {"renvins"})
1116
public class ServerPulseVelocity {
1217

13-
private final ProxyServer server;
18+
@Getter private final ProxyServer server;
1419
private final Logger logger;
1520

21+
private IDatabaseService databaseService;
22+
private IMetricsService metricsService;
23+
1624
@Inject
1725
public ServerPulseVelocity(ProxyServer server, Logger logger) {
1826
this.server = server;
@@ -21,6 +29,7 @@ public ServerPulseVelocity(ProxyServer server, Logger logger) {
2129

2230
@Subscribe
2331
public void onProxyInitialization() {
24-
32+
this.databaseService = new DatabaseService();
33+
this.metricsService = new MetricsService();
2534
}
2635
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package it.renvins.serverpulse.velocity;
2+
3+
import it.renvins.serverpulse.api.ServerPulseAPI;
4+
import it.renvins.serverpulse.api.metrics.IDiskRetriever;
5+
import it.renvins.serverpulse.api.metrics.IPingRetriever;
6+
import it.renvins.serverpulse.api.metrics.ITPSRetriever;
7+
import it.renvins.serverpulse.api.service.IDatabaseService;
8+
import it.renvins.serverpulse.api.service.IMetricsService;
9+
10+
public class ServerPulseVelocityAPI implements ServerPulseAPI {
11+
12+
@Override
13+
public IDatabaseService getDatabaseService() {
14+
return null;
15+
}
16+
17+
@Override
18+
public IMetricsService getMetricsService() {
19+
return null;
20+
}
21+
22+
@Override
23+
public ITPSRetriever getTPSRetriever() {
24+
return null;
25+
}
26+
27+
@Override
28+
public IDiskRetriever getDiskRetriever() {
29+
return null;
30+
}
31+
32+
@Override
33+
public IPingRetriever getPingRetriever() {
34+
return null;
35+
}
36+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package it.renvins.serverpulse.velocity.platform;
2+
3+
import it.renvins.serverpulse.common.platform.Platform;
4+
import it.renvins.serverpulse.velocity.ServerPulseVelocity;
5+
import lombok.RequiredArgsConstructor;
6+
7+
@RequiredArgsConstructor
8+
public class VelocityPlatform implements Platform {
9+
10+
private final ServerPulseVelocity plugin;
11+
12+
@Override
13+
public boolean isEnabled() {
14+
return !plugin.getServer().isShuttingDown();
15+
}
16+
17+
@Override
18+
public void disable() {
19+
plugin.getServer().shutdown();
20+
}
21+
22+
@Override
23+
public boolean isPrimaryThread() {
24+
return true;
25+
}
26+
27+
@Override
28+
public int getOnlinePlayerCount() {
29+
return plugin.getServer().getAllPlayers().size();
30+
}
31+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package it.renvins.serverpulse.velocity.scheduler;
2+
3+
import java.util.concurrent.TimeUnit;
4+
5+
import it.renvins.serverpulse.common.scheduler.Task;
6+
import it.renvins.serverpulse.common.scheduler.TaskScheduler;
7+
import it.renvins.serverpulse.velocity.ServerPulseVelocity;
8+
import lombok.RequiredArgsConstructor;
9+
10+
@RequiredArgsConstructor
11+
public class VelocityTaskScheduler implements TaskScheduler {
12+
13+
private final ServerPulseVelocity plugin;
14+
15+
@Override
16+
public void runAsync(Runnable task) {
17+
plugin.getServer().getScheduler().buildTask(plugin, task).schedule();
18+
}
19+
20+
@Override
21+
public Task runTaskTimerAsync(Runnable task, long delayTicks, long periodTicks) {
22+
return new VelocityTaskWrapper(plugin.getServer().getScheduler().buildTask(plugin, task)
23+
.delay(delayTicks / 20, TimeUnit.SECONDS)
24+
.repeat(periodTicks / 20, TimeUnit.SECONDS)
25+
.schedule());
26+
}
27+
28+
@Override
29+
public Task runTaskLaterAsync(Runnable task, long delayTicks) {
30+
return new VelocityTaskWrapper(plugin.getServer().getScheduler().buildTask(plugin, task)
31+
.delay(delayTicks / 20, TimeUnit.SECONDS)
32+
.schedule());
33+
}
34+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package it.renvins.serverpulse.velocity.scheduler;
2+
3+
import com.velocitypowered.api.scheduler.ScheduledTask;
4+
import com.velocitypowered.api.scheduler.TaskStatus;
5+
import it.renvins.serverpulse.common.scheduler.Task;
6+
import lombok.RequiredArgsConstructor;
7+
8+
@RequiredArgsConstructor
9+
public class VelocityTaskWrapper implements Task {
10+
11+
private final ScheduledTask task;
12+
13+
@Override
14+
public void cancel() {
15+
task.cancel();
16+
}
17+
18+
@Override
19+
public boolean isCancelled() {
20+
return task.status() == TaskStatus.CANCELLED;
21+
}
22+
}

0 commit comments

Comments
 (0)