Add limiting of "bursts" in moving.morepackets.

This commit is contained in:
asofold 2014-07-23 23:31:05 +02:00
parent 039c4b407f
commit 552beed739
6 changed files with 27 additions and 7 deletions

View File

@ -60,7 +60,7 @@ public class MorePackets extends Check {
}
// Check for a violation of the set limits.
final double violation = NetStatic.morePacketsCheck(data.morePacketsFreq, time, 1f, cc.morePacketsEPSMax, cc.morePacketsEPSIdeal);
final double violation = NetStatic.morePacketsCheck(data.morePacketsFreq, time, 1f, cc.morePacketsEPSMax, cc.morePacketsEPSIdeal, data.morePacketsBurstFreq, cc.morePacketsBurstPackets, cc.morePacketsBurstEPM);
// Process violation result.
if (violation > 0.0) {

View File

@ -80,6 +80,8 @@ public class MovingConfig extends ACheckConfig {
public final float morePacketsEPSIdeal;
/** The maximum number of packets per second that we accept. */
public final float morePacketsEPSMax;
public final float morePacketsBurstPackets;
public final double morePacketsBurstEPM;
public final ActionList morePacketsActions;
public final boolean morePacketsVehicleCheck;
@ -173,6 +175,8 @@ public class MovingConfig extends ACheckConfig {
morePacketsCheck = config.getBoolean(ConfPaths.MOVING_MOREPACKETS_CHECK);
morePacketsEPSIdeal = config.getInt(ConfPaths.MOVING_MOREPACKETS_EPSIDEAL);
morePacketsEPSMax = Math.max(morePacketsEPSIdeal, config.getInt(ConfPaths.MOVING_MOREPACKETS_EPSMAX));
morePacketsBurstPackets = config.getInt(ConfPaths.MOVING_MOREPACKETS_BURST_PACKETS);
morePacketsBurstEPM = config.getInt(ConfPaths.MOVING_MOREPACKETS_BURST_EPM);
morePacketsActions = config.getOptimizedActionList(ConfPaths.MOVING_MOREPACKETS_ACTIONS, Permissions.MOVING_MOREPACKETS);
morePacketsVehicleCheck = config.getBoolean(ConfPaths.MOVING_MOREPACKETSVEHICLE_CHECK);

View File

@ -123,7 +123,7 @@ public class MovingData extends ACheckData {
/** Active velocity entries (horizontal distance). */
public final List<Velocity> hVelActive = new LinkedList<Velocity>();
/** Queued velocity entries (horizontal distance). */
public final List<Velocity> hVelQueued = new LinkedList<Velocity>();
public final List<Velocity> hVelQueued = new LinkedList<Velocity>();
// Coordinates.
/** Last from coordinates. */
@ -148,7 +148,10 @@ public class MovingData extends ACheckData {
public boolean creativeFlyPreviousRefused;
// Data of the more packets check.
/** Packet frequency count. */
public final ActionFrequency morePacketsFreq = new ActionFrequency(10, 500);
/** Burst count. */
public final ActionFrequency morePacketsBurstFreq = new ActionFrequency(12, 5000);
private Location morePacketsSetback = null;
// Data of the more packets vehicle check.

View File

@ -505,6 +505,9 @@ public abstract class ConfPaths {
public static final String MOVING_MOREPACKETS_CHECK = MOVING_MOREPACKETS + "active";
public static final String MOVING_MOREPACKETS_EPSIDEAL = MOVING_MOREPACKETS + "epsideal";
public static final String MOVING_MOREPACKETS_EPSMAX = MOVING_MOREPACKETS + "epsmax";
private static final String MOVING_MOREPACKETS_BURST = MOVING_MOREPACKETS + "burst.";
public static final String MOVING_MOREPACKETS_BURST_PACKETS = MOVING_MOREPACKETS_BURST + "packets";
public static final String MOVING_MOREPACKETS_BURST_EPM = MOVING_MOREPACKETS_BURST + "epmviolation";
public static final String MOVING_MOREPACKETS_ACTIONS = MOVING_MOREPACKETS + "actions";
private static final String MOVING_MOREPACKETSVEHICLE = MOVING + "morepacketsvehicle.";

View File

@ -357,6 +357,8 @@ public class DefaultConfig extends ConfigFile {
set(ConfPaths.MOVING_MOREPACKETS_CHECK, true);
set(ConfPaths.MOVING_MOREPACKETS_EPSIDEAL, 20);
set(ConfPaths.MOVING_MOREPACKETS_EPSMAX, 22);
set(ConfPaths.MOVING_MOREPACKETS_BURST_PACKETS, 40);
set(ConfPaths.MOVING_MOREPACKETS_BURST_EPM, 30);
set(ConfPaths.MOVING_MOREPACKETS_ACTIONS, "cancel vl>10 log:morepackets:0:2:if cancel vl>100 log:morepackets:0:2:if cancel cmd:kickpackets");
set(ConfPaths.MOVING_MOREPACKETSVEHICLE_CHECK, true);

View File

@ -30,9 +30,12 @@ public class NetStatic {
* @param idealPackets
* The "ideal" amount of packets per second. Used for "burning"
* time frames by setting them to this amount.
* @return The violation amount, i.e. "count above limit".
* @param burstFreq Counting burst events, should be covering a minute or so.
* @param burstPackets Packets in the first time window to add to burst count.
* @param burstEPM Events per minute to trigger a burst violation.
* @return The violation amount, i.e. "count above limit", 0.0 if no violation.
*/
public static double morePacketsCheck(final ActionFrequency packetFreq, final long time, final float packets, final float maxPackets, final float idealPackets) {
public static double morePacketsCheck(final ActionFrequency packetFreq, final long time, final float packets, final float maxPackets, final float idealPackets, final ActionFrequency burstFreq, final float burstPackets, final double burstEPM) {
// Pull down stuff.
final long winDur = packetFreq.bucketDuration();
final int winNum = packetFreq.numberOfBuckets();
@ -75,7 +78,7 @@ public class NetStatic {
final double fullCount;
if (burnStart < winNum) {
// Assume all following time windows are burnt.
// TODO: empty score + trailing score !? max with trailing bukkets * ideal (!)
// TODO: empty score + trailing score !? max with trailing buckets * ideal (!)
final float trailing = Math.max(packetFreq.trailingScore(burnStart, 1f), burnScore * (winNum - burnStart - empty));
final float leading = packetFreq.leadingScore(burnStart, 1f);
fullCount = leading + trailing;
@ -84,8 +87,13 @@ public class NetStatic {
fullCount = packetFreq.score(1f);
}
return (double) fullCount - (double) (maxPackets * winNum * winDur / 1000f);
double violation = (double) fullCount - (double) (maxPackets * winNum * winDur / 1000f);
final float burst = packetFreq.bucketScore(0);
if (burst > burstPackets) {
burstFreq.add(time, 1f); // TODO: Remove float packets or do this properly.
violation = Math.max(violation, burstEPM * (double) (burstFreq.bucketDuration() * burstFreq.numberOfBuckets()) / 60000.0 - (double) burstFreq.score(0f));
}
return Math.max(0.0, violation);
}
}