Example #1
0
def gearwork(gearman_worker, gearman_job):
    params = {"RET":"gearwork INTERNAL ERROR"}
    taskrunner = None
    try:
        params = json.loads(gearman_job.data)
        logging.info("recv data : " + gearman_job.data)
        last_id = params['last_id']
        monitorObj_id = params['monitorObj_id']
        monitorMetrics_id = params['monitorMetrics_id']
        monitorMetrics_name = params['monitorMetrics_name']
        taskrunner = params['taskrunner']
        cmdstr = "cd ../../scripts && " + taskrunner + " " + str(last_id) + " " + str(monitorObj_id) + " " + str(monitorMetrics_id) + " " + str(monitorMetrics_name)
        #print cmdstr
        status,output = cmd_execute(cmdstr)
        logging.info(cmdstr + " executed success")
        logging.info("status: " + str(status))
        logging.info("output: " + str(output))
        if(int(status) != 0):
            raise Exception(str(output))
    except Exception as e:
        logging.error(taskrunner + str(e))
        conf = parse_conf("./conf/gearwork.conf")
        phone_list = conf['phone_list']
        msgSend(phone_list, u'【告警】gearwork dispatch exception : ' + taskrunner + str(e), mode="qapi")
    finally:
        logging.info("ret data : " + json.dumps(params))
        return json.dumps(params)
Example #2
0
def coremonitor(dst_dir, rsv_list, monitor_time):
    monitor_time = int(monitor_time) * 60
    if (monitor_time == 0):
        while 1:
            file_reg = r"^core.*$"
            print file_reg
            file_list = os.listdir(dst_dir)
            print file_list
            core_file_list = []
            for item in file_list:
                if (re.match(file_reg, item)):
                    core_file_list.append(item)
            print core_file_list
            if (len(core_file_list) != 0):
                print("casting core.")
                print(core_file_list)
                msgSend(rsv_list,
                        'casting core file: ' + ','.join(core_file_list))
                return
            time.sleep(1)
    else:
        for i in xrange(monitor_time):
            file_reg = r"^core.*$"
            print file_reg
            file_list = os.listdir(dst_dir)
            print file_list
            core_file_list = []
            for item in file_list:
                if (re.match(file_reg, item)):
                    core_file_list.append(item)
            print core_file_list
            if (len(core_file_list) != 0):
                print("casting core.")
                print(core_file_list)
                msgSend(rsv_list,
                        'casting core file: ' + ','.join(core_file_list))
                return
            time.sleep(1)
Example #3
0
def coremonitor(dst_dir,rsv_list,monitor_time):
    monitor_time=int(monitor_time)*60
    if(monitor_time == 0):
        while 1:
            file_reg=r"^core.*$"
            print file_reg
            file_list=os.listdir(dst_dir)
            print file_list
            core_file_list=[]
            for item in file_list:
                if(re.match(file_reg,item)):
                    core_file_list.append(item)
            print core_file_list
            if(len(core_file_list) != 0):
                print("casting core.")
                print(core_file_list)
                msgSend(rsv_list,'casting core file: '+','.join(core_file_list))
                return
            time.sleep(1)
    else:
        for i in xrange(monitor_time):
            file_reg=r"^core.*$"
            print file_reg
            file_list=os.listdir(dst_dir)
            print file_list
            core_file_list=[]
            for item in file_list:
                if(re.match(file_reg,item)):
                    core_file_list.append(item)
            print core_file_list
            if(len(core_file_list) != 0):
                print("casting core.")
                print(core_file_list)
                msgSend(rsv_list,'casting core file: '+','.join(core_file_list))
                return
            time.sleep(1)
Example #4
0
    def tasksubmit(self):
        try:
            for item in self.task_conf:
                #获取监控对象、监控指标
                monitorObj_id = item['monitorObj_id']
                monitorMetrics_id = item['monitorMetrics_id']
                monitorMetrics_name = item['monitorMetrics_name']
                taskrunner = item['taskrunner']

                #status为1表示有效监控,否则视为下架
                if(item['status'] == 1):
                    ret_monitorMetrics_id,ret_monitorObj_id,ret_monitorMetrics_name = self.get_monitorMetrics(monitorMetrics_id)
                    try:
                        assert(monitorObj_id == ret_monitorObj_id)
                        assert(monitorMetrics_id == ret_monitorMetrics_id)
                        assert(monitorMetrics_name == ret_monitorMetrics_name)
                        info_str = str(monitorObj_id) + "," + str(monitorMetrics_id) + "," + monitorMetrics_name + "verify success"
                        logging.info(info_str)
                    except Exception as e:
                        #校验异常,打日志,发短信、邮件通知系统管理员
                        error_str = u"taskRunner.conf 任务配置有误 :" + str(monitorObj_id) + "," + str(monitorMetrics_id) + ","
                        + monitorMetrics_name + u" 合法性校验失败,请检查此任务配置"
                        logging.error(error_str)
                        logging.error(str(e))
                        #短信通知
                        msgSend(self.phone_list, self.subject + " : " + error_str, mode="qapi")
                        #邮件通知
                        maillib = mailLib()
                        maillib.simple_text_mail_send(self.subject, error_str, self.from_mail_addr, self.to_mail_addr, self.mail_server)
                        continue

                    #校验通过,根据start_type提交合适的任务
                    #---------------------------------------------------------------------------------------------
                    #任务类型
                    # 0:定时启动,此时需要配置定时启动时间、间隔时间;
                    # 1:间隔启动,此时需要配置间隔周期;
                    # 2: 立即启动,一次性任务
                    #---------------------------------------------------------------------------------------------
                    start_type = item['start_type']
                    #类型:定时提交
                    if(start_type == 0):
                        start_time = item['start_time']
                        period = item['period']
                        sched = Scheduler()
                        sched.daemonic = False
                        dd = datetime.datetime.now()
                        dd_delta = dd + datetime.timedelta(days=0)
                        cutime=dd_delta.strftime("%Y-%m-%d")
                        ddnew_str = cutime + " " + start_time
                        ddnew = datetime.datetime.fromtimestamp(time.mktime(time.strptime(ddnew_str, "%Y-%m-%d %H:%M:%S")))
                        sched.add_interval_job(self.add_job, minutes=period, start_date=ddnew, args=[monitorObj_id, monitorMetrics_id, monitorMetrics_name, taskrunner])
                        sched.start()
                        logging.info("add_interval_job success")

                    #类型:间隔提交
                    elif(start_type == 1):
                        period = item['period']
                        sched = Scheduler()
                        sched.daemonic = False
                        sched.add_cron_job(self.add_job, minute='*/' + str(period), args=[monitorObj_id, monitorMetrics_id, monitorMetrics_name, taskrunner])
                        sched.start()
                        logging.info("add_cron_job success")
                    #类型:立即
                    elif(start_type == 2):
                        self.add_job(monitorObj_id, monitorMetrics_id, monitorMetrics_name, taskrunner)
                        logging.info("add instant job success")
        except Exception as e:
            logging.error(str(e))
Example #5
0
 def msgSend(self, phone_list, content , mode="qapi"):
     msgSend(phone_list, content , mode="qapi")