Better guard against negative ping values

This commit is contained in:
Rsl1122 2018-07-16 17:24:44 +03:00
parent 6f11dc33ac
commit a836b7a362
6 changed files with 40 additions and 11 deletions

View File

@ -26,7 +26,7 @@ public class PingMutator {
public PingMutator filterBy(Predicate<Ping> predicate) {
return new PingMutator(pings.stream().filter(predicate).collect(Collectors.toList()));
}
public PingMutator filterByServer(UUID serverUUID) {
return filterBy(ping -> serverUUID.equals(ping.getServerUUID()));
}
@ -52,6 +52,9 @@ public class PingMutator {
int max = -1;
for (Ping ping : pings) {
Integer value = ping.getMax();
if (value < 0) {
continue;
}
if (value > max) {
max = value;
}
@ -64,6 +67,9 @@ public class PingMutator {
int min = -1;
for (Ping ping : pings) {
Integer value = ping.getMin();
if (value < 0) {
continue;
}
if (value < min || min == -1) {
min = value;
}
@ -73,6 +79,8 @@ public class PingMutator {
}
public double average() {
return pings.stream().mapToDouble(Ping::getAverage).average().orElse(-1);
return pings.stream().mapToDouble(Ping::getAverage)
.filter(value -> value >= 0)
.average().orElse(-1);
}
}

View File

@ -56,7 +56,8 @@ public class PingTable extends UserIDTable {
public void clean() {
String sql = "DELETE FROM " + tableName +
" WHERE (" + Col.DATE + "<?)";
" WHERE (" + Col.DATE + "<?)" +
" OR (" + Col.MIN_PING + "<0)";
execute(new ExecStatement(sql) {
@Override

View File

@ -37,7 +37,7 @@ public class PingInsertProcessor implements CriticalRunnable {
long lastDate = history.get(history.size() - 1).getDate();
OptionalInt max = history.stream()
.mapToInt(DateObj::getValue)
.filter(i -> i != -1)
.filter(i -> i >= 0)
.max();
if (!max.isPresent()) {
@ -46,12 +46,12 @@ public class PingInsertProcessor implements CriticalRunnable {
int minValue = history.stream()
.mapToInt(DateObj::getValue)
.filter(i -> i != -1)
.filter(i -> i >= 0)
.min().orElse(-1);
double avgValue = history.stream()
.mapToInt(DateObj::getValue)
.filter(i -> i != -1)
.filter(i -> i >= 0)
.average().orElse(-1);
int maxValue = max.getAsInt();

View File

@ -155,7 +155,7 @@ public class PingCountTimer extends AbsRunnable implements Listener {
addPlayer(player);
}
}
}).runTaskLater(PING_INTERVAL);
}).runTaskLater(PING_INTERVAL * 2);
}
@EventHandler

View File

@ -14,8 +14,8 @@ public class PingTable extends TableContainer {
super(
Icon.called("globe") + " Country",
Icon.called("signal") + " Average Ping",
Icon.called("signal") + " Maximum Ping",
Icon.called("signal") + " Minimum Ping"
Icon.called("signal") + " Worst Ping",
Icon.called("signal") + " Best Ping"
);
setColor("amber");

View File

@ -1064,7 +1064,27 @@
</div>
<div class="row clearfix">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
${tablePing}
<div class="card">
<div class="header">
<div class="row clearfix">
<div class="col-xs-8 col-sm-8 col-lg-8">
<h2><i class="fa fa-wifi"></i> Connection Information</h2>
</div>
<div class="col-xs-4 col-sm-4 col-lg-4">
<a href="javascript:void(0)" class="help material-icons pull-right"
tabindex="0" data-trigger="focus" data-toggle="popover" data-placement="left"
data-container="body" data-html="true"
data-original-title="Connection Information"
data-content="Ping gathered by Ping task - Ping data is stored for 2 weeks.<br><br>
Geolocations are not directly linked to ping data, so player's ping is placed under the most recent login location."
>help_outline</a>
</div>
</div>
</div>
<div class="panel panel-default">
${tablePing}
</div>
</div>
</div>
</div>
<!-- #END# Geolocations -->
@ -1436,7 +1456,7 @@
healthGauge('healthGauge', [v.data.healthIndex]);
onlineActivityCalendar('#calendar', v.data.calendar, v.values.firstDay);
horizontalBarChart('countryBarChart', v.data.countryCategories, [series.country], 'Players');
lineChart('pingGraph', [series.playersOnline, series.avgPing, series.maxPing, series.minPing]);
lineChart('pingGraph', [series.avgPing, series.maxPing, series.minPing]);
${sessionTabGraphViewFunctions}
/**/