mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-12 18:31:24 +01:00
parent
d976d9dd10
commit
d6a7a43428
@ -21,6 +21,7 @@ import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask;
|
|||||||
import com.djrapitops.plan.gathering.ShutdownHook;
|
import com.djrapitops.plan.gathering.ShutdownHook;
|
||||||
import com.djrapitops.plan.gathering.timed.BukkitPingCounter;
|
import com.djrapitops.plan.gathering.timed.BukkitPingCounter;
|
||||||
import com.djrapitops.plan.gathering.timed.ServerTPSCounter;
|
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.gathering.timed.TPSCounter;
|
||||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||||
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||||
@ -54,7 +55,9 @@ public class BukkitTaskSystem extends TaskSystem {
|
|||||||
private final ConfigStoreTask configStoreTask;
|
private final ConfigStoreTask configStoreTask;
|
||||||
private final DBCleanTask dbCleanTask;
|
private final DBCleanTask dbCleanTask;
|
||||||
private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask;
|
private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask;
|
||||||
private TPSCounter tpsCounter;
|
private final TPSCounter tpsCounter;
|
||||||
|
private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask;
|
||||||
|
private final SystemUsageBuffer.DiskTask diskTask;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public BukkitTaskSystem(
|
public BukkitTaskSystem(
|
||||||
@ -70,7 +73,9 @@ public class BukkitTaskSystem extends TaskSystem {
|
|||||||
LogsFolderCleanTask logsFolderCleanTask,
|
LogsFolderCleanTask logsFolderCleanTask,
|
||||||
ConfigStoreTask configStoreTask,
|
ConfigStoreTask configStoreTask,
|
||||||
DBCleanTask dbCleanTask,
|
DBCleanTask dbCleanTask,
|
||||||
JSONCache.CleanTask jsonCacheCleanTask
|
JSONCache.CleanTask jsonCacheCleanTask,
|
||||||
|
SystemUsageBuffer.RamAndCpuTask ramAndCpuTask,
|
||||||
|
SystemUsageBuffer.DiskTask diskTask
|
||||||
) {
|
) {
|
||||||
super(runnableFactory);
|
super(runnableFactory);
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@ -85,6 +90,8 @@ public class BukkitTaskSystem extends TaskSystem {
|
|||||||
this.logsFolderCleanTask = logsFolderCleanTask;
|
this.logsFolderCleanTask = logsFolderCleanTask;
|
||||||
this.configStoreTask = configStoreTask;
|
this.configStoreTask = configStoreTask;
|
||||||
this.dbCleanTask = dbCleanTask;
|
this.dbCleanTask = dbCleanTask;
|
||||||
|
this.ramAndCpuTask = ramAndCpuTask;
|
||||||
|
this.diskTask = diskTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -111,7 +118,12 @@ public class BukkitTaskSystem extends TaskSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerTPSCounter() {
|
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() {
|
private void registerPingCounter() {
|
||||||
|
@ -20,6 +20,7 @@ import com.djrapitops.plan.delivery.webserver.cache.JSONCache;
|
|||||||
import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask;
|
import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask;
|
||||||
import com.djrapitops.plan.gathering.timed.BungeePingCounter;
|
import com.djrapitops.plan.gathering.timed.BungeePingCounter;
|
||||||
import com.djrapitops.plan.gathering.timed.ProxyTPSCounter;
|
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.TPSCounter;
|
||||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||||
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||||
@ -51,6 +52,8 @@ public class BungeeTaskSystem extends TaskSystem {
|
|||||||
private final DBCleanTask dbCleanTask;
|
private final DBCleanTask dbCleanTask;
|
||||||
private final JSONCache.CleanTask jsonCacheCleanTask;
|
private final JSONCache.CleanTask jsonCacheCleanTask;
|
||||||
private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask;
|
private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask;
|
||||||
|
private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask;
|
||||||
|
private final SystemUsageBuffer.DiskTask diskTask;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public BungeeTaskSystem(
|
public BungeeTaskSystem(
|
||||||
@ -63,7 +66,9 @@ public class BungeeTaskSystem extends TaskSystem {
|
|||||||
NetworkConfigStoreTask networkConfigStoreTask,
|
NetworkConfigStoreTask networkConfigStoreTask,
|
||||||
DBCleanTask dbCleanTask,
|
DBCleanTask dbCleanTask,
|
||||||
JSONCache.CleanTask jsonCacheCleanTask,
|
JSONCache.CleanTask jsonCacheCleanTask,
|
||||||
ExtensionServerMethodCallerTask extensionServerMethodCallerTask
|
ExtensionServerMethodCallerTask extensionServerMethodCallerTask,
|
||||||
|
SystemUsageBuffer.RamAndCpuTask ramAndCpuTask,
|
||||||
|
SystemUsageBuffer.DiskTask diskTask
|
||||||
) {
|
) {
|
||||||
super(runnableFactory);
|
super(runnableFactory);
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@ -76,6 +81,8 @@ public class BungeeTaskSystem extends TaskSystem {
|
|||||||
this.dbCleanTask = dbCleanTask;
|
this.dbCleanTask = dbCleanTask;
|
||||||
this.jsonCacheCleanTask = jsonCacheCleanTask;
|
this.jsonCacheCleanTask = jsonCacheCleanTask;
|
||||||
this.extensionServerMethodCallerTask = extensionServerMethodCallerTask;
|
this.extensionServerMethodCallerTask = extensionServerMethodCallerTask;
|
||||||
|
this.ramAndCpuTask = ramAndCpuTask;
|
||||||
|
this.diskTask = diskTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -83,8 +90,17 @@ public class BungeeTaskSystem extends TaskSystem {
|
|||||||
registerTasks();
|
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() {
|
private void registerTasks() {
|
||||||
registerTask(tpsCounter).runTaskTimerAsynchronously(1000, TimeAmount.toTicks(1L, TimeUnit.SECONDS));
|
registerTPSCounter();
|
||||||
registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS));
|
registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS));
|
||||||
|
|
||||||
Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
|
Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
|
||||||
|
@ -17,11 +17,8 @@
|
|||||||
package com.djrapitops.plan.gathering.timed;
|
package com.djrapitops.plan.gathering.timed;
|
||||||
|
|
||||||
import com.djrapitops.plan.gathering.ServerSensor;
|
import com.djrapitops.plan.gathering.ServerSensor;
|
||||||
import com.djrapitops.plan.gathering.SystemUsage;
|
|
||||||
import com.djrapitops.plan.gathering.domain.builders.TPSBuilder;
|
import com.djrapitops.plan.gathering.domain.builders.TPSBuilder;
|
||||||
import com.djrapitops.plan.identification.ServerInfo;
|
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.DBSystem;
|
||||||
import com.djrapitops.plan.storage.database.transactions.events.TPSStoreTransaction;
|
import com.djrapitops.plan.storage.database.transactions.events.TPSStoreTransaction;
|
||||||
import com.djrapitops.plan.utilities.analysis.Average;
|
import com.djrapitops.plan.utilities.analysis.Average;
|
||||||
@ -43,6 +40,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
public class ProxyTPSCounter extends TPSCounter {
|
public class ProxyTPSCounter extends TPSCounter {
|
||||||
|
|
||||||
private final ServerSensor<Object> serverSensor;
|
private final ServerSensor<Object> serverSensor;
|
||||||
|
private final SystemUsageBuffer systemUsage;
|
||||||
private final DBSystem dbSystem;
|
private final DBSystem dbSystem;
|
||||||
private final ServerInfo serverInfo;
|
private final ServerInfo serverInfo;
|
||||||
private Maximum.ForInteger playersOnline;
|
private Maximum.ForInteger playersOnline;
|
||||||
@ -52,17 +50,18 @@ public class ProxyTPSCounter extends TPSCounter {
|
|||||||
@Inject
|
@Inject
|
||||||
public ProxyTPSCounter(
|
public ProxyTPSCounter(
|
||||||
ServerSensor<Object> serverSensor,
|
ServerSensor<Object> serverSensor,
|
||||||
PlanConfig config,
|
SystemUsageBuffer systemUsage,
|
||||||
DBSystem dbSystem,
|
DBSystem dbSystem,
|
||||||
ServerInfo serverInfo,
|
ServerInfo serverInfo,
|
||||||
PluginLogger logger,
|
PluginLogger logger,
|
||||||
ErrorHandler errorHandler
|
ErrorHandler errorHandler
|
||||||
) {
|
) {
|
||||||
super(config.get(DataGatheringSettings.DISK_SPACE), logger, errorHandler);
|
super(logger, errorHandler);
|
||||||
|
|
||||||
this.serverSensor = serverSensor;
|
this.serverSensor = serverSensor;
|
||||||
this.dbSystem = dbSystem;
|
this.dbSystem = dbSystem;
|
||||||
this.serverInfo = serverInfo;
|
this.serverInfo = serverInfo;
|
||||||
|
this.systemUsage = systemUsage;
|
||||||
playersOnline = new Maximum.ForInteger(0);
|
playersOnline = new Maximum.ForInteger(0);
|
||||||
cpu = new Average();
|
cpu = new Average();
|
||||||
ram = new TimerAverage();
|
ram = new TimerAverage();
|
||||||
@ -71,9 +70,9 @@ public class ProxyTPSCounter extends TPSCounter {
|
|||||||
@Override
|
@Override
|
||||||
public void pulse() {
|
public void pulse() {
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
boolean shouldSave = ram.add(time, SystemUsage.getUsedMemory());
|
boolean shouldSave = ram.add(time, systemUsage.getRam());
|
||||||
playersOnline.add(serverSensor.getOnlinePlayerCount());
|
playersOnline.add(serverSensor.getOnlinePlayerCount());
|
||||||
cpu.add(SystemUsage.getAverageSystemLoad());
|
cpu.add(systemUsage.getCpu());
|
||||||
if (shouldSave) save(time);
|
if (shouldSave) save(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +81,7 @@ public class ProxyTPSCounter extends TPSCounter {
|
|||||||
int maxPlayers = playersOnline.getMaxAndReset();
|
int maxPlayers = playersOnline.getMaxAndReset();
|
||||||
double averageCPU = cpu.getAverageAndReset();
|
double averageCPU = cpu.getAverageAndReset();
|
||||||
long averageRAM = (long) ram.getAverageAndReset(time);
|
long averageRAM = (long) ram.getAverageAndReset(time);
|
||||||
long freeDiskSpace = getFreeDiskSpace();
|
long freeDiskSpace = systemUsage.getFreeDiskSpace();
|
||||||
|
|
||||||
dbSystem.getDatabase().executeTransaction(new TPSStoreTransaction(
|
dbSystem.getDatabase().executeTransaction(new TPSStoreTransaction(
|
||||||
serverInfo.getServerUUID(),
|
serverInfo.getServerUUID(),
|
||||||
|
@ -17,11 +17,8 @@
|
|||||||
package com.djrapitops.plan.gathering.timed;
|
package com.djrapitops.plan.gathering.timed;
|
||||||
|
|
||||||
import com.djrapitops.plan.gathering.ServerSensor;
|
import com.djrapitops.plan.gathering.ServerSensor;
|
||||||
import com.djrapitops.plan.gathering.SystemUsage;
|
|
||||||
import com.djrapitops.plan.gathering.domain.builders.TPSBuilder;
|
import com.djrapitops.plan.gathering.domain.builders.TPSBuilder;
|
||||||
import com.djrapitops.plan.identification.ServerInfo;
|
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.DBSystem;
|
||||||
import com.djrapitops.plan.storage.database.transactions.events.TPSStoreTransaction;
|
import com.djrapitops.plan.storage.database.transactions.events.TPSStoreTransaction;
|
||||||
import com.djrapitops.plan.utilities.analysis.Average;
|
import com.djrapitops.plan.utilities.analysis.Average;
|
||||||
@ -45,6 +42,7 @@ public class ServerTPSCounter<W> extends TPSCounter {
|
|||||||
|
|
||||||
private final boolean noDirectTPS;
|
private final boolean noDirectTPS;
|
||||||
private final ServerSensor<W> serverSensor;
|
private final ServerSensor<W> serverSensor;
|
||||||
|
private final SystemUsageBuffer systemUsage;
|
||||||
private final DBSystem dbSystem;
|
private final DBSystem dbSystem;
|
||||||
private final ServerInfo serverInfo;
|
private final ServerInfo serverInfo;
|
||||||
private TPSCalculator indirectTPS;
|
private TPSCalculator indirectTPS;
|
||||||
@ -56,18 +54,19 @@ public class ServerTPSCounter<W> extends TPSCounter {
|
|||||||
@Inject
|
@Inject
|
||||||
public ServerTPSCounter(
|
public ServerTPSCounter(
|
||||||
ServerSensor<W> serverSensor,
|
ServerSensor<W> serverSensor,
|
||||||
PlanConfig config,
|
SystemUsageBuffer systemUsage,
|
||||||
DBSystem dbSystem,
|
DBSystem dbSystem,
|
||||||
ServerInfo serverInfo,
|
ServerInfo serverInfo,
|
||||||
PluginLogger logger,
|
PluginLogger logger,
|
||||||
ErrorHandler errorHandler
|
ErrorHandler errorHandler
|
||||||
) {
|
) {
|
||||||
super(config.get(DataGatheringSettings.DISK_SPACE), logger, errorHandler);
|
super(logger, errorHandler);
|
||||||
|
|
||||||
noDirectTPS = !serverSensor.supportsDirectTPS();
|
noDirectTPS = !serverSensor.supportsDirectTPS();
|
||||||
this.serverSensor = serverSensor;
|
this.serverSensor = serverSensor;
|
||||||
this.dbSystem = dbSystem;
|
this.dbSystem = dbSystem;
|
||||||
this.serverInfo = serverInfo;
|
this.serverInfo = serverInfo;
|
||||||
|
this.systemUsage = systemUsage;
|
||||||
if (noDirectTPS) {
|
if (noDirectTPS) {
|
||||||
indirectTPS = new TPSCalculator();
|
indirectTPS = new TPSCalculator();
|
||||||
} else {
|
} else {
|
||||||
@ -83,8 +82,8 @@ public class ServerTPSCounter<W> extends TPSCounter {
|
|||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
Optional<Double> result = pulseTPS(time);
|
Optional<Double> result = pulseTPS(time);
|
||||||
playersOnline.add(serverSensor.getOnlinePlayerCount());
|
playersOnline.add(serverSensor.getOnlinePlayerCount());
|
||||||
cpu.add(SystemUsage.getAverageSystemLoad());
|
cpu.add(systemUsage.getCpu());
|
||||||
ram.add(SystemUsage.getUsedMemory());
|
ram.add(systemUsage.getRam());
|
||||||
result.ifPresent(tps -> save(tps, time));
|
result.ifPresent(tps -> save(tps, time));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +98,7 @@ public class ServerTPSCounter<W> extends TPSCounter {
|
|||||||
entityCount += serverSensor.getEntityCount(world);
|
entityCount += serverSensor.getEntityCount(world);
|
||||||
chunkCount += serverSensor.getChunkCount(world);
|
chunkCount += serverSensor.getChunkCount(world);
|
||||||
}
|
}
|
||||||
long freeDiskSpace = getFreeDiskSpace();
|
long freeDiskSpace = systemUsage.getFreeDiskSpace();
|
||||||
|
|
||||||
dbSystem.getDatabase().executeTransaction(new TPSStoreTransaction(
|
dbSystem.getDatabase().executeTransaction(new TPSStoreTransaction(
|
||||||
serverInfo.getServerUUID(),
|
serverInfo.getServerUUID(),
|
||||||
|
@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -16,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.gathering.timed;
|
package com.djrapitops.plan.gathering.timed;
|
||||||
|
|
||||||
import com.djrapitops.plan.gathering.SystemUsage;
|
|
||||||
import com.djrapitops.plugin.logging.L;
|
import com.djrapitops.plugin.logging.L;
|
||||||
import com.djrapitops.plugin.logging.console.PluginLogger;
|
import com.djrapitops.plugin.logging.console.PluginLogger;
|
||||||
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
import com.djrapitops.plugin.logging.error.ErrorHandler;
|
||||||
@ -29,28 +28,15 @@ import com.djrapitops.plugin.task.AbsRunnable;
|
|||||||
*/
|
*/
|
||||||
public abstract class TPSCounter extends AbsRunnable {
|
public abstract class TPSCounter extends AbsRunnable {
|
||||||
|
|
||||||
private boolean gatherDiskSpace;
|
|
||||||
protected final PluginLogger logger;
|
protected final PluginLogger logger;
|
||||||
protected final ErrorHandler errorHandler;
|
protected final ErrorHandler errorHandler;
|
||||||
|
|
||||||
private boolean diskErrored = false;
|
|
||||||
|
|
||||||
public TPSCounter(
|
public TPSCounter(
|
||||||
boolean gatherDiskSpace,
|
|
||||||
PluginLogger logger,
|
PluginLogger logger,
|
||||||
ErrorHandler errorHandler
|
ErrorHandler errorHandler
|
||||||
) {
|
) {
|
||||||
this.gatherDiskSpace = gatherDiskSpace;
|
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.errorHandler = errorHandler;
|
this.errorHandler = errorHandler;
|
||||||
|
|
||||||
warmUp();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void warmUp() {
|
|
||||||
SystemUsage.getAverageSystemLoad();
|
|
||||||
SystemUsage.getUsedMemory();
|
|
||||||
SystemUsage.getFreeDiskSpace();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -66,16 +52,4 @@ public abstract class TPSCounter extends AbsRunnable {
|
|||||||
|
|
||||||
public abstract void pulse();
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask;
|
|||||||
import com.djrapitops.plan.gathering.ShutdownHook;
|
import com.djrapitops.plan.gathering.ShutdownHook;
|
||||||
import com.djrapitops.plan.gathering.timed.NukkitPingCounter;
|
import com.djrapitops.plan.gathering.timed.NukkitPingCounter;
|
||||||
import com.djrapitops.plan.gathering.timed.ServerTPSCounter;
|
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.gathering.timed.TPSCounter;
|
||||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||||
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||||
@ -55,6 +56,8 @@ public class NukkitTaskSystem extends TaskSystem {
|
|||||||
private final NukkitPingCounter pingCounter;
|
private final NukkitPingCounter pingCounter;
|
||||||
private final ConfigStoreTask configStoreTask;
|
private final ConfigStoreTask configStoreTask;
|
||||||
private final DBCleanTask dbCleanTask;
|
private final DBCleanTask dbCleanTask;
|
||||||
|
private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask;
|
||||||
|
private final SystemUsageBuffer.DiskTask diskTask;
|
||||||
private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask;
|
private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@ -71,7 +74,9 @@ public class NukkitTaskSystem extends TaskSystem {
|
|||||||
LogsFolderCleanTask logsFolderCleanTask,
|
LogsFolderCleanTask logsFolderCleanTask,
|
||||||
ConfigStoreTask configStoreTask,
|
ConfigStoreTask configStoreTask,
|
||||||
DBCleanTask dbCleanTask,
|
DBCleanTask dbCleanTask,
|
||||||
JSONCache.CleanTask jsonCacheCleanTask
|
JSONCache.CleanTask jsonCacheCleanTask,
|
||||||
|
SystemUsageBuffer.RamAndCpuTask ramAndCpuTask,
|
||||||
|
SystemUsageBuffer.DiskTask diskTask
|
||||||
) {
|
) {
|
||||||
super(runnableFactory);
|
super(runnableFactory);
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@ -86,6 +91,8 @@ public class NukkitTaskSystem extends TaskSystem {
|
|||||||
this.logsFolderCleanTask = logsFolderCleanTask;
|
this.logsFolderCleanTask = logsFolderCleanTask;
|
||||||
this.configStoreTask = configStoreTask;
|
this.configStoreTask = configStoreTask;
|
||||||
this.dbCleanTask = dbCleanTask;
|
this.dbCleanTask = dbCleanTask;
|
||||||
|
this.ramAndCpuTask = ramAndCpuTask;
|
||||||
|
this.diskTask = diskTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -112,7 +119,12 @@ public class NukkitTaskSystem extends TaskSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerTPSCounter() {
|
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() {
|
private void registerPingCounter() {
|
||||||
|
@ -21,6 +21,7 @@ import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask;
|
|||||||
import com.djrapitops.plan.gathering.ShutdownHook;
|
import com.djrapitops.plan.gathering.ShutdownHook;
|
||||||
import com.djrapitops.plan.gathering.timed.ServerTPSCounter;
|
import com.djrapitops.plan.gathering.timed.ServerTPSCounter;
|
||||||
import com.djrapitops.plan.gathering.timed.SpongePingCounter;
|
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.gathering.timed.TPSCounter;
|
||||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||||
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
import com.djrapitops.plan.settings.config.paths.DataGatheringSettings;
|
||||||
@ -46,6 +47,8 @@ public class SpongeTaskSystem extends TaskSystem {
|
|||||||
private final ShutdownHook shutdownHook;
|
private final ShutdownHook shutdownHook;
|
||||||
private final TPSCounter tpsCounter;
|
private final TPSCounter tpsCounter;
|
||||||
private final JSONCache.CleanTask jsonCacheCleanTask;
|
private final JSONCache.CleanTask jsonCacheCleanTask;
|
||||||
|
private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask;
|
||||||
|
private final SystemUsageBuffer.DiskTask diskTask;
|
||||||
private final SpongePingCounter pingCounter;
|
private final SpongePingCounter pingCounter;
|
||||||
private final LogsFolderCleanTask logsFolderCleanTask;
|
private final LogsFolderCleanTask logsFolderCleanTask;
|
||||||
private final ConfigStoreTask configStoreTask;
|
private final ConfigStoreTask configStoreTask;
|
||||||
@ -66,7 +69,9 @@ public class SpongeTaskSystem extends TaskSystem {
|
|||||||
LogsFolderCleanTask logsFolderCleanTask,
|
LogsFolderCleanTask logsFolderCleanTask,
|
||||||
ConfigStoreTask configStoreTask,
|
ConfigStoreTask configStoreTask,
|
||||||
DBCleanTask dbCleanTask,
|
DBCleanTask dbCleanTask,
|
||||||
JSONCache.CleanTask jsonCacheCleanTask
|
JSONCache.CleanTask jsonCacheCleanTask,
|
||||||
|
SystemUsageBuffer.RamAndCpuTask ramAndCpuTask,
|
||||||
|
SystemUsageBuffer.DiskTask diskTask
|
||||||
) {
|
) {
|
||||||
super(runnableFactory);
|
super(runnableFactory);
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@ -82,6 +87,8 @@ public class SpongeTaskSystem extends TaskSystem {
|
|||||||
this.dbCleanTask = dbCleanTask;
|
this.dbCleanTask = dbCleanTask;
|
||||||
this.jsonCacheCleanTask = jsonCacheCleanTask;
|
this.jsonCacheCleanTask = jsonCacheCleanTask;
|
||||||
|
|
||||||
|
this.ramAndCpuTask = ramAndCpuTask;
|
||||||
|
this.diskTask = diskTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -108,7 +115,12 @@ public class SpongeTaskSystem extends TaskSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerTPSCounter() {
|
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() {
|
private void registerPingCounter() {
|
||||||
|
@ -19,6 +19,7 @@ package com.djrapitops.plan;
|
|||||||
import com.djrapitops.plan.delivery.webserver.cache.JSONCache;
|
import com.djrapitops.plan.delivery.webserver.cache.JSONCache;
|
||||||
import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask;
|
import com.djrapitops.plan.extension.ExtensionServerMethodCallerTask;
|
||||||
import com.djrapitops.plan.gathering.timed.ProxyTPSCounter;
|
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.TPSCounter;
|
||||||
import com.djrapitops.plan.gathering.timed.VelocityPingCounter;
|
import com.djrapitops.plan.gathering.timed.VelocityPingCounter;
|
||||||
import com.djrapitops.plan.settings.config.PlanConfig;
|
import com.djrapitops.plan.settings.config.PlanConfig;
|
||||||
@ -51,6 +52,8 @@ public class VelocityTaskSystem extends TaskSystem {
|
|||||||
private final DBCleanTask dbCleanTask;
|
private final DBCleanTask dbCleanTask;
|
||||||
private final JSONCache.CleanTask jsonCacheCleanTask;
|
private final JSONCache.CleanTask jsonCacheCleanTask;
|
||||||
private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask;
|
private final ExtensionServerMethodCallerTask extensionServerMethodCallerTask;
|
||||||
|
private final SystemUsageBuffer.RamAndCpuTask ramAndCpuTask;
|
||||||
|
private final SystemUsageBuffer.DiskTask diskTask;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public VelocityTaskSystem(
|
public VelocityTaskSystem(
|
||||||
@ -63,7 +66,9 @@ public class VelocityTaskSystem extends TaskSystem {
|
|||||||
NetworkConfigStoreTask networkConfigStoreTask,
|
NetworkConfigStoreTask networkConfigStoreTask,
|
||||||
DBCleanTask dbCleanTask,
|
DBCleanTask dbCleanTask,
|
||||||
JSONCache.CleanTask jsonCacheCleanTask,
|
JSONCache.CleanTask jsonCacheCleanTask,
|
||||||
ExtensionServerMethodCallerTask extensionServerMethodCallerTask
|
ExtensionServerMethodCallerTask extensionServerMethodCallerTask,
|
||||||
|
SystemUsageBuffer.RamAndCpuTask ramAndCpuTask,
|
||||||
|
SystemUsageBuffer.DiskTask diskTask
|
||||||
) {
|
) {
|
||||||
super(runnableFactory);
|
super(runnableFactory);
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
@ -75,6 +80,8 @@ public class VelocityTaskSystem extends TaskSystem {
|
|||||||
this.dbCleanTask = dbCleanTask;
|
this.dbCleanTask = dbCleanTask;
|
||||||
this.jsonCacheCleanTask = jsonCacheCleanTask;
|
this.jsonCacheCleanTask = jsonCacheCleanTask;
|
||||||
this.extensionServerMethodCallerTask = extensionServerMethodCallerTask;
|
this.extensionServerMethodCallerTask = extensionServerMethodCallerTask;
|
||||||
|
this.ramAndCpuTask = ramAndCpuTask;
|
||||||
|
this.diskTask = diskTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -82,8 +89,17 @@ public class VelocityTaskSystem extends TaskSystem {
|
|||||||
registerTasks();
|
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() {
|
private void registerTasks() {
|
||||||
registerTask(tpsCounter).runTaskTimerAsynchronously(1000, TimeAmount.toTicks(1L, TimeUnit.SECONDS));
|
registerTPSCounter();
|
||||||
registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS));
|
registerTask(logsFolderCleanTask).runTaskLaterAsynchronously(TimeAmount.toTicks(30L, TimeUnit.SECONDS));
|
||||||
|
|
||||||
Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
|
Long pingDelay = config.get(TimeSettings.PING_SERVER_ENABLE_DELAY);
|
||||||
|
Loading…
Reference in New Issue
Block a user