Skip to content
Snippets Groups Projects
Commit ac4c4194 authored by Maximilian Wilhelm's avatar Maximilian Wilhelm
Browse files

Add message cache and use it for "Peers updated:" messages.

parent 7206851a
No related branches found
No related tags found
No related merge requests found
......@@ -40,12 +40,14 @@ __batcave = None
ffpb_resolver = dns.resolver.Resolver()
ffpb_resolver.nameservers = ['10.132.251.53']
msg_cache = {}
msg_cache_time = 10
class MsgHandler(SocketServer.BaseRequestHandler):
"""Reads line from TCP stream and forwards it to configured IRC channels."""
def handle(self):
data = self.request.recv(2048).strip()
msg = str (self.request.recv(2048).strip())
sender = self.resolve_name(self.client_address[0])
bot = self.server.bot
......@@ -55,15 +57,28 @@ class MsgHandler(SocketServer.BaseRequestHandler):
target = bot.config.core.owner
if bot.config.has_section('ffpb'):
is_public = data.lstrip().startswith("PUBLIC:")
is_public = msg.lstrip().startswith("PUBLIC:")
if is_public and not bot.config.ffpb.msg_target_public is None:
data = data[7:].lstrip()
msg = msg[7:].lstrip()
target = bot.config.ffpb.msg_target_public
elif not bot.config.ffpb.msg_target is None:
target = bot.config.ffpb.msg_target
bot.msg(target, "[{0}] {1}".format(sender, str(data)))
# Try to aggregate peer updates and print them in batch
if msg.startswith ("Peers updated:"):
if msg not in msg_cache:
msg_cache[msg] = {
'time' : time.time (),
'nodes' : []
}
# Save message in message cache, will be delivered later
msg_cache[msg]['nodes'].append (sender)
return
bot.msg(target, "[{0}] {1}".format(sender, msg))
def resolve_name(self, ipaddr):
"""
......@@ -565,6 +580,15 @@ def ffpb_updatepeers(bot):
bot.msg(bot.config.ffpb.msg_target, response)
@willie.module.interval(15)
def ffpb_print_cached_messages (bot):
for msg, m_info in msg_cache.items ():
if time.time () - m_info['time'] > msg_cache_time:
sender = ", ".join (sorted (m_info['nodes']))
bot.msg (bot.config.ffpb.msg_target, "[{0}] {1}".format (sender, msg))
del msg_cache[msg]
def ffpb_fetch_stats(bot, url, memoryid):
"""Fetch a ffmap-style nodes.json from the given URL and
store it in the bot's memory."""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment