hyperboria/nexus/meta_api/main.py

68 lines
2.3 KiB
Python

import asyncio
import logging
import uvloop
from aiosumma import SummaHttpClient
from library.aiogrpctools import AioGrpcServer
from library.configurator import Configurator
from library.logging import configure_logging
from nexus.meta_api.configs import get_config
from nexus.meta_api.providers.data import DataProvider
from nexus.meta_api.providers.stat import StatProvider
from nexus.meta_api.services.documents import DocumentsService
from nexus.meta_api.services.search import SearchService
class GrpcServer(AioGrpcServer):
def __init__(self, config):
self.log_config(config)
super().__init__(address=config['grpc']['host'], port=config['grpc']['port'])
self.config = config
self.summa_client = SummaHttpClient(
base_url=config['summa']['url'],
timeout=config['summa']['timeout'],
ttl_dns_cache=config['summa']['ttl_dns_cache'],
)
self.data_provider = DataProvider(data_provider_config=self.config['data_provider'])
self.stat_provider = StatProvider(stat_provider_config=self.config['stat_provider'])
learn_logger = logging.getLogger('learn') if self.config['application']['learn_log'] else None
self.search_service = SearchService(
server=self.server,
summa_client=self.summa_client,
stat_provider=self.stat_provider,
learn_logger=learn_logger,
)
self.documents_service = DocumentsService(
server=self.server,
summa_client=self.summa_client,
data_provider=self.data_provider,
stat_provider=self.stat_provider,
learn_logger=learn_logger,
)
self.waits.extend([self.summa_client, self.data_provider, self.stat_provider,
self.search_service, self.documents_service])
async def create_app(config: Configurator):
try:
await GrpcServer(config).start_and_wait()
except asyncio.CancelledError:
pass
def main():
config = get_config()
configure_logging(config)
if config['metrics']['enabled']:
from library.metrics_server import MetricsServer
MetricsServer(config['metrics']).fork_process()
asyncio.set_event_loop(uvloop.new_event_loop())
asyncio.get_event_loop().run_until_complete(create_app(config))
if __name__ == '__main__':
main()