47 lines
1.4 KiB
Java
47 lines
1.4 KiB
Java
package tc.oc.bukkit.analytics;
|
|
|
|
import java.time.Duration;
|
|
import java.util.concurrent.TimeUnit;
|
|
import javax.inject.Inject;
|
|
import tc.oc.analytics.Count;
|
|
import tc.oc.analytics.Gauge;
|
|
import tc.oc.analytics.MetricFactory;
|
|
import tc.oc.commons.bukkit.util.NMSHacks;
|
|
import tc.oc.commons.core.plugin.PluginFacet;
|
|
import tc.oc.minecraft.analytics.AnalyticsFacet;
|
|
import tc.oc.minecraft.api.scheduler.Tickable;
|
|
|
|
public class TickReporter extends AnalyticsFacet implements PluginFacet, Tickable {
|
|
|
|
private static final Duration INITIAL_DELAY = Duration.ofSeconds(10);
|
|
|
|
private final Count tickCount;
|
|
private final Gauge tickDuration;
|
|
private final Gauge tickInterval;
|
|
|
|
private long lastTickNanos = Long.MIN_VALUE;
|
|
|
|
@Inject TickReporter(MetricFactory metrics) {
|
|
tickCount = metrics.count("bukkit.ticks");
|
|
tickDuration = metrics.gauge("bukkit.tick_duration");
|
|
tickInterval = metrics.gauge("bukkit.tick_interval");
|
|
}
|
|
|
|
@Override
|
|
public Duration initialDelay() {
|
|
return INITIAL_DELAY;
|
|
}
|
|
|
|
@Override
|
|
public void tick() {
|
|
tickDuration.measure((double) NMSHacks.lastTickDurationNanos() / TimeUnit.MILLISECONDS.toNanos(1));
|
|
tickCount.increment();
|
|
|
|
final long now = System.nanoTime();
|
|
if(lastTickNanos > Long.MIN_VALUE) {
|
|
tickInterval.measure((double) (now - lastTickNanos) / TimeUnit.MILLISECONDS.toNanos(1));
|
|
}
|
|
lastTickNanos = now;
|
|
}
|
|
}
|