def searchMonitor(self): userName = auth.uuap_sso() products = auth.getProcByName(userName) if len(products) == 1: products.add('') products = tuple(products) mask = self.input.get('mask', '') limit = int(self.input.get('rows')) page = int(self.input.get('page')) if limit and page: start = limit * page - limit # do not put $limit*($page - 1) sql = "select COUNT(*) as count from monitor where PRODUCT in %s and (LOGPATH LIKE '%%%s%%' or NAME like '%%%s%%' or PRODUCT like '%%%s%%')" % ( str(products), mask, mask, mask) count = zmonlib.ExecSql(sql) count = count[0][0] total_pages = int((count + limit - 1) / limit) sql = "select MONITOR_ID,NAME,PRODUCT,LOGPATH,GREP,GREPV,REGULAR_ID_LIST from monitor where PRODUCT in %s and (LOGPATH LIKE '%%%s%%' or NAME like '%%%s%%' or PRODUCT like '%%%s%%') limit %d,%d" % ( str(products), mask, mask, mask, start, limit) rows = [] result = zmonlib.ExecSql(sql) for rec in result: row = [ rec[0], rec[1], rec[2], rec[3], rec[4], rec[5], self.getHostNum(rec[0]), len(eval(rec[6])) ] rows.append(row) #result = filter(self.filterByRe, rows) logging.debug(rows) return self.changejson(rows, page, total_pages, count)
def initConf(self): conf = {} sql = "SELECT IP,PORT FROM redis where TYPE = '%s'" % self.product result = zmonlib.ExecSql(sql) try: conf['redis'] = [result[0][0], result[0][1]] except: logging.error('get ip,port from redis by product: %s faile,result: %s' % (self.product, str(result))) sys.exit() sql = "SELECT PRODUCT,NAME,UITREE FROM monitor where PRODUCT = '%s'" % self.product result = zmonlib.ExecSql(sql) conf['push_list'] = {} for rec in result: zcm_key = '/zmon/monflow/%s/%s' % (rec[0], rec[1]) tmpdict = eval(rec[2]) nodedict = {} for key in tmpdict: nodename = '%s/%s' % (zcm_key, key) nodedict[nodename] = tmpdict[key].replace(' ','').split(',') conf['push_list'][zcm_key] = nodedict self.conf = conf logging.debug(self.conf) self.push_list = conf['push_list'] logging.info('load conf of product: %s success,result: %s' % (self.product, str(self.conf)))
def deleteHostMonitor(self, monitorId, hostId=None): if hostId == None: sql = 'delete from host_monitor where MONITOR_ID = "%s"' % monitorId zmonlib.ExecSql(sql) else: sql = 'delete from host_monitor where MONITOR_ID = "%s" and HOST_ID = "%s"' % ( monitorId, hostId) zmonlib.ExecSql(sql)
def delRegulars(self): if self.result['code'] != 300: return sql = 'select REGULAR_ID_LIST from monitor where MONITOR_ID = "%s"' % self.monitorId result = zmonlib.ExecSql(sql) regularIdList = eval(result[0][0]) for regularId in regularIdList: sql = 'delete from regular where REGULAR_ID = "%s"' % regularId zmonlib.ExecSql(sql)
def searchRegular(self): if not 'monitorid' in self.input: return sql = 'select REGULAR_ID_LIST from monitor where MONITOR_ID = "%s"' % self.input[ 'monitorid'] result = zmonlib.ExecSql(sql) regularIdList = eval(result[0][0]) results = [] for regularId in regularIdList: sql = 'select REGULAR_ID,NAME,EXPRESSION from regular where REGULAR_ID = "%s"' % regularId result = zmonlib.ExecSql(sql) results.extend(result) return self.change2json(results)
def getProductId(self, productName): sql = 'select REDIS_ID from redis where TYPE="%s"' % productName pId = zmonlib.ExecSql(sql) try: return int(pId[0][0]) except: return None
def searchHost(self): if not 'monitorid' in self.input: return limit = int(self.input.get('rows')) page = int(self.input.get('page')) if limit and page: start = limit * page - limit # do not put $limit*($page - 1) sql = 'select COUNT(*) as count from host h,host_monitor hm where h.HOST_ID = hm.HOST_ID and hm.MONITOR_ID = "%s"' % self.input[ 'monitorid'] count = zmonlib.ExecSql(sql) count = count[0][0] total_pages = int((count + limit - 1) / limit) sql = 'select h.HOST_ID,h.NAME,h.IP from host h,host_monitor hm where h.HOST_ID = hm.HOST_ID and hm.MONITOR_ID = "%s" limit %d,%d' % ( self.input['monitorid'], start, limit) result = zmonlib.ExecSql(sql) return self.changejson(result, page, total_pages, count)
def getHostNum(self, monitorId): sql = 'select COUNT(*) AS count from host h,host_monitor hm where h.HOST_ID = hm.HOST_ID and hm.MONITOR_ID = "%s"' % monitorId result = zmonlib.ExecSql(sql) try: return result[0][0] except: return 0
def editReceiver(self, id): key = self.input['key'] mobile = self.input.get('mobile') mail = self.input.get('mail') sql = 'update receiver set ZCMKEY="%s",MOBILE="%s",MAIL="%s" where RECEIVER_ID=%d' % ( key, mobile, mail, id) ret = zmonlib.ExecSql(sql) return ret
def addReceiver(self, pId): key = self.input['key'] mobile = self.input['mobile'] mail = self.input['mail'] sql = 'INSERT INTO receiver(PRODUCT_ID,ZCMKEY,MOBILE,MAIL) values(%d,"%s","%s","%s")' % ( pId, key, mobile, mail) ret = zmonlib.ExecSql(sql) return ret
def GET(self): input = web.input('product', 'monitor', _unicode=False) product = input['product'] monitor = input['monitor'] sql = 'select UICHART from monitor where product="%s" and name="%s"' % ( product, monitor) ret = zmonlib.ExecSql(sql) #try: return ret[0][0]
def loadMonitor(monitorId): sql = 'select NAME,PRODUCT,LOGPATH,GREP,GREPV,BNS,REGULAR_ID_LIST,UITREE,UICHART from monitor where MONITOR_ID=%s' % monitorId result = zmonlib.ExecSql(sql) try: monitorname = result[0][0] product = result[0][1] logpath = result[0][2] grep = result[0][3] grepv = result[0][4] serviceName = result[0][5] hostlist = '' reIdList = eval(result[0][6]) UITREE = eval(result[0][7]) UICHART = eval(result[0][8]) relist = [] treelist = [] results = [] index = 0 for regularId in reIdList: sql = 'select REGULAR_ID,NAME,EXPRESSION from regular where REGULAR_ID = "%s"' % regularId result = zmonlib.ExecSql(sql) results.extend(result) for regular in results: if regular[1] in UICHART: relist.append( [index, regular[1], regular[2], True, UICHART[regular[1]]]) else: relist.append([index, regular[1], regular[2], False, 'sum']) index += 1 for key in UITREE: treelist.append([index, key, UITREE[key]]) index += 1 if serviceName == None or serviceName == '': sql = 'select h.NAME from host h,host_monitor hm where h.HOST_ID = hm.HOST_ID and hm.MONITOR_ID = "%s"' % monitorId result = zmonlib.ExecSql(sql) for rec in result: hostlist += '%s\n' % rec[0] else: serviceName = serviceName.replace(',', '\n') hostlist = '' except Exception, e: logging.exception(e) return None
def getProcByName(userName): ret = set() ret.add('zTest') sql = "select PRODUCT from user where USERNAME = '******'" % userName result = zmonlib.ExecSql(sql) try: record = result[0][0] for product in eval(record): ret.add(product) except Exception,e: pass
def addHostToMonitor(self, hostIp, monitorId): hostId = zmonlib.getHostId(hostIp) if hostId == -1: hostId = zmonlib.addHost(hostIp) if hostId == -1: logging.error('add Host:%s to Monitor:%s error!' % (hostIp, monitorId)) return sql = "select * from host_monitor where HOST_ID=%s and MONITOR_ID=%s" % ( hostId, monitorId) ret = zmonlib.ExecSql(sql) if ret == None or len(ret) == 0: sql = "insert into host_monitor(HOST_ID,MONITOR_ID) values('%s' , '%s')" % ( hostId, monitorId) zmonlib.ExecSql(sql) logging.info('add Host:%s To Monitor:%s success!' % (hostIp, monitorId)) else: logging.info('add Host:%s To Monitor:%s duplicate!' % (hostIp, monitorId))
def delete(self): id = int(self.input.get('id')) sql = '' if self.input['from'] == 'threshold_list': sql = 'delete from threshold where THRESHOLD_ID=%d' % id elif self.input['from'] == 'whitelist_list': sql = 'delete from whitelist where WHITELIST_ID=%d' % id elif self.input['from'] == 'receiver_list': sql = 'delete from receiver where RECEIVER_ID=%d' % id record = zmonlib.ExecSql(sql) self.reloadMonflow() return record
def addThreshold(self, pId): change_rate_down = self.input.get('change_rate_down', 0) change_rate_up = self.input.get('change_rate_up', 0) key = self.input['key'] qps_floor = self.input.get('qps_floor', 0) qps_upper = self.input.get('qps_upper', 0) shield_time = self.input.get('shield_time') sql = 'INSERT INTO threshold(PRODUCT_ID,ZCMKEY,QPS_UPPER,QPS_FLOOR,CHANGE_RATE_UP,CHANGE_RATE_DOWN,SHIELD_TIME) values(%d,"%s","%s","%s","%s","%s","%s")' % ( pId, key, qps_upper, qps_floor, change_rate_up, change_rate_down, shield_time) ret = zmonlib.ExecSql(sql) logging.debug("%s,%s" % (sql, ret)) return ret
def editThreshold(self, id): change_rate_down = self.input.get('change_rate_down', 0) change_rate_up = self.input.get('change_rate_up', 0) key = self.input['key'] qps_floor = self.input.get('qps_floor', 0) qps_upper = self.input.get('qps_upper', 0) shield_time = self.input.get('shield_time') if int(change_rate_down) > 100: raise web.internalerror('"下降变化率阈值"不能超过100') return sql = 'update threshold set ZCMKEY="%s",QPS_UPPER="%s",QPS_FLOOR="%s",CHANGE_RATE_UP="%s",CHANGE_RATE_DOWN="%s",SHIELD_TIME="%s" where THRESHOLD_ID=%d' % ( key, qps_upper, qps_floor, change_rate_up, change_rate_down, shield_time, id) ret = zmonlib.ExecSql(sql) return ret
def deleteMonitor(self): monitorId = self.input['id'] sql = "select NAME,PRODUCT from monitor where MONITOR_ID = '%s'" % monitorId result = zmonlib.ExecSql(sql) try: self.monitorName = result[0][0] self.product = result[0][1] except: self.result = {'code': 400, 'txt': 'get monitor faile'} cmd = ['ZMON_DELETE', str(self.monitorName), str(self.product)] #停掉采集进程 zmonlib.controlBackend(monitorId, 'ZMON_DELETE') #删除关联的正则 regularIds = zmonlib.getRegularIds(monitorId) for regularId in regularIds: self.deleteRegular(regularId) #删除监控和机器名的关联 result = self.deleteHostMonitor(monitorId) #删除监控项 sql = "delete from monitor where MONITOR_ID = '%s'" % monitorId zmonlib.ExecSql(sql) #删除redis中的数据 zmonlib.deleteRedis(str(self.product), str(self.monitorName)) self.result = {'code': 200, 'txt': u'删除成功'}
def GET(self): logging.debug(self.input) product = self.input.get('product') monitorname = self.input.get('monitorname') if monitorname and product: sql = 'select MONITOR_ID from monitor where NAME="%s" and PRODUCT="%s"' % ( monitorname, product) ret = zmonlib.ExecSql(sql) try: self.result['MONITOR_ID'] = ret[0][0] except: self.result['MONITOR_ID'] = None else: self.result['code'] = 400 self.result['msg'] = 'Missing Parameters' return json.dumps(self.result)
def updateMonitor(self): #读用户提交的数据 monitorId = self.input.get('id', None) logPath = self.input.get('LOGPATH', None) grep = self.input.get('GREP', None) grepv = self.input.get('GREPV', None) if monitorId == None or logPath == None or grep == None or grepv == None: self.result = {'code': 400, 'txt': u'未知监控项'} return #更新monitor sql = "update monitor set LOGPATH='%s',GREP='%s',GREPV='%s' where MONITOR_ID = '%s'" % ( logPath, grep.replace('\\', '\\\\'), grepv.replace( '\\', '\\\\'), monitorId) zmonlib.ExecSql(sql) #重启后端 ret = zmonlib.controlBackend(monitorId) if ret: self.result = {'code': 200, 'txt': u'修改成功'} else: self.result = {'code': 400, 'txt': u'重启后端失败'}
def getRegularNum(self, monitorId): sql = 'select REGULAR_ID_LIST from monitor where MONITOR_ID = "%s"' % monitorId result = zmonlib.ExecSql(sql) regularIdList = eval(result[0][0]) return len(regularIdList)
def searchWhitelist(self, pId): sql = 'select WHITELIST_ID,ZCMKEY from whitelist where PRODUCT_ID=%d' % pId record = zmonlib.ExecSql(sql) return self.change2json(record)
def deleteRegular(self, regularId): sql = 'delete from regular where REGULAR_ID = "%s"' % regularId zmonlib.ExecSql(sql)
def searchReceiver(self, pId): sql = 'select RECEIVER_ID,ZCMKEY,MOBILE,MAIL from receiver where PRODUCT_ID=%d' % pId record = zmonlib.ExecSql(sql) return self.change2json(record)
def editWhitelist(self, id): key = self.input['key'] sql = 'update whitelist set ZCMKEY="%s" where WHITELIST_ID=%d' % (key, id) ret = zmonlib.ExecSql(sql) return ret
def addWhitelist(self, pId): key = self.input['key'] sql = 'INSERT INTO whitelist(PRODUCT_ID,ZCMKEY) values(%d,"%s")' % ( pId, key) ret = zmonlib.ExecSql(sql) return ret
def getDate(self): if self.product == None: sql = "select PRODUCT,NAME,UITREE,UICHART from monitor" else: sql = "select PRODUCT,NAME,UITREE,UICHART from monitor where PRODUCT = '%s'" % self.product self.result = zmonlib.ExecSql(sql)
class Update(object): def __init__(self, input): self.input = input self.result = {'code': 300, 'txt': u'未知错误'} def update(self): if self.input['from'] == 'monitor': self.updateMonitor() elif self.input['from'] == 'hostlist': self.updateHost() elif self.input['from'] == 'regularlist': self.updateRegular() return json.dumps(self.result) def updateHost(self): pass def updateMonitor(self): #读用户提交的数据 monitorId = self.input.get('id', None) logPath = self.input.get('LOGPATH', None) grep = self.input.get('GREP', None) grepv = self.input.get('GREPV', None) if monitorId == None or logPath == None or grep == None or grepv == None: self.result = {'code': 400, 'txt': u'未知监控项'} return #更新monitor sql = "update monitor set LOGPATH='%s',GREP='%s',GREPV='%s' where MONITOR_ID = '%s'" % ( logPath, grep.replace('\\', '\\\\'), grepv.replace( '\\', '\\\\'), monitorId) zmonlib.ExecSql(sql) #重启后端 ret = zmonlib.controlBackend(monitorId) if ret: self.result = {'code': 200, 'txt': u'修改成功'} else: self.result = {'code': 400, 'txt': u'重启后端失败'} def updateRegular(self): #读用户提交的数据 monitorId = self.input.get('monitorid', None) if monitorId == None: self.result = {'code': 400, 'txt': u'未知监控项'} return regularId = self.input.get('id', None) if regularId == None: self.result = {'code': 400, 'txt': u'未知正则表达式ID'} return regularEx = self.input.get('regularex', None) if regularEx == None: self.result = {'code': 400, 'txt': u'未知正则表达式'} return #正则表达式是否正确 try: r = re.compile(regularEx) except Exception, e: raise web.internalerror(u'正则表达式有误,请注意检查,错误信息:[%s]' % e) return #更新正则 sql = "update regular set EXPRESSION='%s' where REGULAR_ID = '%s'" % ( regularEx.replace('\\', '\\\\'), regularId) zmonlib.ExecSql(sql) #重启后端 ret = zmonlib.controlBackend(monitorId) if ret: self.result = {'code': 200, 'txt': u'修改成功'} else: self.result = {'code': 400, 'txt': u'重启后端失败'}
def searchThreshold(self, pId): sql = 'select THRESHOLD_ID,ZCMKEY,QPS_UPPER,QPS_FLOOR,CHANGE_RATE_UP,CHANGE_RATE_DOWN,SHIELD_TIME from threshold where PRODUCT_ID=%d' % pId record = zmonlib.ExecSql(sql) return self.change2json(record)