core/main.py
Stepan Vladovskii bed2f89964
All checks were successful
Deploy to core / deploy (push) Successful in 1m38s
debug: main.py with import sentry-sdk
2024-01-27 22:11:39 -03:00

71 lines
2.2 KiB
Python

import os
import sentry_sdk
from importlib import import_module
from os.path import exists
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])