def emit_object_using(bucket,name,pre): longest = -1 for k,v in bucket.__dict__.iteritems(): logger.debug('DEBUG (longest.1): %s=%s' % (k,v)) if (k not in ['__dict__']): try: for kk,vv in v.__dict__.iteritems(): if (kk not in ['__dict__']): longest = max(longest,len(kk)) logger.debug('DEBUG (longest.2): longest=%s' % (longest)) except: pass longest += 10 logger.debug('DEBUG (longest.3): longest=%s' % (longest)) for k,v in iter(sorted(bucket.__dict__.iteritems())): logger.debug('DEBUG.1: %s=%s' % (k,v)) if (k not in ['__dict__']): try: logger.debug('DEBUG.2: %s=%s' % (k,v)) logger.debug('DEBUG.2.1: %s, %s' % (pre,name)) fOut.write('%s\n' % (pre % (name))) for kk,vv in v.__dict__.iteritems(): logger.debug('DEBUG.3: (%s)' % ((kk not in ['__dict__']))) if (kk not in ['__dict__']): fOut.write('\t%s%s%s\n' % (kk,' '*(longest-len(kk)),vv)) fOut.write('}\n\n') except Exception, ex: logger.exception('EXCEPTION: %s' % (formattedException(details=ex)))
def shellexecute(cmd): results = None if (isUsingLinux): try: infile, outfile, errfile = os.popen3(cmd) stdout_lines = outfile.readlines() stderr_lines = errfile.readlines() results = stdout_lines + stderr_lines except Exception, ex: results = formattedException(details=ex)
def handle_services(cfgname,payload,logger): __re2__ = re.compile("\Ahost[0-9]*_") __re3__ = re.compile("\Aservice[0-9]*_") __re4__ = re.compile("\Acommand[0-9]*_") __services__ = [] __status__ = '' if (cfgname): logger.debug('DEBUG.1: payload.keys()=%s' % (payload.keys())) items = [k for k in payload.keys() if (__re2__.search(k))] logger.debug('DEBUG.1: items=%s' % (items)) hosts = SmartObject() for item in items: toks = item.split('_') if (hosts[toks[0]] is None): hosts[toks[0]] = SmartObject() hosts[toks[0]]['_'.join(toks[1:])] = payload[item] logger.debug('DEBUG.2: hosts=%s' % (hosts.__dict__)) items = [k for k in payload.keys() if (__re4__.search(k))] logger.debug('DEBUG.4: items=%s' % (items)) commands = SmartObject() for item in items: toks = item.split('_') if (commands[toks[0]] is None): commands[toks[0]] = SmartObject() commands[toks[0]]['_'.join(toks[1:])] = payload[item] logger.debug('DEBUG.5: commands=%s' % (commands.__dict__)) items = [k for k in payload.keys() if (__re3__.search(k))] logger.debug('DEBUG.3: items=%s' % (items)) services = SmartObject() toks = None count = 0 for item in items: toks = item.split('_') if (services[toks[0]] is None): services[toks[0]] = SmartObject() count += 1 services[toks[0]]['_'.join(toks[1:])] = payload[item] if (isList(payload.partition_names)): logger.debug('DEBUG.4.0: payload.partition_names=%s' % (payload.partition_names)) for pname in payload.partition_names: logger.debug('DEBUG.4.0.1: pname=%s' % (pname)) sname = 'service%s' % (count+1) if (services[sname] is None): services[sname] = SmartObject() first_host = None for k,v in hosts.__dict__.iteritems(): logger.debug('DEBUG.4.1: %s=%s [%s]' % (k,v,(k not in ['__dict__']))) if (k not in ['__dict__']): first_host = v logger.debug('DEBUG.4.1.1: first_host=%s' % (first_host)) break first_command = None for k,v in commands.__dict__.iteritems(): logger.debug('DEBUG.4.2: %s=%s [%s]' % (k,v,(k not in ['__dict__']))) if (k not in ['__dict__']): first_command = v logger.debug('DEBUG.4.2.1: first_command=%s' % (first_command)) break services[sname]["use"] = "generic-service" services[sname]["host_name"] = first_host['host_name'] if (first_host) else 'UNKNOWN' services[sname]["service_description"] = pname services[sname]["active_checks_enabled"] = "0" services[sname]["passive_checks_enabled"] = "1" services[sname]["check_command"] = first_command['command_name'] if (first_command) else 'dummy_command' count += 1 logger.debug('DEBUG.4.3: services[%s]=%s' % (sname,services[sname])) logger.debug('DEBUG.4: services=%s' % (services.__dict__)) if (len(items) > 0): logger.debug('DEBUG: BEGIN:') preamble = 'define %s{' fOut = open(cfgname,'w') try: def emit_object_using(bucket,name,pre): longest = -1 for k,v in bucket.__dict__.iteritems(): logger.debug('DEBUG (longest.1): %s=%s' % (k,v)) if (k not in ['__dict__']): try: for kk,vv in v.__dict__.iteritems(): if (kk not in ['__dict__']): longest = max(longest,len(kk)) logger.debug('DEBUG (longest.2): longest=%s' % (longest)) except: pass longest += 10 logger.debug('DEBUG (longest.3): longest=%s' % (longest)) for k,v in iter(sorted(bucket.__dict__.iteritems())): logger.debug('DEBUG.1: %s=%s' % (k,v)) if (k not in ['__dict__']): try: logger.debug('DEBUG.2: %s=%s' % (k,v)) logger.debug('DEBUG.2.1: %s, %s' % (pre,name)) fOut.write('%s\n' % (pre % (name))) for kk,vv in v.__dict__.iteritems(): logger.debug('DEBUG.3: (%s)' % ((kk not in ['__dict__']))) if (kk not in ['__dict__']): fOut.write('\t%s%s%s\n' % (kk,' '*(longest-len(kk)),vv)) fOut.write('}\n\n') except Exception, ex: logger.exception('EXCEPTION: %s' % (formattedException(details=ex))) emit_object_using(hosts, 'host', preamble) emit_object_using(commands, 'command', preamble) emit_object_using(services, 'service', preamble) except Exception, ex: logger.exception('EXCEPTION: %s' % (formattedException(details=ex))) logger.debug('DEBUG: END !!!') logger.debug('DEBUG: fOut=%s' % (fOut.name)) fOut.flush() fOut.close()
def handle_disk_services(cfgname,payload,logger): __re1__ = re.compile(r"define\s*service.*\{") __re2__ = re.compile(r"service_description\s*DISK") __re3__ = re.compile("service[0-9]*_") __services__ = [] __status__ = '' if (cfgname) and (os.path.exists(cfgname)): logger.debug('DEBUG.1: payload.keys()=%s' % (payload.keys())) items = [k for k in payload.keys() if (__re3__.search(k))] logger.debug('DEBUG.1: items=%s' % (items)) services = SmartObject() for item in items: toks = item.split('_') if (services[toks[0]] is None): services[toks[0]] = SmartObject() services[toks[0]]['_'.join(toks[1:])] = payload[item] logger.debug('DEBUG.1a: services=%s' % (services.__dict__)) if (len(items) > 0): __matches__ = False def collecting(aLine,m,lineNum): __service__.append(SmartObject(args={'linenum':lineNum,'content':aLine})) logger.debug('DEBUG.2: collecting=%s' % (len(__service__))) if (aLine.find('}') > -1): m = False logger.debug('DEBUG.3: __matches__=%s' % (__matches__)) return m fIn = open(cfgname) try: lines = fIn.readlines() __service__ = [] matches2 = None line_num = 0 for l in lines: line_num += 1 logger.debug('DEBUG.4: l=%s' % (l)) if (__matches__): logger.debug('DEBUG.5: matches2=%s' % (matches2)) if (matches2 is None): matches2 = __re2__.search(l) logger.debug('DEBUG.6: matches2=%s' % (matches2)) __matches__ = collecting(l,__matches__,line_num) else: matches1 = __re1__.search(l) logger.debug('DEBUG.7: matches1=%s' % (matches1)) if (matches1): logger.debug('DEBUG.8: matches2=%s' % (matches2)) if (matches2 is not None): __services__.append(__service__) matches2 = None __service__ = [] __matches__ = True logger.debug('DEBUG.9: __matches__=%s' % (__matches__)) __matches__ = collecting(l,__matches__,line_num) except Exception, ex: logger.exception('EXCEPTION: %s' % (formattedException(details=ex))) fIn.close() __status__ = 'Found %s service%s in %s to be replaced by %s service%s from payload.' % (len(__services__),'s' if (len(__services__) > 1) else '',cfgname,len(services.__dict__),'s' if (len(services.__dict__) > 1) else '') logger.debug('DEBUG: %s' % (__status__)) if (len(__services__) > 0): cfgname_new = cfgname+'.new' for svc in __services__: l_begin = svc[0].linenum l_end = svc[-1].linenum preamble = '' assert l_begin < l_end, 'ERROR.1: Check your logic, sir.' logger.debug('DEBUG: BEGIN:') fIn = open(cfgname) fOut = open(cfgname_new,'w') for i in xrange(0,l_begin): l = fIn.readline() if (i < l_begin): preamble = l fOut.write(l) try: if (0): for i in xrange(l_begin,l_end): l = fIn.readline() logger.debug('DEBUG: SKIPPING: %s' % (l)) for item in svc: #assert l == item.content, 'ERROR.2: Check your logic, please. Expected (%s) got (%s).' % (item.content,l) logger.debug('DEBUG: %s' % (item.__dict__)) #l = fIn.readline() # toss this line away fOut.write(item.content) if (1): longest = -1 for k,v in services.__dict__.iteritems(): logger.debug('DEBUG (longest.1): %s=%s' % (k,v)) if (k not in ['__dict__']): try: for kk,vv in v.__dict__.iteritems(): if (kk not in ['__dict__']): longest = max(longest,len(kk)) logger.debug('DEBUG (longest.2): longest=%s' % (longest)) except: pass longest += 10 logger.debug('DEBUG (longest.3): longest=%s' % (longest)) for k,v in iter(sorted(services.__dict__.iteritems())): logger.debug('DEBUG: %s=%s' % (k,v)) l = fIn.readline() # toss this line away if (k not in ['__dict__']): try: for kk,vv in v.__dict__.iteritems(): if (kk not in ['__dict__']): fOut.write('\t%s%s%s\n' % (kk,' '*(longest-len(kk)),vv)) fOut.write('}\n\n') fOut.write('%s' % (preamble)) except: pass while (1): l = fIn.readline() if (not l): break fOut.write(l) except Exception, ex: logger.exception('EXCEPTION: %s' % (formattedException(details=ex))) logger.debug('DEBUG: END !!!') logger.debug('DEBUG: fIn=%s, fOut=%s' % (fIn.name,fOut.name)) fIn.close() fOut.flush() fOut.close()
def POST(self,uri): ''' /nsca/nagios/update/config { "oper":"login", "username":"******", "password":"******", "target":"nagios.cfg", "cfg":"remote1_nagios2", "service1": { "use":"generic-service", "host_name":"remote1", "service_description":"DISK_1", "active_checks_enabled":"0", "passive_checks_enabled":"1", "check_command":"dummy_command2" }, "service2": { "use":"generic-service", "host_name":"remote1", "service_description":"DISK_2", "active_checks_enabled":"0", "passive_checks_enabled":"1", "check_command":"dummy_command2" } } /nsca/nagios/send/nsca { "oper":"login", "username":"******", "password":"******", "send_nsca": "localhost\\tDummy Service\\t2\\tlocalhost Mon Dec 23 22:03:50 UTC 2013", "cfg":"/etc/send_nsca.cfg" } /nsca/nagios/create/config {"oper": "login", "username": "******", "password": "******", "target": "nagios.cfg", "cfg": "remote2_nagios2", "partitions": "awk '{print $4}' /proc/partitions | sed -e '/name/d' -e '/^$/d' -e '/[1-9]/!d'", "host1": { "use": "generic-host", "host_name": "remote1", "alias": "remote1", "address": "0.0.0.0" }, "command1": { "command_name": "dummy_command2", "command_line": "echo \"0\"" }, "service1": { "use":"generic-service", "host_name":"remote1", "service_description":"CPULoad", "active_checks_enabled":"0", "passive_checks_enabled":"1", "check_command":"dummy_command2" }, "service2": { "use":"generic-service", "host_name":"remote1", "service_description":"CurrentUsers", "active_checks_enabled":"0", "passive_checks_enabled":"1", "check_command":"dummy_command2" }, "service3": { "use":"generic-service", "host_name":"remote1", "service_description":"PING", "active_checks_enabled":"0", "passive_checks_enabled":"1", "check_command":"dummy_command2" }, "service4": { "use":"generic-service", "host_name":"remote1", "service_description":"SSH", "active_checks_enabled":"0", "passive_checks_enabled":"1", "check_command":"dummy_command2" }, "service5": { "use":"generic-service", "host_name":"remote1", "service_description":"TotalProcesses", "active_checks_enabled":"0", "passive_checks_enabled":"1", "check_command":"dummy_command2" }, "service6": { "use":"generic-service", "host_name":"remote1", "service_description":"ZombieProcesses", "active_checks_enabled":"0", "passive_checks_enabled":"1", "check_command":"dummy_command2" } } ''' logger.info('1. uri=%s' % (uri)) web.header('Content-Type', 'application/json') logger.info('2. web.data()=%s' % (web.data())) d = {} status = '' try: payload = utils.SmartObject(simplejson.loads(web.data())) except Exception, ex: payload = utils.SmartObject() content = formattedException(details=ex) logger.exception(content) d['exception1'] = content