diff --git a/perxis/extensions/bootstrap.py b/perxis/extensions/bootstrap.py index 64c3569274a72a79ee154bfd1ef1d7f02efb74b5..9ff0e0bd389bded64edce40577796601905df51c 100644 --- a/perxis/extensions/bootstrap.py +++ b/perxis/extensions/bootstrap.py @@ -1,8 +1,10 @@ +import asyncio + +import aiocron import grpc import logging from concurrent import futures -from perxis.extensions import manager_pb2 from perxis.collections import collections_pb2_grpc from perxis.environments import environments_pb2_grpc from perxis.roles import roles_pb2_grpc @@ -22,7 +24,17 @@ def bootstrap( interceptor = header_adder_interceptor( 'x-perxis-access', 'system' ) - with grpc.insecure_channel(ext_manager_host) as extensions_manager_channel: + + loop = asyncio.get_event_loop() + + @aiocron.crontab('* * * * *', start=False) + def register_extension(): + ext_manager_stub.RegisterExtensions(manager_pb2.RegisterExtensionsRequest( + extensions=[ext_descriptor] + )) + logger.info(f"Расширение {ext_descriptor.extension} зарегистрировано РІ perxis") + + with grpc.aio.insecure_channel(ext_manager_host) as extensions_manager_channel: intercept_channel_extensions_manager_channel = grpc.intercept_channel(extensions_manager_channel, interceptor) ext_manager_stub = manager_pb2_grpc.ExtensionManagerStub(intercept_channel_extensions_manager_channel) @@ -43,13 +55,9 @@ def bootstrap( # f"Рзменилась версия расширения {ext_descriptor.extension} ({ext.version} -> {ext_descriptor.version})" # ) - ext_manager_stub.RegisterExtensions(manager_pb2.RegisterExtensionsRequest( - extensions=[ext_descriptor] - )) + register_extension.start() - logger.info(f"Расширение {ext_descriptor.extension} зарегистрировано РІ perxis") - - with grpc.insecure_channel(content_host) as content_channel: + with grpc.aio.insecure_channel(content_host) as content_channel: intercepted_content_channel = grpc.intercept_channel(content_channel, interceptor) collections_stub = collections_pb2_grpc.CollectionsStub(intercepted_content_channel) @@ -57,12 +65,21 @@ def bootstrap( clients_stub = clients_pb2_grpc.ClientsStub(intercepted_content_channel) environments_stub = environments_pb2_grpc.EnvironmentsStub(intercepted_content_channel) - server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) - extension_pb2_grpc.add_ExtensionServicer_to_server( - servicer_cls( - collections_stub, environments_stub, roles_stub, clients_stub - ), server + server = grpc.aio.server(futures.ThreadPoolExecutor(max_workers=10)) + loop.create_task( + extension_pb2_grpc.add_ExtensionServicer_to_server( + servicer_cls( + collections_stub, environments_stub, roles_stub, clients_stub + ), server + ) ) server.add_insecure_port("[::]:50051") - server.start() - server.wait_for_termination() + loop.create_task(server.start()) + loop.create_task(server.wait_for_termination()) + + try: + loop.run_forever() + finally: + loop.close() + loop.stop() + logging.info('Successfully shutdown service') diff --git a/requirements.txt b/requirements.txt index 266a39a950f45fd87d952cb3abc9932c8d771d62..741861e832a5a65a427d28e7e194ac68ea169920 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +aiocron==1.8 certifi==2023.7.22 chardet==5.2.0 charset-normalizer==3.2.0 diff --git a/setup.py b/setup.py index 9a53f23287c93ef6d374a9a89e6dc46bbb331eba..b1688574feac249c8f199dc2e78be25b64447040 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ def load_requirements(): setup( name='perxis', - version='1.0.2', + version='1.0.6', description='Perxis python client', long_description=long_description, long_description_content_type='text/markdown',