feat: indie status page MVP -- FastAPI + SQLite
- 8 DB models (services, incidents, monitors, subscribers, etc.) - Full CRUD API for services, incidents, monitors - Public status page with live data - Incident detail page with timeline - API key authentication - Uptime monitoring scheduler - 13 tests passing - TECHNICAL_DESIGN.md with full spec
This commit is contained in:
commit
902133edd3
4655 changed files with 1342691 additions and 0 deletions
|
|
@ -0,0 +1,18 @@
|
|||
from contextlib import AsyncExitStack
|
||||
|
||||
from starlette.types import ASGIApp, Receive, Scope, Send
|
||||
|
||||
|
||||
# Used mainly to close files after the request is done, dependencies are closed
|
||||
# in their own AsyncExitStack
|
||||
class AsyncExitStackMiddleware:
|
||||
def __init__(
|
||||
self, app: ASGIApp, context_name: str = "fastapi_middleware_astack"
|
||||
) -> None:
|
||||
self.app = app
|
||||
self.context_name = context_name
|
||||
|
||||
async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
|
||||
async with AsyncExitStack() as stack:
|
||||
scope[self.context_name] = stack
|
||||
await self.app(scope, receive, send)
|
||||
Loading…
Add table
Add a link
Reference in a new issue