def post(self, request, plugin_id, *args, **kwargs): new_version = None result = {} try: build_version = request.POST.get("build_version", None) logger.debug( "=====>>>>> build_version is {}".format(build_version)) newest_build_version = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id, build_version) if newest_build_version.build_status == "building": result = general_message(403, "success", "构建中,请稍后再试") return JsonResponse(data=result, status=403) event_id = make_uuid() if newest_build_version.build_status != "unbuild": # 拷贝原有配置项 plugin_id, new_version = plugin_svc.copy_config_to_new_version( self.tenant, plugin_id, newest_build_version.build_version) pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id, new_version) pbv.event_id = event_id pbv.save() try: plugin_svc.build_plugin(self.response_region, self.tenant, event_id, plugin_id, new_version) except CallApiError as e: logger.exception(e) if e.status == 404: newest_build_version.build_status = "unbuild" newest_build_version.save() else: newest_build_version.build_status = "build_fail" newest_build_version.save() raise Exception("invoke region build error") rt_pbv = pbv.to_dict() else: try: plugin_svc.build_plugin(self.response_region, self.tenant, event_id, plugin_id, newest_build_version.build_version) except CallApiError as e: logger.exception(e) if e.status == 404: newest_build_version.build_status = "unbuild" newest_build_version.save() else: newest_build_version.build_status = "build_fail" newest_build_version.save() raise Exception("invoke region build error") newest_build_version.build_status = "building" newest_build_version.event_id = event_id newest_build_version.save() rt_pbv = newest_build_version.to_dict() result = general_message(200, "success", "操作成功", bean=rt_pbv) return JsonResponse(data=result, status=200) except Exception as e: result = error_message() # if new_version: # plugin_svc.roll_back_build(plugin_id, new_version) return JsonResponse(data=result, status=500)
def get(self, request, *args, **kwargs): """批量插件状态获取""" logger.debug(request.body) result = {} try: self.cookie_region = self.request.COOKIES.get('region') plugins = plugin_svc.get_tenant_plugins(self.cookie_region, self.tenant) status_list = [] for p in plugins: pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, p.plugin_id) if pbv.build_status in ("building", "time_out"): status = plugin_svc.get_region_plugin_build_status( self.cookie_region, self.tenant.tenant_name, pbv.plugin_id, pbv.build_version) pbv.build_status = status pbv.save() status_list.append({ "plugin_id": pbv.plugin_id, "build_version": pbv.build_version, "build_status": pbv.build_status }) result = general_message(200, "success", "查询成功", list=status_list) except Exception as e: logger.exception(e) result = error_message() return JsonResponse(result, status=result["code"])
def post(self, request, *args, **kwargs): """ 分享插件 TODO 此功能暂时不全 """ result = {} try: data = json.loads(request.body) plugin_id = data.get("plugin_id", None) plugin_version = data.get("build_version", None) share_verion = data.get("share_verion", plugin_version) region = self.request.COOKIES.get('region') if not plugin_id: return JsonResponse(general_message(400, "params error", "参数异常"), status=400) base_info = plugin_svc.get_tenant_plugin_by_plugin_id( self.tenant, plugin_id) pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id, plugin_version) image = "" config = plugin_svc.get_plugin_config(self.tenant, plugin_id, plugin_version) config_group = json.dumps(config["config_group"]) plugin_share_svc.create_share_info(self.tenant, self.user.user_id, base_info, pbv, share_verion, image, config_group) result = general_message(200, "success", "操作成功") except Exception as e: logger.exception(e) result = error_message() return JsonResponse(result, status=result["code"])
def get(self, request, plugin_id, build_version, *args, **kwargs): result = {} try: region = self.request.COOKIES.get('region') level = request.GET.get("level", "info") pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id, build_version) event_id = pbv.event_id data = plugin_svc.get_plugin_event_log(region, self.tenant, event_id, level) result = general_message(200, "success", "查询成功", list=data) except Exception as e: logger.exception(e) result = error_message() return JsonResponse(result, status=result["code"])
def post(self, request, plugin_id, build_version, *args, **kwargs): """构建插件""" result = {} try: config = json.loads(request.body) update_info = config.get("update_info", None) pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, self.plugin_id, build_version) if not pbv: return JsonResponse(general_message(404, "plugin not found", "插件不存在"), status=404) if pbv.plugin_version_status == "fixed": return JsonResponse(general_message( 403, "current version is fixed", "该版本已固定,不能构建"), status=403) if pbv.build_status == "building": return JsonResponse(general_message(403, "too offen", "构建中,请稍后再试"), status=403) if update_info: pbv.update_info = update_info pbv.save() region = self.request.COOKIES.get('region') event_id = make_uuid() base_info = plugin_svc.get_tenant_plugin_by_plugin_id( self.tenant, self.plugin_id) try: plugin_svc.build_plugin(region, self.tenant, event_id, self.plugin_id, build_version, base_info.origin) pbv.build_status = "building" logger.debug("plugin build status is {}".format( pbv.build_status)) pbv.event_id = event_id pbv.save() bean = {"event_id": event_id} result = general_message(200, "success", "操作成功", bean=bean) except Exception as e: logger.exception(e) result = general_message(500, "region invoke error", "操作失败") except Exception as e: logger.exception(e) result = error_message() return JsonResponse(result, status=result["code"])
def put(self, request, plugin_id, build_version, *args, **kwargs): """更新指定版本的插件信息""" result = {} try: data = json.loads(request.body) pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id, build_version) if not pbv: return JsonResponse(general_message(404, "plugin not found", "该版本插件不存在"), status=404) base_info = plugin_svc.get_tenant_plugin_by_plugin_id( self.tenant, plugin_id) plugin_alias = data.get("plugin_alias", base_info.plugin_alias) update_info = data.get("update_info", pbv.update_info) build_cmd = data.get("build_cmd", pbv.build_cmd) image_tag = data.get("image_tag", pbv.image_tag) code_version = data.get("code_version", pbv.code_version) min_memory = data.get("min_memory", pbv.min_memory) region = self.request.COOKIES.get('region') min_cpu = plugin_svc.calculate_cpu(region, int(min_memory)) update_params = { "min_memory": min_memory, "build_cmd": build_cmd, "update_info": update_info, "min_cpu": min_cpu, "code_version": code_version, "image_tag": image_tag } # 更新数据 new_pbv = plugin_svc.update_plugin_version_by_unique_key( self.tenant, plugin_id, build_version, **update_params) base_info.plugin_alias = plugin_alias base_info.save() bean = new_pbv.to_dict() result = general_message(200, "success", "操作成功", bean=bean) except Exception as e: logger.exception(e) result = error_message() return JsonResponse(result, status=result["code"])
def get(self, request, plugin_id, *args, **kwargs): context = self.get_context() try: context["pluginStatus"] = "active" build_version = request.GET.get("build_version", None) context["plugin_id"] = plugin_id base_info = plugin_svc.get_tenant_plugin_by_plugin_id( self.tenant, plugin_id) if not base_info: return HttpResponse("插件不存在", status=404) build_version_info = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id, build_version) context["base_info"] = base_info context["build_version_info"] = build_version_info context["web_socket_url"] = self.get_ws_url( settings.EVENT_WEBSOCKET_URL[self.response_region], "event_log") logger.debug(context["web_socket_url"]) except Exception as e: logger.exception(e) return TemplateResponse(self.request, "www/plugin/config_plugin.html", context)
def get(self, request, plugin_id, *args, **kwargs): result = {} try: # 获取插件最新的配置信息 build_version = request.GET.get("build_version", None) base_info = plugin_svc.get_tenant_plugin_by_plugin_id( self.tenant, plugin_id) if not base_info: return JsonResponse({"msg": "插件不存在"}, status=404) if not build_version: pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id) build_version = pbv.build_version data = plugin_svc.get_plugin_config(self.tenant, plugin_id, build_version) web_socket_url = self.get_ws_url( settings.EVENT_WEBSOCKET_URL[self.response_region], "event_log") data["web_socket_url"] = web_socket_url result = general_message(200, "success", "查询成功", bean=data) except Exception as e: result = error_message() return JsonResponse(data=result, status=result["code"])
def post(self, request, plugin_id, *args, **kwargs): """创建插件新版本""" result = {} try: region = self.request.COOKIES.get('region') pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id, None) base_info = plugin_svc.get_tenant_plugin_by_plugin_id( self.tenant, plugin_id) if base_info: if base_info.origin != "source_code": return JsonResponse(general_message( 403, "market plugin can not create new version", "云市插件不能创建版本"), status=403) if not pbv: return JsonResponse(general_message( 403, "current version not exist", "插件不存在任何版本,无法创建"), status=403) if pbv.build_status != "build_success": return JsonResponse(general_message( 403, "no useable plugin version", "您的插件构建未成功,无法创建新版本"), status=403) plugin_id, new_version = plugin_svc.copy_config_to_new_version( self.tenant, self.plugin_id, pbv.build_version) pbv.plugin_version_status = "fixed" pbv.save() bean = {"plugin_id": plugin_id, "new_version": new_version} result = general_message(200, "success", "操作成功", bean=bean) except Exception as e: logger.exception(e) result = error_message() return JsonResponse(result, status=result["code"])
def post(self, request, plugin_id, *args, **kwargs): result = {} build_version = None try: config = json.loads(request.body) min_memory = config["min_memory"] build_version = config["build_version"] config_group = config['config_group'] update_info = config['update_info'] build_cmd = config["build_cmd"] image_tag = config.get("image_tag", None) code_version = config.get("code_version", None) if config_group: is_success, msg = plugin_svc.check_config(*config_group) if not is_success: result["status"] = "failure" result["msg"] = msg return JsonResponse(result) plugin = plugin_svc.get_tenant_plugin_by_plugin_id( self.tenant, plugin_id) min_cpu = plugin_svc.calculate_cpu(self.response_region, int(min_memory)) pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version( self.tenant, plugin_id, build_version) if pbv.build_status == "unbuild": # 删除原有配置项目 plugin_svc.delete_config_group_by_group_id_and_version( plugin_id, build_version) # 重新创建新配置 plugin_svc.create_config_group(plugin_id, build_version, config_group) # 更新参数 update_params = { "min_memory": min_memory, "build_cmd": build_cmd, "update_info": update_info } plugin_svc.update_plugin_version_by_unique_key( self.tenant, plugin_id, build_version, **update_params) build_version = pbv.build_version else: # 重新创建新的数据 new_version = make_uuid()[:6] + datetime.datetime.now( ).strftime('%Y%m%d%H%M%S') if plugin.build_source == "dockerfile": code_version = config.get("code_version", "master") if plugin.build_source == "image": image_tag = config.get("image", "lastest") new_pbv = plugin_svc.create_plugin_build_version( self.response_region, pbv.plugin_id, pbv.tenant_id, self.user.user_id, update_info, new_version, "unbuild", min_memory, min_cpu, build_cmd, image_tag, code_version) plugin_svc.create_config_group(plugin_id, new_pbv.build_version, config_group) build_version = new_version bean = {"plugin_id": plugin_id, "build_version": build_version} result = general_message(200, "success", "查询成功", bean=bean) except Exception as e: logger.exception(e) result = error_message() return JsonResponse(result, status=result["code"])