core/main.py
Untone dd2ef55f04
Some checks failed
Deploy to core / deploy (push) Has been cancelled
Merge branch 'feature/core' of v2.discours.io:core into feature/core
2024-01-28 11:40:00 +03:00

67 lines
2.1 KiB
Python

import os
from importlib import import_module
from os.path import exists
import sentry_sdk
from ariadne import load_schema_from_path, make_executable_schema
from ariadne.asgi import GraphQL
from sentry_sdk.integrations.aiohttp import AioHttpIntegration
from sentry_sdk.integrations.ariadne import AriadneIntegration
from sentry_sdk.integrations.redis import RedisIntegration
from sentry_sdk.integrations.sqlalchemy import SqlalchemyIntegration
from sentry_sdk.integrations.starlette import StarletteIntegration
from starlette.applications import Starlette
from starlette.routing import Route
from resolvers.webhook import WebhookEndpoint
from services.rediscache import redis
from services.schema import resolvers
from services.viewed import ViewedStorage
from settings import DEV_SERVER_PID_FILE_NAME, MODE, SENTRY_DSN
import_module('resolvers')
schema = make_executable_schema(load_schema_from_path('schemas/core.graphql'), resolvers) # type: ignore
async def start_up():
print(f'[main] starting in {MODE} mode')
with sentry_sdk.start_transaction(op='task', name='Redis Connection'):
await redis.connect()
# start viewed service
await ViewedStorage.init()
if MODE == 'development':
# pid file management
if not exists(DEV_SERVER_PID_FILE_NAME):
with open(DEV_SERVER_PID_FILE_NAME, 'w', encoding='utf-8') as f:
f.write(str(os.getpid()))
if MODE == 'production':
# sentry monitoring
try:
sentry_sdk.init(
SENTRY_DSN,
enable_tracing=True,
integrations=[
StarletteIntegration(),
AriadneIntegration(),
SqlalchemyIntegration(),
RedisIntegration(),
AioHttpIntegration(),
],
)
except Exception as e:
print('[sentry] init error')
print(e)
async def shutdown():
await redis.disconnect()
routes = [Route('/', GraphQL(schema, debug=True)), Route('/new-author', WebhookEndpoint)]
app = Starlette(routes=routes, debug=True, on_startup=[start_up], on_shutdown=[shutdown])