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