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)
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)
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)
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))
def msgSend(self, phone_list, content , mode="qapi"): msgSend(phone_list, content , mode="qapi")