Skip to content
Snippets Groups Projects
Commit 6de3220b authored by Eterevskiy Georgiy's avatar Eterevskiy Georgiy
Browse files

Merge branch 'feature/AUTO-1332-add-logging-to-servicer' into 'master'

Добавлено логгирование запросов

See merge request perxis/perxis-python!39
parents 59f9d25d 2b79465e
No related branches found
No related tags found
No related merge requests found
import grpc import grpc
import logging
from concurrent import futures from concurrent import futures
from perxis.collections import collections_pb2_grpc from perxis.collections import collections_pb2_grpc
...@@ -11,10 +12,16 @@ from perxis.interceptors import header_adder_interceptor ...@@ -11,10 +12,16 @@ from perxis.interceptors import header_adder_interceptor
from servicer import Servicer from servicer import Servicer
from constants.extension import get_extension_descriptor from constants.extension import get_extension_descriptor
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def main(): def main():
my_extension_descriptor = get_extension_descriptor(host="demo-ext-backend:50051") my_extension_descriptor = get_extension_descriptor(host="demo-ext-backend:50051")
logger.info(f"Инициализация сервиса расширения {my_extension_descriptor.extension}")
interceptor = header_adder_interceptor( interceptor = header_adder_interceptor(
'x-perxis-access', 'system' 'x-perxis-access', 'system'
) )
...@@ -34,10 +41,16 @@ def main(): ...@@ -34,10 +41,16 @@ def main():
) )
) )
logger.info(
f"Изменилась версия расширения {my_extension_descriptor.extension} ({ext.version} -> {my_extension_descriptor.version})"
)
ext_manager_stub.RegisterExtensions(manager_pb2.RegisterExtensionsRequest( ext_manager_stub.RegisterExtensions(manager_pb2.RegisterExtensionsRequest(
extensions=[my_extension_descriptor] extensions=[my_extension_descriptor]
)) ))
logger.info(f"Расширение {my_extension_descriptor.extension} зарегистрировано в perxis")
with grpc.insecure_channel("content:9020") as content_channel: with grpc.insecure_channel("content:9020") as content_channel:
intercepted_content_channel = grpc.intercept_channel(content_channel, interceptor) intercepted_content_channel = grpc.intercept_channel(content_channel, interceptor)
......
import grpc import grpc
import logging
from perxis.extensions import extension_pb2, extension_pb2_grpc from perxis.extensions import extension_pb2, extension_pb2_grpc
from perxis.roles import roles_pb2_grpc, roles_pb2 from perxis.roles import roles_pb2_grpc, roles_pb2
...@@ -20,6 +21,7 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer): ...@@ -20,6 +21,7 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
roles_service: roles_pb2_grpc.RolesStub, roles_service: roles_pb2_grpc.RolesStub,
clients_service: clients_pb2_grpc.ClientsStub, clients_service: clients_pb2_grpc.ClientsStub,
): ):
self.logger = logging.getLogger(__name__)
self.collections_service = collections_service self.collections_service = collections_service
self.environments_service = environments_service self.environments_service = environments_service
self.roles_service = roles_service self.roles_service = roles_service
...@@ -39,15 +41,45 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer): ...@@ -39,15 +41,45 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
for client in self.clients or []: for client in self.clients or []:
self.extension_setup.add_client(client) self.extension_setup.add_client(client)
def Install(self, request: extension_pb2.InstallRequest, context): 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( errors_list = self.extension_setup.install(
request.space_id, request.env_id, request.force 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 \ response_state = extension_pb2.ExtensionRequestResult.State.OK \
if not errors_list \ if not errors_list \
else extension_pb2.ExtensionRequestResult.State.ERROR else extension_pb2.ExtensionRequestResult.State.ERROR
...@@ -61,14 +93,35 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer): ...@@ -61,14 +93,35 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
)] )]
) )
def Update(self, request: extension_pb2.UpdateRequest, context): def Install(self, request: extension_pb2.InstallRequest, context):
errors_list = self.extension_setup.update( self.logger.info(
request.space_id, request.env_id, request.force "Установка расширения %s для окружения %s пространства %s. %s force" % (
self.extension_id,
request.env_id,
request.space_id,
"С" if request.force else "Без"
)
)
try:
response = self._Install(request, context)
except Exception as e:
response = extension_pb2.InstallResponse(
results=self.ext_request_results_from_exception(e)
) )
if errors_list: if response.results[0].state != extension_pb2.ExtensionRequestResult.State.OK:
context.set_code(grpc.StatusCode.UNKNOWN) context.set_code(grpc.StatusCode.UNKNOWN)
context.set_details("; ".join(errors_list)) context.set_details(response.results[0].error)
self.write_result_log("установки", request, response)
return response
def _Update(self, request: extension_pb2.UpdateRequest, context):
errors_list = self.extension_setup.update(
request.space_id, request.env_id, request.force
)
response_state = extension_pb2.ExtensionRequestResult.State.OK \ response_state = extension_pb2.ExtensionRequestResult.State.OK \
if not errors_list \ if not errors_list \
...@@ -83,7 +136,32 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer): ...@@ -83,7 +136,32 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
)] )]
) )
def Uninstall(self, request: extension_pb2.UninstallRequest, context): def Update(self, request: extension_pb2.UpdateRequest, context):
self.logger.info(
"Обновление расширения %s для окружения %s пространства %s. %s force" % (
self.extension_id,
request.env_id,
request.space_id,
"С" if request.force else "Без"
)
)
try:
response = self._Update(request, context)
except Exception as e:
response = extension_pb2.UpdateResponse(
results=self.ext_request_results_from_exception(e)
)
if response.results[0].state != extension_pb2.ExtensionRequestResult.State.OK:
context.set_code(grpc.StatusCode.UNKNOWN)
context.set_details(response.results[0].error)
self.write_result_log("обновления", request, response)
return response
def _Uninstall(self, request: extension_pb2.UninstallRequest, context):
errors_list: list[str] = self.extension_setup.uninstall(request.space_id, request.env_id, request.remove) errors_list: list[str] = self.extension_setup.uninstall(request.space_id, request.env_id, request.remove)
response_state = extension_pb2.ExtensionRequestResult.State.OK \ response_state = extension_pb2.ExtensionRequestResult.State.OK \
...@@ -99,12 +177,33 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer): ...@@ -99,12 +177,33 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
)] )]
) )
def Check(self, request: extension_pb2.CheckRequest, context): def Uninstall(self, request: extension_pb2.UninstallRequest, context):
errors_list = self.extension_setup.check(request.space_id, request.env_id) self.logger.info(
"Удаление расширения %s для окружения %s пространства %s. %s remove" % (
self.extension_id,
request.env_id,
request.space_id,
"С" if request.remove else "Без"
)
)
if errors_list: try:
response = self._Uninstall(request, context)
except Exception as e:
response = extension_pb2.UninstallResponse(
results=self.ext_request_results_from_exception(e)
)
if response.results[0].state != extension_pb2.ExtensionRequestResult.State.OK:
context.set_code(grpc.StatusCode.UNKNOWN) context.set_code(grpc.StatusCode.UNKNOWN)
context.set_details("; ".join(errors_list)) context.set_details(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 \ response_state = extension_pb2.ExtensionRequestResult.State.OK \
if not errors_list \ if not errors_list \
...@@ -119,6 +218,30 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer): ...@@ -119,6 +218,30 @@ class ExtensionService(extension_pb2_grpc.ExtensionServicer):
)] )]
) )
def Check(self, request: extension_pb2.CheckRequest, context):
self.logger.info(
"Проверка расширения %s для окружения %s пространства %s" % (
self.extension_id,
request.env_id,
request.space_id,
)
)
try:
response = self._Check(request, context)
except Exception as e:
response = extension_pb2.CheckResponse(
results=self.ext_request_results_from_exception(e)
)
if response.results[0].state != extension_pb2.ExtensionRequestResult.State.OK:
context.set_code(grpc.StatusCode.UNKNOWN)
context.set_details(response.results[0].error)
self.write_result_log("проверки", request, response)
return response
def Action(self, request: extension_pb2.ActionRequest, context): def Action(self, request: extension_pb2.ActionRequest, context):
context.set_code(grpc.StatusCode.UNKNOWN) context.set_code(grpc.StatusCode.UNKNOWN)
context.set_details("Unknown action") context.set_details("Unknown action")
......
...@@ -14,7 +14,7 @@ def load_requirements(): ...@@ -14,7 +14,7 @@ def load_requirements():
setup( setup(
name='perxis', name='perxis',
version='0.0.17', version='0.0.18',
description='Perxis python client', description='Perxis python client',
long_description=long_description, long_description=long_description,
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment