Browse Source

ffpb: monitoring stores last success

Changed storage filename and internal data format: tuple to dict.
Helge Jung 9 years ago
parent
commit
34272c2fb4
2 changed files with 22 additions and 10 deletions
  1. 1 1
      .gitignore
  2. 21 9
      modules/ffpb.py

+ 1 - 1
.gitignore

@@ -6,5 +6,5 @@ build/
 logs/
 alfred.json
 highscoredata
-monitorednodes
+nodes.monitored
 nodes.seen

+ 21 - 9
modules/ffpb.py

@@ -81,7 +81,7 @@ def setup(bot):
 		highscores['clients'] = 0
 		highscores['clients_ts'] = time.time()
 
-	monitored_nodes = shelve.open('monitorednodes', writeback=True)
+	monitored_nodes = shelve.open('nodes.monitored', writeback=True)
 
 	seen_nodes = shelve.open('nodes.seen', writeback=True)
 	bot.memory['seen_nodes'] = seen_nodes
@@ -679,12 +679,17 @@ def ffpb_monitor_ping(bot):
 		notify_target = bot.config.ffpb.msg_target
 
 	for node in monitored_nodes:
-		added = monitored_nodes[node][0]		
-		last_status = monitored_nodes[node][1]
-		last_check = monitored_nodes[node][2]
+		mon = monitored_nodes[node]
+		added = mon['added']
+		last_status = mon['status']
+		last_check = mon['last_check']
+		last_success = mon['last_success']
 
 		current_status = ffpb_ping(bot=None, target_name=node)
-		monitored_nodes[node] = ( added, current_status, time.time() )
+		if current_status is None: current_status = False
+		mon['status'] = current_status
+		mon['last_check'] = time.time()
+		if current_status == True: mon['last_success'] = time.time()
 		print("Monitoring ({0}) {1} (last: {2} at {3})".format(node, current_status, last_status, time.strftime('%Y-%m-%d %H:%M', time.localtime(last_check))))
 		if last_status != current_status and (last_status or current_status):
 			if last_check is None:
@@ -692,7 +697,7 @@ def ffpb_monitor_ping(bot):
 				continue
 
 			if current_status == True:
-				bot.msg(notify_target, 'Monitoring: Knoten \'{0}\' pingt wieder (zuletzt {1})'.format(node, pretty_date(last_check)))
+				bot.msg(notify_target, 'Monitoring: Knoten \'{0}\' pingt wieder (zuletzt {1})'.format(node, pretty_date(last_success) if not last_success is None else '[nie]'))
 			else:
 				bot.msg(notify_target, 'Monitoring: Knoten \'{0}\' DOWN'.format(node))
 
@@ -714,7 +719,14 @@ def ffpb_monitor(bot, trigger):
 		if node in monitored_nodes:
 			bot.say('Knoten \'{0}\' wird bereits gemonitored.'.format(node))
 			return
-		monitored_nodes[node] = ( trigger.sender, None, None )
+
+		monitored_nodes[node] = {
+			'added': trigger.sender, 
+			'status': None,
+			'last_check': None,
+			'last_success': None,
+		}
+
 		bot.say('Knoten \'{0}\' wird jetzt ganz genau beobachtet.'.format(node))
 		return
 
@@ -723,13 +735,13 @@ def ffpb_monitor(bot, trigger):
 			bot.say('Knoten \'{0}\' war gar nicht im Monitoring?!?'.format(node))
 			return
 		del monitored_nodes[node]
-		bot.say('Okidoki, \'{0}\' war mir sowieso egal.'.format(node))
+		bot.say('Okidoki, \'{0}\' lasse ich jetzt links liegen.'.format(node))
 		return
 
 	if cmd == "info":
 		if node in monitored_nodes:
 			info = monitored_nodes[node]
-			bot.say('Knoten \'{0}\' wurde zuletzt {1} gepingt (Ergebnis: {2}) - der Auftrag kam von {3}'.format(node, pretty_date(info[2]) if not info[2] is None else "^W noch nie", info[1], info[0]))
+			bot.say('Knoten \'{0}\' wurde zuletzt {1} gepingt (Ergebnis: {2})'.format(node, pretty_date(info['last_check']) if not info['last_check'] is None else "^W noch nie", info['status']))
 		else:
 			bot.say('Knoten \'{0}\' ist nicht im Monitoring.'.format(node))
 		return