From d6a7a43428a7d200dec777039a38530f4f0d47f5 Mon Sep 17 00:00:00 2001 From: Risto Lahtela <24460436+Rsl1122@users.noreply.github.com> Date: Sun, 12 Apr 2020 14:26:30 +0300 Subject: [PATCH] Made CPU, RAM and Disk gathering async Affects issues: - Fixed #1364 --- .../com/djrapitops/plan/BukkitTaskSystem.java | 18 ++- .../com/djrapitops/plan/BungeeTaskSystem.java | 20 ++- .../plan/gathering/timed/ProxyTPSCounter.java | 15 +-- .../gathering/timed/ServerTPSCounter.java | 15 +-- .../gathering/timed/SystemUsageBuffer.java | 124 ++++++++++++++++++ .../plan/gathering/timed/TPSCounter.java | 26 ---- .../com/djrapitops/plan/NukkitTaskSystem.java | 16 ++- .../com/djrapitops/plan/SpongeTaskSystem.java | 16 ++- .../djrapitops/plan/VelocityTaskSystem.java | 20 ++- 9 files changed, 217 insertions(+), 53 deletions(-) create mode 100644 Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/SystemUsageBuffer.java diff --git a/Plan/bukkit/src/main/java/com/djrapitops/plan/BukkitTaskSystem.java b/Plan/bukkit/src/main/java/com/djrapitops/plan/BukkitTaskSystem.java index 8f450617f..7a53499eb 100644 --- a/Plan/bukkit/src/main/java/com/djrapitops/plan/BukkitTaskSystem.java +++ b/Plan/bukkit/src/main/java/com/djrapitops/plan/BukkitTaskSystem.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask; import com.djrapitops.plan.gathering.ShutdownHook; import com.djrapitops.plan.gathering.timed.BukkitPingCounter; import com.djrapitops.plan.gathering.timed.ServerTPSCounter; +import com.djrapitops.plan.gathering.timed.SystemUsageBuffer; import com.djrapitops.plan.gathering.timed.TPSCounter; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; @@ -54,7 +55,9 @@ public class BukkitTaskSystem extends TaskSystem { private final ConfigStoreTask configStoreTask; private final DBCleanTask dbCleanTask; private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask; - private TPSCounter tpsCounter; + private final TPSCounter tpsCounter; + private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask; + private final SystemUsageBuffer.DiskTask diskTask; @Inject public BukkitTaskSystem( @@ -70,7 +73,9 @@ public class BukkitTaskSystem extends TaskSystem { LogsFolderCleanTask logsFolderCleanTask, ConfigStoreTask configStoreTask, DBCleanTask dbCleanTask, - JSONCache.CleanTask jsonCacheCleanTask + JSONCache.CleanTask jsonCacheCleanTask, + SystemUsageBuffer.RamAndCpuTask ramAndCpuTask, + SystemUsageBuffer.DiskTask diskTask ) { super(runnableFactory); this.plugin = plugin; @@ -85,6 +90,8 @@ public class BukkitTaskSystem extends TaskSystem { this.logsFolderCleanTask = logsFolderCleanTask; this.configStoreTask = configStoreTask; this.dbCleanTask = dbCleanTask; + this.ramAndCpuTask = ramAndCpuTask; + this.diskTask = diskTask; } @Override @@ -111,7 +118,12 @@ public class BukkitTaskSystem extends TaskSystem { } private void registerTPSCounter() { - registerTask(tpsCounter).runTaskTimer(1000, TimeAmount.toTicks(1L, TimeUnit.SECONDS)); + long halfSecondTicks = TimeAmount.toTicks(500L, TimeUnit.MILLISECONDS); + long secondTicks = TimeAmount.toTicks(1L, TimeUnit.SECONDS); + long minuteTicks = TimeAmount.toTicks(1L, TimeUnit.MINUTES); + registerTask(tpsCounter).runTaskTimer(minuteTicks, secondTicks); + registerTask(ramAndCpuTask).runTaskTimerAsynchronously(minuteTicks - halfSecondTicks, secondTicks); + registerTask(diskTask).runTaskTimerAsynchronously(50L * secondTicks, minuteTicks); } private void registerPingCounter() { diff --git a/Plan/bungeecord/src/main/java/com/djrapitops/plan/BungeeTaskSystem.java b/Plan/bungeecord/src/main/java/com/djrapitops/plan/BungeeTaskSystem.java index fb0693783..fae823ddc 100644 --- a/Plan/bungeecord/src/main/java/com/djrapitops/plan/BungeeTaskSystem.java +++ b/Plan/bungeecord/src/main/java/com/djrapitops/plan/BungeeTaskSystem.java @@ -20,6 +20,7 @@ import com.djrapitops.plan.delivery.webserver.cache.JSONCache; import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask; import com.djrapitops.plan.gathering.timed.BungeePingCounter; import com.djrapitops.plan.gathering.timed.ProxyTPSCounter; +import com.djrapitops.plan.gathering.timed.SystemUsageBuffer; import com.djrapitops.plan.gathering.timed.TPSCounter; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; @@ -51,6 +52,8 @@ public class BungeeTaskSystem extends TaskSystem { private final DBCleanTask dbCleanTask; private final JSONCache.CleanTask jsonCacheCleanTask; private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask; + private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask; + private final SystemUsageBuffer.DiskTask diskTask; @Inject public BungeeTaskSystem( @@ -63,7 +66,9 @@ public class BungeeTaskSystem extends TaskSystem { NetworkConfigStoreTask networkConfigStoreTask, DBCleanTask dbCleanTask, JSONCache.CleanTask jsonCacheCleanTask, - ExtensionServerMethodCallerTask extensionServerMethodCallerTask + ExtensionServerMethodCallerTask extensionServerMethodCallerTask, + SystemUsageBuffer.RamAndCpuTask ramAndCpuTask, + SystemUsageBuffer.DiskTask diskTask ) { super(runnableFactory); this.plugin = plugin; @@ -76,6 +81,8 @@ public class BungeeTaskSystem extends TaskSystem { this.dbCleanTask = dbCleanTask; this.jsonCacheCleanTask = jsonCacheCleanTask; this.extensionServerMethodCallerTask = extensionServerMethodCallerTask; + this.ramAndCpuTask = ramAndCpuTask; + this.diskTask = diskTask; } @Override @@ -83,8 +90,17 @@ public class BungeeTaskSystem extends TaskSystem { registerTasks(); } + private void registerTPSCounter() { + long halfSecondTicks = TimeAmount.toTicks(500L, TimeUnit.MILLISECONDS); + long secondTicks = TimeAmount.toTicks(1L, TimeUnit.SECONDS); + long minuteTicks = TimeAmount.toTicks(1L, TimeUnit.MINUTES); + registerTask(tpsCounter).runTaskTimer(minuteTicks, secondTicks); + registerTask(ramAndCpuTask).runTaskTimerAsynchronously(minuteTicks - halfSecondTicks, secondTicks); + registerTask(diskTask).runTaskTimerAsynchronously(50L * secondTicks, minuteTicks); + } + private void registerTasks() { - registerTask(tpsCounter).runTaskTimerAsynchronously(1000, TimeAmount.toTicks(1L, TimeUnit.SECONDS)); + registerTPSCounter(); registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS)); Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY); diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/ProxyTPSCounter.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/ProxyTPSCounter.java index dfccb58c8..d9c9e7674 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/ProxyTPSCounter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/ProxyTPSCounter.java @@ -17,11 +17,8 @@ package com.djrapitops.plan.gathering.timed; import com.djrapitops.plan.gathering.ServerSensor; -import com.djrapitops.plan.gathering.SystemUsage; import com.djrapitops.plan.gathering.domain.builders.TPSBuilder; import com.djrapitops.plan.identification.ServerInfo; -import com.djrapitops.plan.settings.config.PlanConfig; -import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.transactions.events.TPSStoreTransaction; import com.djrapitops.plan.utilities.analysis.Average; @@ -43,6 +40,7 @@ import java.util.concurrent.TimeUnit; public class ProxyTPSCounter extends TPSCounter { private final ServerSensor serverSensor; + private final SystemUsageBuffer systemUsage; private final DBSystem dbSystem; private final ServerInfo serverInfo; private Maximum.ForInteger playersOnline; @@ -52,17 +50,18 @@ public class ProxyTPSCounter extends TPSCounter { @Inject public ProxyTPSCounter( ServerSensor serverSensor, - PlanConfig config, + SystemUsageBuffer systemUsage, DBSystem dbSystem, ServerInfo serverInfo, PluginLogger logger, ErrorHandler errorHandler ) { - super(config.get(DataGatheringSettings.DISK_SPACE), logger, errorHandler); + super(logger, errorHandler); this.serverSensor = serverSensor; this.dbSystem = dbSystem; this.serverInfo = serverInfo; + this.systemUsage = systemUsage; playersOnline = new Maximum.ForInteger(0); cpu = new Average(); ram = new TimerAverage(); @@ -71,9 +70,9 @@ public class ProxyTPSCounter extends TPSCounter { @Override public void pulse() { long time = System.currentTimeMillis(); - boolean shouldSave = ram.add(time, SystemUsage.getUsedMemory()); + boolean shouldSave = ram.add(time, systemUsage.getRam()); playersOnline.add(serverSensor.getOnlinePlayerCount()); - cpu.add(SystemUsage.getAverageSystemLoad()); + cpu.add(systemUsage.getCpu()); if (shouldSave) save(time); } @@ -82,7 +81,7 @@ public class ProxyTPSCounter extends TPSCounter { int maxPlayers = playersOnline.getMaxAndReset(); double averageCPU = cpu.getAverageAndReset(); long averageRAM = (long) ram.getAverageAndReset(time); - long freeDiskSpace = getFreeDiskSpace(); + long freeDiskSpace = systemUsage.getFreeDiskSpace(); dbSystem.getDatabase().executeTransaction(new TPSStoreTransaction( serverInfo.getServerUUID(), diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/ServerTPSCounter.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/ServerTPSCounter.java index a9b5ead72..4a7655e7f 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/ServerTPSCounter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/ServerTPSCounter.java @@ -17,11 +17,8 @@ package com.djrapitops.plan.gathering.timed; import com.djrapitops.plan.gathering.ServerSensor; -import com.djrapitops.plan.gathering.SystemUsage; import com.djrapitops.plan.gathering.domain.builders.TPSBuilder; import com.djrapitops.plan.identification.ServerInfo; -import com.djrapitops.plan.settings.config.PlanConfig; -import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; import com.djrapitops.plan.storage.database.DBSystem; import com.djrapitops.plan.storage.database.transactions.events.TPSStoreTransaction; import com.djrapitops.plan.utilities.analysis.Average; @@ -45,6 +42,7 @@ public class ServerTPSCounter extends TPSCounter { private final boolean noDirectTPS; private final ServerSensor serverSensor; + private final SystemUsageBuffer systemUsage; private final DBSystem dbSystem; private final ServerInfo serverInfo; private TPSCalculator indirectTPS; @@ -56,18 +54,19 @@ public class ServerTPSCounter extends TPSCounter { @Inject public ServerTPSCounter( ServerSensor serverSensor, - PlanConfig config, + SystemUsageBuffer systemUsage, DBSystem dbSystem, ServerInfo serverInfo, PluginLogger logger, ErrorHandler errorHandler ) { - super(config.get(DataGatheringSettings.DISK_SPACE), logger, errorHandler); + super(logger, errorHandler); noDirectTPS = !serverSensor.supportsDirectTPS(); this.serverSensor = serverSensor; this.dbSystem = dbSystem; this.serverInfo = serverInfo; + this.systemUsage = systemUsage; if (noDirectTPS) { indirectTPS = new TPSCalculator(); } else { @@ -83,8 +82,8 @@ public class ServerTPSCounter extends TPSCounter { long time = System.currentTimeMillis(); Optional result = pulseTPS(time); playersOnline.add(serverSensor.getOnlinePlayerCount()); - cpu.add(SystemUsage.getAverageSystemLoad()); - ram.add(SystemUsage.getUsedMemory()); + cpu.add(systemUsage.getCpu()); + ram.add(systemUsage.getRam()); result.ifPresent(tps -> save(tps, time)); } @@ -99,7 +98,7 @@ public class ServerTPSCounter extends TPSCounter { entityCount += serverSensor.getEntityCount(world); chunkCount += serverSensor.getChunkCount(world); } - long freeDiskSpace = getFreeDiskSpace(); + long freeDiskSpace = systemUsage.getFreeDiskSpace(); dbSystem.getDatabase().executeTransaction(new TPSStoreTransaction( serverInfo.getServerUUID(), diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/SystemUsageBuffer.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/SystemUsageBuffer.java new file mode 100644 index 000000000..2b0f6d1e4 --- /dev/null +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/SystemUsageBuffer.java @@ -0,0 +1,124 @@ +/* + * This file is part of Player Analytics (Plan). + * + * Plan is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License v3 as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Plan is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Plan. If not, see . + */ +package com.djrapitops.plan.gathering.timed; + +import com.djrapitops.plan.gathering.SystemUsage; +import com.djrapitops.plan.settings.config.PlanConfig; +import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; +import com.djrapitops.plugin.logging.L; +import com.djrapitops.plugin.logging.console.PluginLogger; +import com.djrapitops.plugin.logging.error.ErrorHandler; +import com.djrapitops.plugin.task.AbsRunnable; + +import javax.inject.Inject; +import javax.inject.Singleton; + +/** + * Task for performing system resource usage checks asynchronously + * + * @author Rsl1122 + */ +@Singleton +public class SystemUsageBuffer { + + private double cpu = -1.0; + private long ram = -1L; + private long freeDiskSpace = -1L; + + @Inject + public SystemUsageBuffer() { + warmUp(); + } + + public void warmUp() { + SystemUsage.getAverageSystemLoad(); + SystemUsage.getUsedMemory(); + SystemUsage.getFreeDiskSpace(); + } + + public double getCpu() { + return cpu; + } + + public long getRam() { + return ram; + } + + public long getFreeDiskSpace() { + return freeDiskSpace; + } + + @Singleton + public static class RamAndCpuTask extends AbsRunnable { + private final SystemUsageBuffer buffer; + private final PluginLogger logger; + + @Inject + public RamAndCpuTask(SystemUsageBuffer buffer, PluginLogger logger) { + this.buffer = buffer; + this.logger = logger; + } + + @Override + public void run() { + try { + buffer.cpu = SystemUsage.getAverageSystemLoad(); + buffer.ram = SystemUsage.getUsedMemory(); + } catch (Exception e) { + logger.error("RAM & CPU sampling task had to be stopped due to error: " + e.toString()); + cancel(); + } + } + } + + @Singleton + public static class DiskTask extends AbsRunnable { + private final PlanConfig config; + private final SystemUsageBuffer buffer; + private final PluginLogger logger; + private final ErrorHandler errorHandler; + + private Boolean gatherDisk = null; + private boolean diskErrored = false; + + @Inject + public DiskTask(PlanConfig config, SystemUsageBuffer buffer, PluginLogger logger, ErrorHandler errorHandler) { + this.config = config; + this.buffer = buffer; + this.logger = logger; + this.errorHandler = errorHandler; + } + + @Override + public void run() { + if (gatherDisk == null) gatherDisk = config.get(DataGatheringSettings.DISK_SPACE); + if (!gatherDisk) return; + try { + buffer.freeDiskSpace = SystemUsage.getFreeDiskSpace(); + } catch (SecurityException noPermission) { + if (!diskErrored) { + errorHandler.log(L.WARN, this.getClass(), noPermission); + } + diskErrored = true; + } catch (Exception e) { + logger.error("Free Disk sampling task had to be stopped due to error: " + e.toString()); + cancel(); + } + } + } + +} diff --git a/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/TPSCounter.java b/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/TPSCounter.java index 172b0e2e8..e915b7437 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/TPSCounter.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/gathering/timed/TPSCounter.java @@ -16,7 +16,6 @@ */ package com.djrapitops.plan.gathering.timed; -import com.djrapitops.plan.gathering.SystemUsage; import com.djrapitops.plugin.logging.L; import com.djrapitops.plugin.logging.console.PluginLogger; import com.djrapitops.plugin.logging.error.ErrorHandler; @@ -29,28 +28,15 @@ import com.djrapitops.plugin.task.AbsRunnable; */ public abstract class TPSCounter extends AbsRunnable { - private boolean gatherDiskSpace; protected final PluginLogger logger; protected final ErrorHandler errorHandler; - private boolean diskErrored = false; - public TPSCounter( - boolean gatherDiskSpace, PluginLogger logger, ErrorHandler errorHandler ) { - this.gatherDiskSpace = gatherDiskSpace; this.logger = logger; this.errorHandler = errorHandler; - - warmUp(); - } - - public void warmUp() { - SystemUsage.getAverageSystemLoad(); - SystemUsage.getUsedMemory(); - SystemUsage.getFreeDiskSpace(); } @Override @@ -66,16 +52,4 @@ public abstract class TPSCounter extends AbsRunnable { public abstract void pulse(); - protected long getFreeDiskSpace() { - if (!gatherDiskSpace) return -1; - try { - return SystemUsage.getFreeDiskSpace(); - } catch (SecurityException noPermission) { - if (!diskErrored) { - errorHandler.log(L.WARN, this.getClass(), noPermission); - } - diskErrored = true; - return -1; - } - } } diff --git a/Plan/nukkit/src/main/java/com/djrapitops/plan/NukkitTaskSystem.java b/Plan/nukkit/src/main/java/com/djrapitops/plan/NukkitTaskSystem.java index c318297e7..35333eea4 100644 --- a/Plan/nukkit/src/main/java/com/djrapitops/plan/NukkitTaskSystem.java +++ b/Plan/nukkit/src/main/java/com/djrapitops/plan/NukkitTaskSystem.java @@ -23,6 +23,7 @@ import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask; import com.djrapitops.plan.gathering.ShutdownHook; import com.djrapitops.plan.gathering.timed.NukkitPingCounter; import com.djrapitops.plan.gathering.timed.ServerTPSCounter; +import com.djrapitops.plan.gathering.timed.SystemUsageBuffer; import com.djrapitops.plan.gathering.timed.TPSCounter; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; @@ -55,6 +56,8 @@ public class NukkitTaskSystem extends TaskSystem { private final NukkitPingCounter pingCounter; private final ConfigStoreTask configStoreTask; private final DBCleanTask dbCleanTask; + private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask; + private final SystemUsageBuffer.DiskTask diskTask; private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask; @Inject @@ -71,7 +74,9 @@ public class NukkitTaskSystem extends TaskSystem { LogsFolderCleanTask logsFolderCleanTask, ConfigStoreTask configStoreTask, DBCleanTask dbCleanTask, - JSONCache.CleanTask jsonCacheCleanTask + JSONCache.CleanTask jsonCacheCleanTask, + SystemUsageBuffer.RamAndCpuTask ramAndCpuTask, + SystemUsageBuffer.DiskTask diskTask ) { super(runnableFactory); this.plugin = plugin; @@ -86,6 +91,8 @@ public class NukkitTaskSystem extends TaskSystem { this.logsFolderCleanTask = logsFolderCleanTask; this.configStoreTask = configStoreTask; this.dbCleanTask = dbCleanTask; + this.ramAndCpuTask = ramAndCpuTask; + this.diskTask = diskTask; } @Override @@ -112,7 +119,12 @@ public class NukkitTaskSystem extends TaskSystem { } private void registerTPSCounter() { - registerTask(tpsCounter).runTaskTimer(1000, TimeAmount.toTicks(1L, TimeUnit.SECONDS)); + long halfSecondTicks = TimeAmount.toTicks(500L, TimeUnit.MILLISECONDS); + long secondTicks = TimeAmount.toTicks(1L, TimeUnit.SECONDS); + long minuteTicks = TimeAmount.toTicks(1L, TimeUnit.MINUTES); + registerTask(tpsCounter).runTaskTimer(minuteTicks, secondTicks); + registerTask(ramAndCpuTask).runTaskTimerAsynchronously(minuteTicks - halfSecondTicks, secondTicks); + registerTask(diskTask).runTaskTimerAsynchronously(50L * secondTicks, minuteTicks); } private void registerPingCounter() { diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/SpongeTaskSystem.java b/Plan/sponge/src/main/java/com/djrapitops/plan/SpongeTaskSystem.java index 4077811cf..340bb3e41 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/SpongeTaskSystem.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/SpongeTaskSystem.java @@ -21,6 +21,7 @@ import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask; import com.djrapitops.plan.gathering.ShutdownHook; import com.djrapitops.plan.gathering.timed.ServerTPSCounter; import com.djrapitops.plan.gathering.timed.SpongePingCounter; +import com.djrapitops.plan.gathering.timed.SystemUsageBuffer; import com.djrapitops.plan.gathering.timed.TPSCounter; import com.djrapitops.plan.settings.config.PlanConfig; import com.djrapitops.plan.settings.config.paths.DataGatheringSettings; @@ -46,6 +47,8 @@ public class SpongeTaskSystem extends TaskSystem { private final ShutdownHook shutdownHook; private final TPSCounter tpsCounter; private final JSONCache.CleanTask jsonCacheCleanTask; + private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask; + private final SystemUsageBuffer.DiskTask diskTask; private final SpongePingCounter pingCounter; private final LogsFolderCleanTask logsFolderCleanTask; private final ConfigStoreTask configStoreTask; @@ -66,7 +69,9 @@ public class SpongeTaskSystem extends TaskSystem { LogsFolderCleanTask logsFolderCleanTask, ConfigStoreTask configStoreTask, DBCleanTask dbCleanTask, - JSONCache.CleanTask jsonCacheCleanTask + JSONCache.CleanTask jsonCacheCleanTask, + SystemUsageBuffer.RamAndCpuTask ramAndCpuTask, + SystemUsageBuffer.DiskTask diskTask ) { super(runnableFactory); this.plugin = plugin; @@ -82,6 +87,8 @@ public class SpongeTaskSystem extends TaskSystem { this.dbCleanTask = dbCleanTask; this.jsonCacheCleanTask = jsonCacheCleanTask; + this.ramAndCpuTask = ramAndCpuTask; + this.diskTask = diskTask; } @Override @@ -108,7 +115,12 @@ public class SpongeTaskSystem extends TaskSystem { } private void registerTPSCounter() { - registerTask(tpsCounter).runTaskTimer(1000, TimeAmount.toTicks(1L, TimeUnit.SECONDS)); + long halfSecondTicks = TimeAmount.toTicks(500L, TimeUnit.MILLISECONDS); + long secondTicks = TimeAmount.toTicks(1L, TimeUnit.SECONDS); + long minuteTicks = TimeAmount.toTicks(1L, TimeUnit.MINUTES); + registerTask(tpsCounter).runTaskTimer(minuteTicks, secondTicks); + registerTask(ramAndCpuTask).runTaskTimerAsynchronously(minuteTicks - halfSecondTicks, secondTicks); + registerTask(diskTask).runTaskTimerAsynchronously(50L * secondTicks, minuteTicks); } private void registerPingCounter() { diff --git a/Plan/velocity/src/main/java/com/djrapitops/plan/VelocityTaskSystem.java b/Plan/velocity/src/main/java/com/djrapitops/plan/VelocityTaskSystem.java index 42a961f90..35d65c287 100644 --- a/Plan/velocity/src/main/java/com/djrapitops/plan/VelocityTaskSystem.java +++ b/Plan/velocity/src/main/java/com/djrapitops/plan/VelocityTaskSystem.java @@ -19,6 +19,7 @@ package com.djrapitops.plan; import com.djrapitops.plan.delivery.webserver.cache.JSONCache; import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask; import com.djrapitops.plan.gathering.timed.ProxyTPSCounter; +import com.djrapitops.plan.gathering.timed.SystemUsageBuffer; import com.djrapitops.plan.gathering.timed.TPSCounter; import com.djrapitops.plan.gathering.timed.VelocityPingCounter; import com.djrapitops.plan.settings.config.PlanConfig; @@ -51,6 +52,8 @@ public class VelocityTaskSystem extends TaskSystem { private final DBCleanTask dbCleanTask; private final JSONCache.CleanTask jsonCacheCleanTask; private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask; + private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask; + private final SystemUsageBuffer.DiskTask diskTask; @Inject public VelocityTaskSystem( @@ -63,7 +66,9 @@ public class VelocityTaskSystem extends TaskSystem { NetworkConfigStoreTask networkConfigStoreTask, DBCleanTask dbCleanTask, JSONCache.CleanTask jsonCacheCleanTask, - ExtensionServerMethodCallerTask extensionServerMethodCallerTask + ExtensionServerMethodCallerTask extensionServerMethodCallerTask, + SystemUsageBuffer.RamAndCpuTask ramAndCpuTask, + SystemUsageBuffer.DiskTask diskTask ) { super(runnableFactory); this.plugin = plugin; @@ -75,6 +80,8 @@ public class VelocityTaskSystem extends TaskSystem { this.dbCleanTask = dbCleanTask; this.jsonCacheCleanTask = jsonCacheCleanTask; this.extensionServerMethodCallerTask = extensionServerMethodCallerTask; + this.ramAndCpuTask = ramAndCpuTask; + this.diskTask = diskTask; } @Override @@ -82,8 +89,17 @@ public class VelocityTaskSystem extends TaskSystem { registerTasks(); } + private void registerTPSCounter() { + long halfSecondTicks = TimeAmount.toTicks(500L, TimeUnit.MILLISECONDS); + long secondTicks = TimeAmount.toTicks(1L, TimeUnit.SECONDS); + long minuteTicks = TimeAmount.toTicks(1L, TimeUnit.MINUTES); + registerTask(tpsCounter).runTaskTimer(minuteTicks, secondTicks); + registerTask(ramAndCpuTask).runTaskTimerAsynchronously(minuteTicks - halfSecondTicks, secondTicks); + registerTask(diskTask).runTaskTimerAsynchronously(50L * secondTicks, minuteTicks); + } + private void registerTasks() { - registerTask(tpsCounter).runTaskTimerAsynchronously(1000, TimeAmount.toTicks(1L, TimeUnit.SECONDS)); + registerTPSCounter(); registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS)); Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);