|
@@ -40,12 +40,14 @@ __batcave = None
|
|
ffpb_resolver = dns.resolver.Resolver()
|
|
ffpb_resolver = dns.resolver.Resolver()
|
|
ffpb_resolver.nameservers = ['10.132.251.53']
|
|
ffpb_resolver.nameservers = ['10.132.251.53']
|
|
|
|
|
|
|
|
+msg_cache = {}
|
|
|
|
+msg_cache_time = 10
|
|
|
|
|
|
class MsgHandler(SocketServer.BaseRequestHandler):
|
|
class MsgHandler(SocketServer.BaseRequestHandler):
|
|
"""Reads line from TCP stream and forwards it to configured IRC channels."""
|
|
"""Reads line from TCP stream and forwards it to configured IRC channels."""
|
|
|
|
|
|
def handle(self):
|
|
def handle(self):
|
|
- data = self.request.recv(2048).strip()
|
|
|
|
|
|
+ msg = str (self.request.recv(2048).strip())
|
|
sender = self.resolve_name(self.client_address[0])
|
|
sender = self.resolve_name(self.client_address[0])
|
|
|
|
|
|
bot = self.server.bot
|
|
bot = self.server.bot
|
|
@@ -55,15 +57,28 @@ class MsgHandler(SocketServer.BaseRequestHandler):
|
|
|
|
|
|
target = bot.config.core.owner
|
|
target = bot.config.core.owner
|
|
if bot.config.has_section('ffpb'):
|
|
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:
|
|
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
|
|
target = bot.config.ffpb.msg_target_public
|
|
elif not bot.config.ffpb.msg_target is None:
|
|
elif not bot.config.ffpb.msg_target is None:
|
|
target = bot.config.ffpb.msg_target
|
|
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):
|
|
def resolve_name(self, ipaddr):
|
|
"""
|
|
"""
|
|
@@ -565,6 +580,15 @@ def ffpb_updatepeers(bot):
|
|
bot.msg(bot.config.ffpb.msg_target, response)
|
|
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):
|
|
def ffpb_fetch_stats(bot, url, memoryid):
|
|
"""Fetch a ffmap-style nodes.json from the given URL and
|
|
"""Fetch a ffmap-style nodes.json from the given URL and
|
|
store it in the bot's memory."""
|
|
store it in the bot's memory."""
|