+ ######### GET NODES ########################################
+ # TODO: get authoritative node list from PLC every PLCSLEEP seconds,
+ # feed this into Comon.
+ l_plcnodes = soltesz.if_cached_else(config.cachenodes,
+ "l_plcnodes",
+ lambda : plc.getNodes({'peer_id':None}))
+
+ s_plcnodes = Set([x['hostname'] for x in l_plcnodes])
+
+ # List of nodes from a user-provided file.
+ if config.nodelist:
+ file = config.nodelist
+ nodelist = config.getListFromFile(file)
+ l_nodelist = []
+ print "Getting node info for hosts in: %s" % file
+ for nodename in nodelist:
+ if config.debug: print ".", ; sys.stdout.flush()
+ l_nodelist += plc.getNodes({'hostname': nodename, 'peer_id':None})
+ if config.debug: print ""
+
+ s_usernodes = Set(nodelist)
+ # nodes from PLC and in the user list.
+ s_safe_usernodes = s_plcnodes & s_usernodes
+ s_unsafe_usernodes = s_usernodes - s_plcnodes
+ if len(s_unsafe_usernodes) > 0 :
+ for node in s_unsafe_usernodes:
+ print "WARNING: User provided: %s but not found in PLC" % node
+
+ l_nodes = filter(lambda x: x['hostname'] in s_safe_usernodes,l_plcnodes)
+ else:
+ l_nodes = l_plcnodes
+
+ # Minus blacklisted ones..
+ l_blacklist = soltesz.if_cached_else(1, "l_blacklist", lambda : [])
+ l_ticket_blacklist = soltesz.if_cached_else(1,"l_ticket_blacklist",lambda : [])
+ l_wl_nodes = filter(lambda x : not x['hostname'] in l_blacklist, l_nodes)
+ # A handy dict of hostname-to-nodestruct mapping
+ d_allplc_nodes = dict_from_nodelist(l_wl_nodes)
+
+ ####### RT tickets #########################################
+ t = soltesz.MyTimer()
+ ad_dbTickets = soltesz.if_cached_else(config.cachert, "ad_dbTickets", rt.rt_tickets)
+ print "Getting tickets from RT took: %f sec" % t.diff() ; del t
+
+ # TODO: get input nodes from findbad database, pipe into toCheck
+ cm1 = read_findbad_db(d_allplc_nodes, toCheck)
+
+ # Search for toCheck nodes in the RT db.
+ rt1 = rt.RT(ad_dbTickets, tickets, toCheck, sickNoTicket, l_ticket_blacklist)
+ # Kind of a hack. Cleans the DB for stale entries and updates db.
+ # (UNTESTED)
+ # rt5 = rt.RT(ad_dbTickets, tickets, toCheck, sickNoTicket)
+ # clean = Thread(target=rt5.cleanTickets)