import asyncio import os from os.path import exists from sentry_sdk.integrations.aiohttp import AioHttpIntegration from sentry_sdk.integrations.redis import RedisIntegration from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration from sentry_sdk.integrations.strawberry import StrawberryIntegration from starlette.applications import Starlette from strawberry.asgi import GraphQL from resolvers.listener import notifications_worker from resolvers.schema import schema from services.rediscache import redis from settings import DEV_SERVER_PID_FILE_NAME, MODE, SENTRY_DSN import logging logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger("\t[main]\t") logger.setLevel(logging.DEBUG) async def start_up(): await redis.connect() task = asyncio.create_task(notifications_worker()) logger.info(task) if MODE == "dev": if exists(DEV_SERVER_PID_FILE_NAME): with open(DEV_SERVER_PID_FILE_NAME, "w", encoding="utf-8") as f: f.write(str(os.getpid())) else: try: import sentry_sdk sentry_sdk.init( SENTRY_DSN, enable_tracing=True, integrations=[ StrawberryIntegration(async_execution=True), SqlalchemyIntegration(), RedisIntegration(), AioHttpIntegration(), ], ) except Exception as e: logger.error("sentry init error", e) async def shutdown(): await redis.disconnect() app = Starlette(debug=True, on_startup=[start_up], on_shutdown=[shutdown]) app.mount("/", GraphQL(schema, debug=True))