def test_automonitor_strings_basic(self): # Clean things out so we only see what we want to see... ocf_string = '''{ # comment "class": "ocf", "type": "neo4j", "provider": "assimilation", "classconfig": [ [null, "@basename()", "java$"], [null, "$argv[-1]", "org\\.neo4j\\.server\\.Bootstrapper$"], ["PORT", "serviceport", "[0-9]+$"], ["NEOHOME", "@argequals(-Dneo4j.home)", "/.*"] ] }''' ocf = MonitoringRule.ConstructFromString(ocf_string) self.assertTrue(isinstance(ocf, OCFMonitoringRule)) lsb_string = '''{ # comment "class": "lsb", "type": "neo4j", "classconfig": [ ["@basename()", "java$"], ["$argv[-1]", "org\\.neo4j\\.server\\.Bootstrapper$"], ] }''' lsb = MonitoringRule.ConstructFromString(lsb_string) self.assertTrue(isinstance(lsb, LSBMonitoringRule))
def test_automonitor_search_basic(self): drone = FakeDrone({ 'data': { 'ocf': { 'assimilation/neo4j', }, 'lsb': { 'neo4j-service', } } }) MonitoringRule.monitor_objects = {'service': {}, 'host': {}} ocf_string = '''{ "class": "ocf", "type": "neo4j", "provider": "assimilation", "classconfig": [ [null, "@basename()", "java$"], [null, "$argv[-1]", "org\\.neo4j\\.server\\.Bootstrapper$"], ["PORT", "$serviceport"], ["NEOHOME", "@argequals(-Dneo4j.home)", "/.*"] ] }''' MonitoringRule.ConstructFromString(ocf_string) lsb_string = '''{ "class": "lsb", "type": "neo4j-service", "classconfig": [ ["@basename()", "java$"], ["$argv[-1]", "org\\.neo4j\\.server\\.Bootstrapper$"], ] }''' MonitoringRule.ConstructFromString(lsb_string) neoprocargs = ( "/usr/bin/java", "-cp", "/var/lib/neo4j/lib/concurrentlinkedhashmap-lru-1.3.1.jar:" "AND SO ON:" "/var/lib/neo4j/system/lib/slf4j-api-1.6.2.jar:" "/var/lib/neo4j/conf/", "-server", "-XX:" "+DisableExplicitGC", "-Dneo4j.home=/var/lib/neo4j", "-Dneo4j.instance=/var/lib/neo4j", "-Dfile.encoding=UTF-8", "org.neo4j.server.Bootstrapper") neonode = ProcessNode('global', 'foofred', 'fred', '/usr/bin/java', neoprocargs, 'root', 'root', '/', roles=(CMAconsts.ROLE_server, )) #neonode.serviceport=7474 context = ExpressionContext((neonode, drone)) first = MonitoringRule.findbestmatch(context) second = MonitoringRule.findbestmatch(context, False) list1 = MonitoringRule.findallmatches(context) neonode.serviceport = 7474 third = MonitoringRule.findbestmatch(context) list2 = MonitoringRule.findallmatches(context) # first should be the LSB instance self.assertEqual(first[1]['monitorclass'], 'lsb') self.assertEqual(first[0], MonitoringRule.LOWPRIOMATCH) # second should be the incomplete OCF instance self.assertEqual(second[1]['monitorclass'], 'ocf') self.assertEqual(second[0], MonitoringRule.PARTMATCH) # third should be the high priority OCF instance self.assertEqual(third[1]['monitorclass'], 'ocf') self.assertEqual(third[0], MonitoringRule.HIGHPRIOMATCH) # list1 should be the incomplete OCF and the complete LSB - in that order self.assertEqual(len(list1), 2) # They should come out sorted by monitorclass self.assertEqual(list1[0][0], MonitoringRule.LOWPRIOMATCH) self.assertEqual(list1[0][1]['monitorclass'], 'lsb') self.assertEqual(list1[1][0], MonitoringRule.PARTMATCH) self.assertEqual(list1[1][1]['monitorclass'], 'ocf') # third should be a complete OCF match # list2 should be the complete OCF and the complete OCF - in that order self.assertEqual(len(list2), 2) self.assertEqual(list2[0][0], MonitoringRule.LOWPRIOMATCH) self.assertEqual(list2[0][1]['monitorclass'], 'lsb') self.assertEqual(list2[1][0], MonitoringRule.HIGHPRIOMATCH) self.assertEqual(list2[1][1]['monitorclass'], 'ocf')
def test_automonitor_functions(self): MonitoringRule.monitor_objects = {'service': {}, 'host': {}} drone = FakeDrone( {'data': { 'ocf': { 'assimilation/neo4j', }, 'lsb': { 'bacula', }, }}) ocf_string = '''{ "class": "ocf", "type": "neo4j", "provider": "assimilation", "classconfig": [ ["classpath", "@flagvalue(-cp)"], ["ipaddr", "@serviceip($JSON_procinfo.listenaddrs)"], ["port", "@serviceport()", "[0-9]+$"] ] }''' ssh_json = '''{ "exe": "/usr/sbin/sshd", "argv": [ "/usr/sbin/sshd", "-D" ], "uid": "root", "gid": "root", "cwd": "/", "listenaddrs": { "0.0.0.0:22": { "proto": "tcp", "addr": "0.0.0.0", "port": 22 }, ":::22": { "proto": "tcp6", "addr": "::", "port": 22 } } }''' neo4j_json = '''{ "exe": "/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java", "argv": [ "/usr/bin/java", "-cp", "/var/lib/neo4j/lib/concurrentlinkedhashmap-lru-1.3.1.jar: ...", "-server", "-XX:+DisableExplicitGC", "-Dorg.neo4j.server.properties=conf/neo4 j-server.properties", "-Djava.util.logging.config.file=conf/logging.properties", "-Dlog4j.configuration=file:conf/log4j.properties", "-XX: +UseConcMarkSweepGC", "-XX:+CMSClassUnloadingEnabled", "-Dneo4j.home=/var/lib/neo4j", "-Dneo4j.instance=/var/lib/neo4j", "-Dfile.encoding= UTF-8", "org.neo4j.server.Bootstrapper" ], "uid": "neo4j", "gid": "neo4j", "cwd": "/var/lib/neo4j", "listenaddrs": { ":::1337": { "proto": "tcp6", "addr": "::", "port": 1337 }, ":::39185": { "proto": "tcp6", "addr": "::", "port": 39185 } } }''' bacula_json = '''{ "exe": "/usr/sbin/bacula-dir", "argv": [ "/usr/sbin/bacula-dir", "-c", "/etc/bacula/bacula-dir.conf", "-u", "bacula", "-g", "bacula" ], "uid": "bacula", "gid": "bacula", "cwd": "/", "listenaddrs": { "10.10.10.5:9101": { "proto": "tcp", "addr": "10.10.10.5", "port": 9101 } } }''' MonitoringRule.ConstructFromString(ocf_string) neoargs = pyConfigContext(neo4j_json)['argv'] testnode = ProcessNode('global', 'foofred', 'fred', '/usr/bin/java', neoargs, 'root', 'root', '/', roles=(CMAconsts.ROLE_server, )) testnode.JSON_procinfo = neo4j_json context = ExpressionContext((testnode, drone)) (prio, match) = MonitoringRule.findbestmatch(context) self.assertEqual(prio, MonitoringRule.HIGHPRIOMATCH) self.assertEqual(match['arglist']['ipaddr'], '::1') self.assertEqual(match['arglist']['port'], '1337') testnode.JSON_procinfo = ssh_json context = ExpressionContext((testnode, drone)) (prio, match) = MonitoringRule.findbestmatch(context) self.assertEqual(prio, MonitoringRule.HIGHPRIOMATCH) self.assertEqual(match['arglist']['port'], '22') self.assertEqual(match['arglist']['ipaddr'], '127.0.0.1') testnode.JSON_procinfo = bacula_json context = ExpressionContext((testnode, drone)) (prio, match) = MonitoringRule.findbestmatch(context) self.assertEqual(prio, MonitoringRule.HIGHPRIOMATCH) self.assertEqual(match['arglist']['port'], '9101') self.assertEqual(match['arglist']['ipaddr'], '10.10.10.5')