52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
|
|
# retoor <retoor@molodetz.nl>
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from contextlib import asynccontextmanager
|
||
|
|
|
||
|
|
from fastapi import FastAPI
|
||
|
|
|
||
|
|
from devplacepy_services.base.health import health_router
|
||
|
|
from devplacepy_services.base.http import shutdown_pool, startup_pool
|
||
|
|
from devplacepy_services.base.middleware import (
|
||
|
|
InternalAuthMiddleware,
|
||
|
|
InternalCallCounterMiddleware,
|
||
|
|
RequestStatsMiddleware,
|
||
|
|
SanitizeErrorsMiddleware,
|
||
|
|
)
|
||
|
|
from devplacepy_services.base.service import BaseMicroservice
|
||
|
|
from devplacepy_services.database import broker_setup
|
||
|
|
from devplacepy_services.database.routes import router as database_router
|
||
|
|
|
||
|
|
|
||
|
|
class DatabaseService(BaseMicroservice):
|
||
|
|
name = "database"
|
||
|
|
title = "Database"
|
||
|
|
default_port = 10601
|
||
|
|
workers = 1
|
||
|
|
stateful = True
|
||
|
|
depends_on = []
|
||
|
|
|
||
|
|
@asynccontextmanager
|
||
|
|
async def lifespan(self, app: FastAPI):
|
||
|
|
app.state.service_name = self.name
|
||
|
|
self.started_at = __import__("time").monotonic()
|
||
|
|
await startup_pool()
|
||
|
|
await broker_setup.startup()
|
||
|
|
yield
|
||
|
|
await broker_setup.shutdown()
|
||
|
|
await shutdown_pool()
|
||
|
|
|
||
|
|
def build_app(self):
|
||
|
|
app = self.create_app()
|
||
|
|
app.add_middleware(SanitizeErrorsMiddleware)
|
||
|
|
app.add_middleware(InternalAuthMiddleware)
|
||
|
|
app.add_middleware(InternalCallCounterMiddleware)
|
||
|
|
app.add_middleware(RequestStatsMiddleware)
|
||
|
|
app.include_router(health_router(self))
|
||
|
|
app.include_router(database_router)
|
||
|
|
return app
|
||
|
|
|
||
|
|
|
||
|
|
_service = DatabaseService()
|
||
|
|
app = _service.build_app()
|