示例#1
0
    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
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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