diff --git a/test/data/check-snmp-agent-configs.py b/test/data/check-snmp-agent-configs.py new file mode 100644 index 0000000000000000000000000000000000000000..e91061e801269cc03d75f955a1da27fc956296e6 --- /dev/null +++ b/test/data/check-snmp-agent-configs.py @@ -0,0 +1,64 @@ +from inventory_provider.tasks.common import get_current_redis +from inventory_provider import config +from lxml import etree +import socket + +COLLECTORS = [ + 'prod-noc-alarms01.geant.org', + 'prod-noc-alarms02.geant.org', + 'prod-noc-alarms03.geant.org', + 'uat-noc-alarms01.geant.org', + 'uat-noc-alarms02.geant.org', + 'uat-noc-alarms03.geant.org', + 'test-noc-alarms01.geant.org', + 'test-noc-alarms02.geant.org', + 'test-noc-alarms03.geant.org' +] + +def v4_address(hostname): + for a in socket.getaddrinfo(hostname, None): + (family, type, proto, canonname, sockaddr) = a + if family != socket.AF_INET: + continue + if type != socket.SOCK_DGRAM: + continue + return sockaddr[0] + assert False, 'not resolveable' + +ADDRESS = dict([(c, v4_address(c)) for c in COLLECTORS]) + +with open('config-sentinel.json') as f: + params = config.load(f) + + + +def agent_addresses(netconf_string): + doc = etree.fromstring(netconf_string) + return doc.xpath('//configuration/snmp/trap-group/targets/name/text()') + + +columns = [''] + COLLECTORS +print(','.join(columns)) +columns = [''] + [ADDRESS[c] for c in COLLECTORS] +print(','.join(columns)) + +def _c(b): + return '+' if b else 'MISSING' + +r = get_current_redis(params) +for k in r.scan_iter('netconf:*'): + k = k.decode('utf-8') + + router = k[len('netconf:'):] + columns = [router] + + data = r.get(k).decode('utf-8') + agents = agent_addresses(data) + + columns += [_c(ADDRESS[c] in agents) for c in COLLECTORS] + print(','.join(columns)) + # # print(k) + # # print(etree.pretty_print(netconf_doc)) + # break + +