示例#1
0
 def put(self, period_id):
     user = g.user_info["username"]
     args = parser.parse_args()
     args["id"] = period_id
     period_task = args
     db = DB()
     # 判断是否存在
     select_status, select_result = db.select_by_id("period_task",
                                                    period_id)
     if select_status is not True:
         db.close_mysql()
         logger.error("Modify period_task error: %s" % select_result)
         return {"status": False, "message": select_result}, 500
     if not select_result:
         db.close_mysql()
         return {
             "status": False,
             "message": "%s does not exist" % period_id
         }, 404
     # 判断名字否已经存在
     status, result = db.select(
         "period_task",
         "where data -> '$.name'='%s' and data -> '$.product_id'='%s'" %
         (args["name"], args["product_id"]))
     if status is True and result:
         if period_id != result[0].get("id"):
             db.close_mysql()
             return {
                 "status": False,
                 "message": "The period_task name already exists"
             }, 200
     period_task["result"] = select_result["result"]
     period_task["timestamp"] = select_result["timestamp"]
     period_task["status"] = select_result["status"]
     period_task["action"] = select_result["action"]
     period_task["executed_minion"] = select_result["executed_minion"]
     period_task["count"] = select_result["count"]
     period_task["step"] = select_result["step"]
     period_task["audit"] = select_result["audit"]
     if args["once"]["date"]:
         args["once"]["date"] = utc_to_local(args["once"]["date"])
     status, result = db.update_by_id(
         "period_task", json.dumps(period_task, ensure_ascii=False),
         period_id)
     db.close_mysql()
     # 修改调度任务
     if args["scheduler"] == "once" and args["once"]["type"] == "timing":
         run_date = args["once"]["date"].split(
             " ")[0] + " " + args["once"]["time"]
         scheduler_timing_modify(args["id"], args["product_id"], user,
                                 run_date)
     if args["scheduler"] == "period":
         scheduler_interval_modify(args["id"], args["product_id"], user,
                                   args["period"]["interval"],
                                   args["period"]["type"])
     if status is not True:
         logger.error("Modify period_task error: %s" % result)
         return {"status": False, "message": result}, 500
     audit_log(user, period_id, "", "period_task", "edit")
     return {"status": True, "message": ""}, 200
示例#2
0
def sse_worker(product):
    # job_pattern = re.compile('salt/job/\d+/ret/')
    mine_pattern = re.compile(r'"fun": "mine.update"')
    saltutil_pattern = re.compile(r'"fun": "saltutil.find_job"')
    running_pattern = re.compile(r'"fun": "saltutil.running"')
    lookup_pattern = re.compile(r'"fun": "runner.jobs.lookup_jid"')
    event_pattern = re.compile(r'"tag": "salt/event/new_client"')
    salt_api = salt_api_for_product(product)
    event_response = salt_api.events()
    client = sseclient.SSEClient(event_response)
    for event in client.events():
        if mine_pattern.search(event.data):
            pass
        elif saltutil_pattern.search(event.data):
            pass
        elif running_pattern.search(event.data):
            pass
        elif lookup_pattern.search(event.data):
            pass
        elif event_pattern.search(event.data):
            pass
        else:
            print(event.data)
            event_dict = ast.literal_eval(event.data.replace('true', 'True').replace('false', 'False').
                                          replace('null', '""'))
            event_dict['data']['_stamp'] = utc_to_local(event_dict['data']['_stamp'] + "Z")
            event_dict['data']['product_id'] = product
            db = DB()
            db.insert("event", json.dumps(event_dict, ensure_ascii=False))
            db.close_mysql()
示例#3
0
 def post(self):
     args = parser.parse_args()
     args["id"] = uuid_prefix("t")
     user = g.user_info["username"]
     period_task = args
     period_task["timestamp"] = int(time.time())
     period_task["result"] = []
     period_task["audit"] = []
     period_task["status"] = {"id": 1, "name": period_status.get(1)}
     period_task["count"] = 0
     period_task["step"] = 0
     audit = {
         "timestamp": int(time.time()),
         "user": user,
         "option": period_audit.get(0)
     }
     insert_period_audit(args["id"], audit)
     if args["once"]["date"]:
         args["once"]["date"] = utc_to_local(args["once"]["date"])
     db = DB()
     status, result = db.select(
         "period_task",
         "where data -> '$.name'='%s' and data -> '$.product_id'='%s'" %
         (args["name"], args["product_id"]))
     if status is True:
         if len(result) == 0:
             audit_log(user, args["id"], "", "period_task", "add")
             # 一次立即执行的直接扔给celery
             if args["scheduler"] == "once" and args["once"][
                     "type"] == "now":
                 period_task["action"] = "concurrent_play"
                 job.delay(args["id"], args["product_id"], user)
             # 一次定时执行的扔给APScheduler,进行定时处理
             if args["scheduler"] == "once" and args["once"][
                     "type"] == "timing":
                 period_task["action"] = "scheduler_resume"
                 run_date = args["once"]["date"].split(
                     " ")[0] + " " + args["once"]["time"]
                 scheduler_result = scheduler_timing_add(
                     args["id"], args["product_id"], user, run_date)
                 if scheduler_result.get("status") is not True:
                     return {
                         "status": False,
                         "message": scheduler_result.get("message")
                     }, 500
             # 周期性的扔给APScheduler,进行定时处理
             if args["scheduler"] == "period":
                 period_task["action"] = "scheduler_resume"
                 scheduler_result = scheduler_interval_add(
                     args["id"], args["product_id"], user,
                     args["period"]["interval"], args["period"]["type"])
                 if scheduler_result.get("status") is not True:
                     return {
                         "status": False,
                         "message": scheduler_result.get("message")
                     }, 500
             insert_status, insert_result = db.insert(
                 "period_task", json.dumps(period_task, ensure_ascii=False))
             db.close_mysql()
             if insert_status is not True:
                 logger.error("Add period_task error: %s" % insert_result)
                 return {"status": False, "message": insert_result}, 500
             return {"status": True, "message": ""}, 201
         else:
             db.close_mysql()
             return {
                 "status": False,
                 "message": "The period_task name already exists"
             }, 200
     else:
         db.close_mysql()
         logger.error("Select period_task name error: %s" % result)
         return {"status": False, "message": result}, 500