def add_app(): user_id = get_login_user_id() title = request.forms.title description = request.forms.description min_number = request.forms.min_number max_number = request.forms.max_number memory = request.forms.memory env = request.forms.env app_host = request.forms.app_host app_port = request.forms.app_port code_address = request.forms.code_address if user_id == 0: return abort(403, '未登录!') env = get_image_name_from_env(env) if env is None: return abort(403, "env error!") dao_obj = AppModel(title=title, description=description, user_id=user_id, memory=memory, env=env, code_address=code_address, app_host=app_host, app_port=app_port, min_container_number=min_number, max_container_number=max_number, create_time=datetime.datetime.now()) dao_obj.save() return redirect("/user")
def update_app(): """ 更新应用信息 :return: """ user_id = get_login_user_id() id = request.forms.app_id title = request.forms.title description = request.forms.description min_number = request.forms.min_number max_number = request.forms.max_number memory = request.forms.memory if user_id == 0: return abort(403, '未登录!') dao = AppModel.update(title=title, description=description, min_container_number=min_number, max_container_number=max_number, memory=memory).where(AppModel.id == id, AppModel.user_id == user_id) dao.execute() return redirect("/user")
def add_one_container(task): """ 添加一个容器 :return: boolean, 容器信息 """ try: app_obj = AppModel.select().where(AppModel.id == task.app_id).get() except: return False, None api_url, api_host = get_a_api_url() if api_url is None: return False, {} d = api_url api_url += "build" data = { "code_address": urllib.request.quote(app_obj.code_address), "memory": app_obj.memory, "image_name": app_obj.env } r = request_api(api_url, data) if r.status_code != 200: return False, {} obj = json.loads(r.text) if obj['code'] != 0: return False, {} return True, {"r": obj, "host": api_host, "api_url": d}
def init(): """ 入口函数 :return: """ apps = AppModel.select() for app in apps: handle_app(app)
def get_apps(): """ 获取用户所有应用 :return: dict """ user_id = get_login_user_id() apps = AppModel.select().where(AppModel.user_id == user_id) data = map(AppModel.get_dict_from_model_obj, apps) return json.dumps(list(data))
def get_apps(): """ 获取用户所有应用 :return: dict """ user_id = get_login_user_id() apps = AppModel.select().where(AppModel.user_id==user_id) data = map(AppModel.get_dict_from_model_obj, apps) return json.dumps(list(data))
def deployment_app(): """ 重新部署应用 :return: """ user_id = get_login_user_id() app_id = request.forms.app_id # 防止越权操作 AppModel.select().where(AppModel.user_id == user_id).get() if TaskQueueModel.select().where(TaskQueueModel.app_id == app_id, TaskQueueModel.command_code == 3).count(): return {"code": -1} obj = TaskQueueModel(app_id=app_id, user_id=user_id, command_code=3, command_content='{}', create_time=datetime.datetime.now()) obj.save() return {"code": 0}
def delete_app(app_id): """ 删除应用 :param app_id 应用id :return: """ user_id = get_login_user_id() dao = AppModel.delete().where(AppModel.user_id == user_id, AppModel.id == app_id) dao.execute() return redirect("/user")
def build_nginx_config(app_id): """ 生成应用nginx配置文件 :param app_id: :return: """ nginx_str = """ upstream site%d { %s } server{ listen %s:%d; index index.html index.htm; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://site%d; } } """ try: app = AppModel.select().where(AppModel.id == app_id).get() except: return False app_lists = "" containers = AppContainModel.select().where( AppContainModel.app_id == app_id) for obj in containers: app_lists = app_lists + ("server %s:%d;\n" % (obj.host, obj.port)) config_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) config_path = config_path + "/data/nginx_config/" + str(app_id) + ".conf" if os.path.exists(config_path): os.remove(config_path) if app_lists == "": return False config_str = nginx_str % (app_id, app_lists, app.app_host, app.app_port, app_id) fp = open(config_path, "w") fp.write(config_str) fp.close() subprocess.getstatusoutput("nginx -s reload")
def build_nginx_config(app_id): """ 生成应用nginx配置文件 :param app_id: :return: """ nginx_str = """ upstream site%d { %s } server{ listen %s:%d; index index.html index.htm; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://site%d; } } """ try: app = AppModel.select().where(AppModel.id == app_id).get() except: return False app_lists = "" containers = AppContainModel.select().where(AppContainModel.app_id == app_id) for obj in containers: app_lists = app_lists + ("server %s:%d;\n" % (obj.host, obj.port)) config_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) config_path = config_path + "/data/nginx_config/" + str(app_id) + ".conf" if os.path.exists(config_path): os.remove(config_path) if app_lists == "": return False config_str = nginx_str % (app_id, app_lists, app.app_host, app.app_port, app_id) fp = open(config_path, "w") fp.write(config_str) fp.close() subprocess.getstatusoutput("nginx -s reload")
def __init__(self): super(Hitagi, self).__init__() self.model = AppModel() self.main_controller = MainController(self.model) self.main_view = MainView(self.model, self.main_controller) self.main_view.show()