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))
Exemple #2
0
 def mail_send(self, subject, content, from_mail_addr, to_mail_addr, mail_server):
     maillib = mailLib()
     maillib.simple_text_mail_send(subject, content, from_mail_addr, to_mail_addr, mail_server)