def GetConvenienceMethods(self, request, context): # self.authenticate(context, required=True) try: builder = DynamicBuilder() manifests = builder.get_manifests() response = dynamicload_pb2.ListConvenienceMethodsReply() for manifest in manifests: for cm in manifest["convenience_methods"]: item = response.convenience_methods.add() item.filename = cm["filename"] item.contents = open(cm["path"]).read() REQUEST_COUNT.labels("xos-core", "DynamicLoad", "GetConvenienceMethods", grpc.StatusCode.OK).inc() return response except Exception as e: import traceback traceback.print_exc() REQUEST_COUNT.labels( "xos-core", "DynamicLoad", "GetConvenienceMethods", grpc.StatusCode.INTERNAL, ).inc() raise e
def UnloadModels(self, request, context): try: builder = DynamicBuilder() result = builder.handle_unloadmodels_request(request) if (result == builder.SOMETHING_CHANGED): self.server.delayed_shutdown(5) response = dynamicload_pb2.LoadModelsReply() response.status = response.SUCCESS return response except Exception, e: import traceback; traceback.print_exc() raise e
def GetLoadStatus(self, request, context): try: builder = DynamicBuilder() manifests = builder.get_manifests() response = dynamicload_pb2.LoadStatusReply() response.model_status = self.server.model_status response.model_output = self.server.model_output for manifest in manifests: item = response.services.add() item.name = manifest["name"] item.version = manifest["version"] item.state = manifest.get("state", "unspecified") return response except Exception, e: import traceback; traceback.print_exc() raise e
def GetLoadStatus(self, request, context): try: builder = DynamicBuilder() manifests = builder.get_manifests() response = dynamicload_pb2.LoadStatusReply() response.model_status = self.server.model_status response.model_output = self.server.model_output for manifest in manifests: item = response.services.add() item.name = manifest["name"] item.version = manifest["version"] item.state = manifest.get("state", "unspecified") if item.state == "load": django_app = self.django_apps_by_name.get("services." + item.name) if django_app: item.state = "present" # TODO: Might be useful to return a list of models as well # the core is always onboarded, so doesn't have an explicit manifest item = response.services.add() item.name = "core" item.version = self.get_core_version() if "core" in self.django_apps_by_name: item.state = "present" else: item.state = "load" REQUEST_COUNT.labels("xos-core", "DynamicLoad", "GetLoadStatus", grpc.StatusCode.OK).inc() return response except Exception as e: import traceback traceback.print_exc() REQUEST_COUNT.labels("xos-core", "DynamicLoad", "GetLoadStatus", grpc.StatusCode.INTERNAL).inc() raise e
def UnloadModels(self, request, context): try: builder = DynamicBuilder() result = builder.handle_unloadmodels_request( request, self.django_app_models.get("services." + request.name, {})) if result == builder.SUCCESS: self.server.delayed_shutdown(5) self.map_error_code(result, context) response = dynamicload_pb2.LoadModelsReply() response.status = result REQUEST_COUNT.labels("xos-core", "DynamicLoad", "UnloadModels", grpc.StatusCode.OK).inc() return response except Exception as e: import traceback traceback.print_exc() REQUEST_COUNT.labels("xos-core", "DynamicLoad", "UnloadModels", grpc.StatusCode.INTERNAL).inc() raise e
def LoadModels(self, request, context): try: core_version = self.get_core_version() requested_core_version = request.core_version log.info("Loading service models", service=request.name, service_version=request.version, requested_core_version=requested_core_version) if not requested_core_version: requested_core_version = ">=2.2.1" if "~" in requested_core_version: [min_requested, max_requested] = requested_core_version.split("~") match_min_version = semver.match(core_version, min_requested.strip()) match_max_version = semver.match(core_version, max_requested.strip()) if not match_min_version or not match_max_version: log.error( "Not loading service because of mismatching versions", service=request.name, core_version=core_version, requested_min_core_version=min_requested, requested_max_core_version=max_requested) context.set_code(grpc.StatusCode.INVALID_ARGUMENT) msg = "Service %s is requesting core version between %s and %s but actual version is %s" % ( request.name, min_requested, max_requested, core_version) context.set_details(msg) raise Exception(msg) else: match_version = semver.match(core_version, requested_core_version.strip()) if not match_version: log.error( "Not loading service because of mismatching versions", service=request.name, core_version=core_version, requested_core_version=requested_core_version) context.set_code(grpc.StatusCode.INVALID_ARGUMENT) msg = "Service %s is requesting core version %s but actual version is %s" % ( request.name, requested_core_version, core_version) context.set_details(msg) raise Exception(msg) builder = DynamicBuilder() result = builder.handle_loadmodels_request(request) if result == builder.SUCCESS: self.server.delayed_shutdown(5) response = dynamicload_pb2.LoadModelsReply() response.status = result REQUEST_COUNT.labels("xos-core", "DynamicLoad", "LoadModels", grpc.StatusCode.OK).inc() return response except Exception as e: import traceback traceback.print_exc() REQUEST_COUNT.labels("xos-core", "DynamicLoad", "LoadModels", grpc.StatusCode.INTERNAL).inc() raise e