|
@@ -2,6 +2,8 @@
|
|
|
from __future__ import print_function
|
|
|
import willie
|
|
|
|
|
|
+import datetime
|
|
|
+from email.utils import mktime_tz
|
|
|
import git
|
|
|
import netaddr
|
|
|
import json
|
|
@@ -21,6 +23,7 @@ stats = None
|
|
|
|
|
|
alfred_method = None
|
|
|
alfred_data = None
|
|
|
+alfred_update = datetime.datetime(1970,1,1,23,42)
|
|
|
|
|
|
ffpb_resolver = dns.resolver.Resolver ()
|
|
|
ffpb_resolver.nameservers = ['10.132.254.53']
|
|
@@ -160,25 +163,48 @@ def mac2ipv6(mac, prefix=None):
|
|
|
@willie.module.interval(30)
|
|
|
def ffpb_updatealfred(bot):
|
|
|
"""Aktualisiere ALFRED-Daten"""
|
|
|
- global alfred_data
|
|
|
+ global alfred_data, alfred_update
|
|
|
|
|
|
if alfred_method is None or alfred_method == "None":
|
|
|
return
|
|
|
|
|
|
+ updated = None
|
|
|
if alfred_method == "exec":
|
|
|
rawdata = subprocess.check_output(['alfred-json', '-z', '-r', '158'])
|
|
|
- alfred_data = json.load(rawdata)
|
|
|
- #print("Fetched new ALFRED data:", len(alfred_data), "entries")
|
|
|
+ updated = datetime.datetime.now()
|
|
|
+ elif alfred_method.startswith("http"):
|
|
|
+ try:
|
|
|
+ rawdata = urllib2.urlopen(alfred_method)
|
|
|
+ except:
|
|
|
+ print("Failed to download ALFRED data.")
|
|
|
+ return
|
|
|
+ updated = datetime.datetime.fromtimestamp(mktime_tz(rawdata.info().getdate_tz("Last-Modified")))
|
|
|
+ else:
|
|
|
+ print("Unknown ALFRED data method '", alfred_method, "', cannot load new data.", sep="")
|
|
|
+ alfred_data = None
|
|
|
return
|
|
|
|
|
|
- if alfred_method.startswith("http"):
|
|
|
- rawdata = urllib2.urlopen(alfred_method)
|
|
|
+ try:
|
|
|
alfred_data = json.load(rawdata)
|
|
|
- #print("Downloaded new ALFRED data:", len(alfred_data), "entries")
|
|
|
+ #print("Fetched new ALFRED data:", len(alfred_data), "entries")
|
|
|
+ alfred_update = updated
|
|
|
+
|
|
|
+ except ValueError as e:
|
|
|
+ print("Failed to parse ALFRED data ({0}): {1}".format(e.errno, e.strerror))
|
|
|
return
|
|
|
|
|
|
- print("Unknown ALFRED data method '", alfred_method, "', cannot load new data.", sep="")
|
|
|
- alfred_data = None
|
|
|
+def ffpb_alfred_data_outdated():
|
|
|
+ timeout = datetime.datetime.now() - datetime.timedelta(minutes=5)
|
|
|
+ is_outdated = timeout > alfred_update
|
|
|
+ #print("ALFRED outdated? {0} (timeout={1} vs. lastupdate={2})".format(is_outdated, timeout, alfred_update))
|
|
|
+ return is_outdated
|
|
|
+
|
|
|
+@willie.module.commands('debug-alfred')
|
|
|
+def ffpb_debug_alfred(bot, trigger):
|
|
|
+ if alfred_data is None:
|
|
|
+ bot.say("Keine ALFRED-Daten vorhanden.")
|
|
|
+ else:
|
|
|
+ bot.say("ALFRED Daten: count={0} lastupdate={1}".format(len(alfred_data), alfred_update))
|
|
|
|
|
|
@willie.module.commands('info')
|
|
|
def ffpb_peerinfo(bot, trigger):
|
|
@@ -191,6 +217,10 @@ def ffpb_peerinfo(bot, trigger):
|
|
|
bot.say("Informationen sind ausverkauft, kommen erst morgen wieder rein.")
|
|
|
return
|
|
|
|
|
|
+ if ffpb_alfred_data_outdated():
|
|
|
+ bot.say("Ich habe gerade keine aktuellen Informationen, daher sage ich mal lieber nichts zu '" + target_name + "'.")
|
|
|
+ return
|
|
|
+
|
|
|
node = ffpb_findnode(target_name)
|
|
|
if node is None:
|
|
|
bot.say("Kein Plan wer oder was mit '" + target_name + "' gemeint ist :(")
|
|
@@ -243,6 +273,10 @@ def ffpb_peerlink(bot, trigger):
|
|
|
bot.say("Informationen sind ausverkauft, kommen erst morgen wieder rein.")
|
|
|
return
|
|
|
|
|
|
+ if ffpb_alfred_data_outdated():
|
|
|
+ bot.say("Ich habe gerade keine aktuellen Informationen, daher sage ich mal lieber nichts zu '" + target_name + "'.")
|
|
|
+ return
|
|
|
+
|
|
|
node = ffpb_findnode(target_name)
|
|
|
if node is None:
|
|
|
bot.say("Kein Plan wer oder was mit '" + target_name + "' gemeint ist :(")
|