ProjectAres/Commons/bukkit/src/main/java/tc/oc/bukkit/analytics/LatencyReporter.java

41 lines
1.3 KiB
Java

package tc.oc.bukkit.analytics;
import java.time.Duration;
import javax.inject.Inject;
import tc.oc.analytics.Gauge;
import tc.oc.analytics.MetricFactory;
import tc.oc.api.bukkit.users.OnlinePlayers;
import tc.oc.commons.bukkit.util.NMSHacks;
import tc.oc.commons.core.plugin.PluginFacet;
import tc.oc.commons.core.util.Numbers;
import tc.oc.minecraft.analytics.AnalyticsFacet;
import tc.oc.minecraft.api.scheduler.Tickable;
public class LatencyReporter extends AnalyticsFacet implements PluginFacet, Tickable {
private final OnlinePlayers onlinePlayers;
private final Gauge latency;
@Inject LatencyReporter(OnlinePlayers onlinePlayers, MetricFactory metrics) {
this.onlinePlayers = onlinePlayers;
this.latency = metrics.gauge("bukkit.latency");
}
@Override
public Duration tickPeriod() {
return Duration.ofSeconds(10);
}
@Override
public void tick() {
onlinePlayers.all()
.stream()
.mapToInt(NMSHacks::playerLatencyMillis)
.average()
.ifPresent(average -> latency.measure(Numbers.clamp(
average,
0, 2000 // Filter out insane values so our graphs don't get wrecked
)));
}
}