diff --git a/perxis/extensions/extension_service.py b/perxis/extensions/extension_service.py
index d6a0c71585ba03f103c5694c5001996a0a08a10b..198c7f454f7d126864baf6751217b2e5749934c3 100644
--- a/perxis/extensions/extension_service.py
+++ b/perxis/extensions/extension_service.py
@@ -41,6 +41,58 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
         for client in self.clients or []:
             self.extension_setup.add_client(client)
 
+    def write_result_log(self, operation, request, response):
+        log_func = self.get_log_func_by_state(response.results[0].state)
+
+        log_func(
+            "Результат %s расширения %s для окружения %s пространства %s: \r\n"
+            "State: %s\r\n"
+            "Msg: %s\r\n"
+            "Error: %s" % (
+                operation,
+                self.extension_id,
+                request.env_id,
+                request.space_id,
+                response.results[0].state,
+                response.results[0].msg,
+                response.results[0].error
+            )
+        )
+
+    def get_log_func_by_state(self, state):
+        if state == extension_pb2.ExtensionRequestResult.State.OK:
+            return self.logger.info
+        else:
+            return self.logger.error
+
+    def ext_request_results_from_exception(self, e: Exception) -> extension_pb2.ExtensionRequestResult:
+        return [
+            extension_pb2.ExtensionRequestResult(
+                extension=self.extension_id,
+                state=extension_pb2.ExtensionRequestResult.State.ERROR,
+                error=str(e),
+                msg=None
+            )
+        ]
+
+    def _Install(self, request: extension_pb2.InstallRequest, context):
+        errors_list = self.extension_setup.install(
+            request.space_id, request.env_id, request.force
+        )
+
+        response_state = extension_pb2.ExtensionRequestResult.State.OK \
+            if not errors_list \
+            else extension_pb2.ExtensionRequestResult.State.ERROR
+
+        return extension_pb2.InstallResponse(
+            results=[extension_pb2.ExtensionRequestResult(
+                extension=self.extension_id,
+                state=response_state,
+                error="; ".join(errors_list) if errors_list else None,
+                msg="Ok" if not errors_list else None
+            )]
+        )
+
     def Install(self, request: extension_pb2.InstallRequest, context):
         self.logger.info(
             "Установка расширения %s для окружения %s пространства %s. %s force" % (
@@ -52,59 +104,37 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
         )
 
         try:
-            errors_list = self.extension_setup.install(
-                request.space_id, request.env_id, request.force
-            )
-
-            if errors_list:
-                context.set_code(grpc.StatusCode.UNKNOWN)
-                context.set_details("; ".join(errors_list))
-
-            response_state = extension_pb2.ExtensionRequestResult.State.OK \
-                if not errors_list \
-                else extension_pb2.ExtensionRequestResult.State.ERROR
-
+            response = self._Install(request, context)
+        except Exception as e:
             response = extension_pb2.InstallResponse(
-                results=[extension_pb2.ExtensionRequestResult(
-                    extension=self.extension_id,
-                    state=response_state,
-                    error="; ".join(errors_list) if errors_list else None,
-                    msg="Ok" if not errors_list else None
-                )]
+                results=self.ext_request_results_from_exception(e)
             )
-        except Exception as e:
+
+        if response.results[0].state != extension_pb2.ExtensionRequestResult.State.OK:
             context.set_code(grpc.StatusCode.UNKNOWN)
-            context.set_details(str(e))
+            context.set_details(response.results[0].error)
 
-            response = extension_pb2.InstallResponse(
-                results=[extension_pb2.ExtensionRequestResult(
-                    extension=self.extension_id,
-                    state=extension_pb2.ExtensionRequestResult.State.ERROR,
-                    error=str(e),
-                    msg=None
-                )]
-            )
+        self.write_result_log("установки", request, response)
 
-        if response.results[0].state == extension_pb2.ExtensionRequestResult.State.OK:
-            log_func = self.logger.info
-        else:
-            log_func = self.logger.error
+        return response
 
-        log_func(
-            "Результат установки расширения %s для окружения %s пространства %s: \r\n"
-            "State: %s\r\n"
-            "Msg: %s\r\n"
-            "Error: %s" % (
-                self.extension_id,
-                request.env_id,
-                request.space_id,
-                response.results[0].state,
-                response.results[0].msg,
-                response.results[0].error
-            )
+    def _Update(self, request: extension_pb2.UpdateRequest, context):
+        errors_list = self.extension_setup.update(
+            request.space_id, request.env_id, request.force
         )
 
-        return response
+        response_state = extension_pb2.ExtensionRequestResult.State.OK \
+            if not errors_list \
+            else extension_pb2.ExtensionRequestResult.State.ERROR
+
+        return extension_pb2.UpdateResponse(
+            results=[extension_pb2.ExtensionRequestResult(
+                extension=self.extension_id,
+                state=response_state,
+                error="; ".join(errors_list) if errors_list else None,
+                msg="Ok" if not errors_list else None
+            )]
+        )
 
     def Update(self, request: extension_pb2.UpdateRequest, context):
         self.logger.info(
@@ -117,60 +147,36 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
         )
 
         try:
-            errors_list = self.extension_setup.update(
-                request.space_id, request.env_id, request.force
+            response = self._Update(request, context)
+        except Exception as e:
+            response = extension_pb2.UpdateResponse(
+                results=self.ext_request_results_from_exception(e)
             )
 
-            if errors_list:
-                context.set_code(grpc.StatusCode.UNKNOWN)
-                context.set_details("; ".join(errors_list))
+        if response.results[0].state != extension_pb2.ExtensionRequestResult.State.OK:
+            context.set_code(grpc.StatusCode.UNKNOWN)
+            context.set_details(response.results[0].error)
 
-            response_state = extension_pb2.ExtensionRequestResult.State.OK \
-                if not errors_list \
-                else extension_pb2.ExtensionRequestResult.State.ERROR
+        self.write_result_log("обновления", request, response)
 
-            response = extension_pb2.UpdateResponse(
-                results=[extension_pb2.ExtensionRequestResult(
-                    extension=self.extension_id,
-                    state=response_state,
-                    error="; ".join(errors_list) if errors_list else None,
-                    msg="Ok" if not errors_list else None
-                )]
-            )
-        except Exception as e:
-            context.set_code(grpc.StatusCode.UNKNOWN)
-            context.set_details(str(e))
+        return response
 
-            response = extension_pb2.UpdateResponse(
-                results=[extension_pb2.ExtensionRequestResult(
-                    extension=self.extension_id,
-                    state=extension_pb2.ExtensionRequestResult.State.ERROR,
-                    error=str(e),
-                    msg=None
-                )]
-            )
+    def _Uninstall(self, request: extension_pb2.UninstallRequest, context):
+        errors_list: list[str] = self.extension_setup.uninstall(request.space_id, request.env_id, request.remove)
 
-        if response.results[0].state == extension_pb2.ExtensionRequestResult.State.OK:
-            log_func = self.logger.info
-        else:
-            log_func = self.logger.error
+        response_state = extension_pb2.ExtensionRequestResult.State.OK \
+            if not errors_list \
+            else extension_pb2.ExtensionRequestResult.State.ERROR
 
-        log_func(
-            "Результат обновления расширения %s для окружения %s пространства %s: \r\n"
-            "State: %s\r\n"
-            "Msg: %s\r\n"
-            "Error: %s" % (
-                self.extension_id,
-                request.env_id,
-                request.space_id,
-                response.results[0].state,
-                response.results[0].msg,
-                response.results[0].error
-            )
+        return extension_pb2.UninstallResponse(
+            results=[extension_pb2.ExtensionRequestResult(
+                extension=self.extension_id,
+                state=response_state,
+                error="; ".join(errors_list) if errors_list else None,
+                msg="Ok" if not errors_list else None
+            )]
         )
 
-        return response
-
     def Uninstall(self, request: extension_pb2.UninstallRequest, context):
         self.logger.info(
             "Удаление расширения %s для окружения %s пространства %s. %s remove" % (
@@ -182,54 +188,36 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
         )
 
         try:
-            errors_list: list[str] = self.extension_setup.uninstall(request.space_id, request.env_id, request.remove)
-
-            response_state = extension_pb2.ExtensionRequestResult.State.OK \
-                if not errors_list \
-                else extension_pb2.ExtensionRequestResult.State.ERROR
-
-            response = extension_pb2.UninstallResponse(
-                results=[extension_pb2.ExtensionRequestResult(
-                    extension=self.extension_id,
-                    state=response_state,
-                    error="; ".join(errors_list) if errors_list else None,
-                    msg="Ok" if not errors_list else None
-                )]
-            )
+            response = self._Uninstall(request, context)
         except Exception as e:
-            context.set_code(grpc.StatusCode.UNKNOWN)
-            context.set_details(str(e))
-
             response = extension_pb2.UninstallResponse(
-                results=[extension_pb2.ExtensionRequestResult(
-                    extension=self.extension_id,
-                    state=extension_pb2.ExtensionRequestResult.State.ERROR,
-                    error=str(e),
-                    msg=None
-                )]
+                results=self.ext_request_results_from_exception(e)
             )
 
-        if response.results[0].state == extension_pb2.ExtensionRequestResult.State.OK:
-            log_func = self.logger.info
-        else:
-            log_func = self.logger.error
+        if response.results[0].state != extension_pb2.ExtensionRequestResult.State.OK:
+            context.set_code(grpc.StatusCode.UNKNOWN)
+            context.set_details(response.results[0].error)
 
-        log_func(
-            "Результат удаления расширения %s для окружения %s пространства %s: \r\n"
-            "State: %s\r\n"
-            "Msg: %s\r\n"
-            "Error: %s" % (
-                self.extension_id,
-                request.env_id,
-                request.space_id,
-                response.results[0].state,
-                response.results[0].msg,
-                response.results[0].error
-            )
-        )
+        self.write_result_log("удаления", request, response)
 
         return response
 
+    def _Check(self, request: extension_pb2.CheckRequest, context):
+        errors_list = self.extension_setup.check(request.space_id, request.env_id)
+
+        response_state = extension_pb2.ExtensionRequestResult.State.OK \
+            if not errors_list \
+            else extension_pb2.ExtensionRequestResult.State.ERROR
+
+        return extension_pb2.CheckResponse(
+            results=[extension_pb2.ExtensionRequestResult(
+                extension=self.extension_id,
+                state=response_state,
+                error="; ".join(errors_list) if errors_list else None,
+                msg="Ok" if not errors_list else None
+            )]
+        )
+
     def Check(self, request: extension_pb2.CheckRequest, context):
         self.logger.info(
             "Проверка расширения %s для окружения %s пространства %s" % (
@@ -240,55 +228,17 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
         )
 
         try:
-            errors_list = self.extension_setup.check(request.space_id, request.env_id)
-
-            if errors_list:
-                context.set_code(grpc.StatusCode.UNKNOWN)
-                context.set_details("; ".join(errors_list))
-
-            response_state = extension_pb2.ExtensionRequestResult.State.OK \
-                if not errors_list \
-                else extension_pb2.ExtensionRequestResult.State.ERROR
-
-            response = extension_pb2.CheckResponse(
-                results=[extension_pb2.ExtensionRequestResult(
-                    extension=self.extension_id,
-                    state=response_state,
-                    error="; ".join(errors_list) if errors_list else None,
-                    msg="Ok" if not errors_list else None
-                )]
-            )
+            response = self._Check(request, context)
         except Exception as e:
-            context.set_code(grpc.StatusCode.UNKNOWN)
-            context.set_details(str(e))
-
             response = extension_pb2.CheckResponse(
-                results=[extension_pb2.ExtensionRequestResult(
-                    extension=self.extension_id,
-                    state=extension_pb2.ExtensionRequestResult.State.ERROR,
-                    error=str(e),
-                    msg=None
-                )]
+                results=self.ext_request_results_from_exception(e)
             )
 
-        if response.results[0].state == extension_pb2.ExtensionRequestResult.State.OK:
-            log_func = self.logger.info
-        else:
-            log_func = self.logger.error
+        if response.results[0].state != extension_pb2.ExtensionRequestResult.State.OK:
+            context.set_code(grpc.StatusCode.UNKNOWN)
+            context.set_details(response.results[0].error)
 
-        log_func(
-            "Результат проверки расширения %s для окружения %s пространства %s: \r\n"
-            "State: %s\r\n"
-            "Msg: %s\r\n"
-            "Error: %s" % (
-                self.extension_id,
-                request.env_id,
-                request.space_id,
-                response.results[0].state,
-                response.results[0].msg,
-                response.results[0].error
-            )
-        )
+        self.write_result_log("проверки", request, response)
 
         return response