Skip to content

Commit

Permalink
added metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
ychebyshev committed Mar 9, 2024
1 parent 0e35985 commit 7e62534
Show file tree
Hide file tree
Showing 12 changed files with 436 additions and 12 deletions.
2 changes: 2 additions & 0 deletions config_dist/config.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
app:
name: shvatka
bot:
token: ""
telegraph-token: ""
Expand Down
410 changes: 406 additions & 4 deletions poetry.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ openpyxl = "^3.0.10"
lxml = "^4.9.2"
matplotlib = "^3.7.1"
greenlet = "<3.0.0"
prometheus-client = "^0.19.0"
dishka = "0.6.0"
asgi-monitor = "^0.1.0"

[tool.poetry.group.dev]
optional = true
Expand Down
2 changes: 1 addition & 1 deletion shvatka/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def main() -> FastAPI:
if not webhook_config:
raise EnvironmentError("No webhook configuration provided")

app = create_app()
app = create_app(api_config)
dishka = make_async_container(
*get_providers("SHVATKA_PATH"),
*get_bot_specific_providers(),
Expand Down
2 changes: 1 addition & 1 deletion shvatka/api/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def main() -> FastAPI:
setup_logging(paths)
api_config = load_config(paths)

app = create_app(api_config.auth.disable_cors)
app = create_app(api_config)
root_app = FastAPI()
root_app.mount(api_config.context_path, app)
setup_di(root_app, "SHVATKA_API_PATH")
Expand Down
1 change: 1 addition & 0 deletions shvatka/api/config/models/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,5 @@ def from_base(cls, base: Config, auth: AuthConfig, context_path: str = ""):
auth=auth,
file_storage_config=base.file_storage_config,
context_path=context_path,
app=base.app,
)
9 changes: 7 additions & 2 deletions shvatka/api/main_factory.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
import logging

from asgi_monitor.integrations.fastapi import setup_metrics # type: ignore[import-untyped]
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware

from shvatka.api import routes, middlewares
from shvatka.api.config.models.main import ApiConfig
from shvatka.common.config.models.paths import Paths
from shvatka.common.config.parser.paths import common_get_paths

logger = logging.getLogger(__name__)


def create_app(disable_cors: bool = False) -> FastAPI:
def create_app(config: ApiConfig) -> FastAPI:
app = FastAPI()
app.include_router(routes.setup())
middlewares.setup(app)
if disable_cors:
setup_metrics(
app, app_name=config.app.name, include_metrics_endpoint=True, include_trace_exemplar=True
)
if config.auth.disable_cors:
patch_for_cors(app)
return app

Expand Down
6 changes: 6 additions & 0 deletions shvatka/common/config/models/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

@dataclass
class Config:
app: AppConfig
paths: Paths
db: DBConfig
redis: RedisConfig
Expand All @@ -27,6 +28,11 @@ def log_path(self) -> Path:
return self.paths.log_path


@dataclass
class AppConfig:
name: str


@dataclass
class FileStorageConfig:
path: Path
Expand Down
7 changes: 6 additions & 1 deletion shvatka/common/config/parser/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from dataclass_factory import Factory

from shvatka.common.config.models.main import Config, FileStorageConfig
from shvatka.common.config.models.main import Config, FileStorageConfig, AppConfig
from shvatka.common.config.models.paths import Paths
from shvatka.infrastructure.db.config.parser.db import load_db_config, load_redis_config

Expand All @@ -11,8 +11,13 @@ def load_config(config_dct: dict, paths: Paths, dcf: Factory) -> Config:
db=load_db_config(config_dct["db"]),
redis=load_redis_config(config_dct["redis"]),
file_storage_config=load_file_storage_config(config_dct["file-storage-config"], dcf),
app=load_app_config(config_dct["app"], dcf),
)


def load_app_config(config_dct: dict, dcf: Factory) -> AppConfig:
return dcf.load(config_dct, AppConfig)


def load_file_storage_config(config_dct: dict, dcf: Factory) -> FileStorageConfig:
return dcf.load(config_dct, FileStorageConfig)
1 change: 1 addition & 0 deletions shvatka/tgbot/config/models/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ def from_base(
storage=storage,
tg_client=tg_client,
file_storage_config=base.file_storage_config,
app=base.app,
)
2 changes: 2 additions & 0 deletions tests/config/config.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
app:
name: shvatka-pytest
bot:
token: "123:ABC"
telegraph-token: "42"
Expand Down
4 changes: 2 additions & 2 deletions tests/integration/api_full/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ async def api_config(dishka: AsyncContainer) -> ApiConfig:


@pytest.fixture(scope="session")
def app(dishka: AsyncContainer):
app = create_app()
def app(dishka: AsyncContainer, api_config: ApiConfig):
app = create_app(api_config)
setup_dishka(dishka, app)
return app

Expand Down

0 comments on commit 7e62534

Please sign in to comment.