Removed the rate limiter in portal for now, not sure how useful it actually is. Need to investigate further ... later.
This commit is contained in:
parent
9793c57dd4
commit
a23d78d5b0
1 changed files with 3 additions and 32 deletions
|
|
@ -10,8 +10,8 @@ _CONNECTION_RATE = 5.0
|
||||||
_MIN_TIME_BETWEEN_CONNECTS = 1.0 / _CONNECTION_RATE
|
_MIN_TIME_BETWEEN_CONNECTS = 1.0 / _CONNECTION_RATE
|
||||||
_MOD_IMPORT = None
|
_MOD_IMPORT = None
|
||||||
|
|
||||||
_MAX_CMD_RATE = 150.0
|
#_MAX_CMD_RATE = 80.0
|
||||||
_ERROR_COMMAND_OVERFLOW = "You entered commands too fast. Wait a moment and try again."
|
#_ERROR_COMMAND_OVERFLOW = "You entered commands too fast. Wait a moment and try again."
|
||||||
|
|
||||||
#------------------------------------------------------------
|
#------------------------------------------------------------
|
||||||
# Portal-SessionHandler class
|
# Portal-SessionHandler class
|
||||||
|
|
@ -38,14 +38,6 @@ class PortalSessionHandler(SessionHandler):
|
||||||
self.uptime = time()
|
self.uptime = time()
|
||||||
self.connection_time = 0
|
self.connection_time = 0
|
||||||
self.time_last_connect = time()
|
self.time_last_connect = time()
|
||||||
self.cmd_last = time()
|
|
||||||
self.cmd_rate_history = deque([], 200)
|
|
||||||
self.cmd_rate = 0.0
|
|
||||||
self.overflows = 0
|
|
||||||
task.LoopingCall(self._report, interval=30)
|
|
||||||
|
|
||||||
def _report(self):
|
|
||||||
print " INFO: cmd rate: %s, overflows: %s" % (sum(self.cmd_rate_history) / 200.0, self.overflows)
|
|
||||||
|
|
||||||
def at_server_connection(self):
|
def at_server_connection(self):
|
||||||
"""
|
"""
|
||||||
|
|
@ -301,29 +293,8 @@ class PortalSessionHandler(SessionHandler):
|
||||||
Called by portal sessions for relaying data coming
|
Called by portal sessions for relaying data coming
|
||||||
in from the protocol to the server. data is
|
in from the protocol to the server. data is
|
||||||
serialized before passed on.
|
serialized before passed on.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
now = time()
|
|
||||||
self.cmd_rate_history.append(1.0 / (now - self.cmd_last))
|
|
||||||
|
|
||||||
if session.logged_in:
|
|
||||||
# command flood protection
|
|
||||||
self.cmd_rate = sum(self.cmd_rate_history) / 200.0
|
|
||||||
if self.cmd_rate > _MAX_CMD_RATE:
|
|
||||||
max_rate_per_session = _MAX_CMD_RATE / len(self.sessions)
|
|
||||||
session_rate = 1.0 / (now - session.cmd_last)
|
|
||||||
session.cmd_last = now
|
|
||||||
if session_rate > max_rate_per_session:
|
|
||||||
self.overflows += 1
|
|
||||||
session.data_out(text=_ERROR_COMMAND_OVERFLOW)
|
|
||||||
if 100 % self.overflows == 0:
|
|
||||||
print "CMD OVERFLOW %s: %s (%s/%s, %s/%s)" % (session.sessid, text,
|
|
||||||
self.cmd_rate, _MAX_CMD_RATE,
|
|
||||||
session_rate, max_rate_per_session)
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
session.cmd_last = now
|
|
||||||
|
|
||||||
self.portal.amp_protocol.call_remote_MsgPortal2Server(session.sessid,
|
self.portal.amp_protocol.call_remote_MsgPortal2Server(session.sessid,
|
||||||
msg=text,
|
msg=text,
|
||||||
data=kwargs)
|
data=kwargs)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue