Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)))
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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]
Ejemplo n.º 12
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
Ejemplo n.º 13
0
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
Ejemplo n.º 14
0
 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))
Ejemplo n.º 15
0
 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
Ejemplo n.º 16
0
 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
Ejemplo n.º 17
0
 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
Ejemplo n.º 18
0
 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'删除成功'}
Ejemplo n.º 19
0
 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)
Ejemplo n.º 20
0
 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'重启后端失败'}
Ejemplo n.º 21
0
 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)
Ejemplo n.º 22
0
 def searchWhitelist(self, pId):
     sql = 'select WHITELIST_ID,ZCMKEY from whitelist where PRODUCT_ID=%d' % pId
     record = zmonlib.ExecSql(sql)
     return self.change2json(record)
Ejemplo n.º 23
0
 def deleteRegular(self, regularId):
     sql = 'delete from regular where REGULAR_ID = "%s"' % regularId
     zmonlib.ExecSql(sql)
Ejemplo n.º 24
0
 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)
Ejemplo n.º 25
0
 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
Ejemplo n.º 26
0
 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
Ejemplo n.º 27
0
 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)
Ejemplo n.º 28
0
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'重启后端失败'}
Ejemplo n.º 29
0
 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)