Improved Ping gathering outlier filtering. "Unavailable" to player ping

This commit is contained in:
Rsl1122 2018-07-19 09:39:11 +03:00
parent 2ddf220afd
commit 403503e61f
3 changed files with 15 additions and 7 deletions

View File

@ -52,7 +52,7 @@ public class PingMutator {
int max = -1;
for (Ping ping : pings) {
Integer value = ping.getMax();
if (value < 0) {
if (value < 0 || 8000 < value) {
continue;
}
if (value > max) {
@ -67,7 +67,7 @@ public class PingMutator {
int min = -1;
for (Ping ping : pings) {
Integer value = ping.getMin();
if (value < 0) {
if (value < 0 || 8000 < value) {
continue;
}
if (value < min || min == -1) {
@ -80,7 +80,7 @@ public class PingMutator {
public double average() {
return pings.stream().mapToDouble(Ping::getAverage)
.filter(value -> value >= 0)
.filter(value -> value >= 0 && value <= 8000)
.average().orElse(-1);
}
}

View File

@ -27,6 +27,7 @@ import com.djrapitops.plan.data.store.objects.DateObj;
import com.djrapitops.plan.system.processing.Processing;
import com.djrapitops.plan.system.processing.processors.player.PingInsertProcessor;
import com.djrapitops.plan.utilities.java.Reflection;
import com.djrapitops.plugin.api.TimeAmount;
import com.djrapitops.plugin.api.utility.log.Log;
import com.djrapitops.plugin.task.AbsRunnable;
import com.djrapitops.plugin.task.RunnableFactory;
@ -106,6 +107,10 @@ public class PingCountTimer extends AbsRunnable implements Listener {
Player player = Bukkit.getPlayer(uuid);
if (player != null) {
int ping = getPing(player);
if (ping < -1 || ping > TimeAmount.SECOND.ms() * 8L) {
// Don't accept bad values
return;
}
history.add(new DateObj<>(time, ping));
if (history.size() >= 30) {
Processing.submit(new PingInsertProcessor(uuid, new ArrayList<>(history)));
@ -155,7 +160,7 @@ public class PingCountTimer extends AbsRunnable implements Listener {
addPlayer(player);
}
}
}).runTaskLater(PING_INTERVAL * 2);
}).runTaskLater(TimeAmount.SECOND.ticks() * 10L);
}
@EventHandler

View File

@ -120,9 +120,12 @@ public class InspectPage implements Page {
replacer.put("tableBodyIPs", new GeoInfoTable(player.getValue(PlayerKeys.GEO_INFO).orElse(new ArrayList<>())).parseBody());
PingMutator pingMutator = PingMutator.forContainer(player);
replacer.put("avgPing", FormatUtils.cutDecimals(pingMutator.average()) + " ms");
replacer.put("minPing", pingMutator.min() + " ms");
replacer.put("maxPing", pingMutator.max() + " ms");
double averagePing = pingMutator.average();
int minPing = pingMutator.min();
int maxPing = pingMutator.max();
replacer.put("avgPing", averagePing != -1 ? FormatUtils.cutDecimals(averagePing) + " ms" : "Unavailable");
replacer.put("minPing", minPing != -1 ? minPing + " ms" : "Unavailable");
replacer.put("maxPing", maxPing != -1 ? maxPing + " ms" : "Unavailable");
List<Session> allSessions = player.getValue(PlayerKeys.SESSIONS).orElse(new ArrayList<>());
SessionsMutator sessionsMutator = SessionsMutator.forContainer(player);