image_build_pyramid.py 3.8 KB
# coding=utf-8
#author:        4N
#createtime:    2021/7/19
#email:         nheweijun@sina.com

import configure
from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.StructurePrint import StructurePrint
from app.models import db
from app.modules.data.models import Task
import multiprocessing
import uuid
import datetime
import requests
from app.util.component.TaskController import TaskController
from app.util.component.TaskWriter import TaskWriter

class Api(ApiTemplate):

    api_name = "创建影像金字塔"

    def process(self):

        # 返回结果
        res = {}
        try:
            task_guid = uuid.uuid1().__str__()


            pyramid_process = multiprocessing.Process(target=self.task, args=(task_guid,self.para))
            pyramid_process.start()



            task = Task(guid=task_guid,
                        name="影像金字塔|{}".format(self.para.get("alias")),
                        create_time=datetime.datetime.now(),
                        state=0,
                        task_type=5,
                        creator=self.para.get("creator"),
                        process="影像创建金字塔中",
                        parameter=self.para.get("url"))

            db.session.add(task)
            db.session.commit()

            res["data"] = "创建影像金字塔任务已提交!"
            res["result"] = True

        except Exception as e:
            raise Exception("数据库错误!")

        return res


    def task(self,task_guid,para):
        task_writer = None
        try:

            #任务控制,等待执行
            TaskController.wait(task_guid)
            task_writer = TaskWriter(task_guid)

            task_writer.update_task({"state":2,"update_time":datetime.datetime.now(),"process" : "创建中"})
            task_writer.update_process("开始创建...")

            url = "{}/API/Image/BuildPyramid".format(para.get("url"))
            StructurePrint().print(url)

            self.para["from"] = configure.deploy_ip_host
            self.para["task_guid"] = task_guid

            response:requests.Response = requests.post(url,data=self.para)
            if response.status_code == 200:
                if not response.json().get("result"):
                    raise Exception("由于{},提交任务失败!".format(response.json().get("msg")))
                else:
                    task_writer.update_task({"task_pid": int(response.json().get("data"))})
            else:
                raise Exception("影像服务器连接失败!")
        except Exception as e:
            try:
                task_writer.update_task({"state": -1,"update_time":datetime.datetime.now(),"process": "创建失败"})
                task_writer.update_process( e.__str__())
                task_writer.update_process("任务中止!")
            except Exception as ee:
                StructurePrint().print(ee.__str__())
            raise e
        finally:
            try:
                task_writer.close()
            except Exception as e:
                StructurePrint().print(e.__str__())

    api_doc = {
        "tags": ["影像服务接口"],
        "parameters": [
            {"name": "guid",
             "in": "formData",
             "type": "string",
             "description": "guid"},
            {"name": "url",
             "in": "formData",
             "type": "string",
             "description": "url"},
            {"name": "alias",
             "in": "formData",
             "type": "string",
             "description": "影像alias"},
        ],
        "responses": {
            200: {
                "schema": {
                    "properties": {
                    }
                }
            }
        }
    }