mirror of
https://github.com/nexus-stc/hyperboria
synced 2024-12-13 05:07:47 +01:00
67 lines
2.3 KiB
Python
67 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):
|
||
|
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()
|