mirror of
https://github.com/dat515-2025/Group-8.git
synced 2026-03-22 15:12:08 +01:00
Compare commits
2 Commits
ed3e6329dd
...
f58083870f
| Author | SHA1 | Date | |
|---|---|---|---|
| f58083870f | |||
| ca8287cd8b |
@@ -9,6 +9,8 @@ from fastapi.middleware.cors import CORSMiddleware
|
|||||||
from prometheus_fastapi_instrumentator import Instrumentator, metrics
|
from prometheus_fastapi_instrumentator import Instrumentator, metrics
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
|
|
||||||
|
from app.services.prometheus import number_of_users, number_of_transactions
|
||||||
|
|
||||||
from app.services import bank_scraper
|
from app.services import bank_scraper
|
||||||
from app.workers.celery_tasks import load_transactions, load_all_transactions
|
from app.workers.celery_tasks import load_transactions, load_all_transactions
|
||||||
from app.models.user import User, OAuthAccount
|
from app.models.user import User, OAuthAccount
|
||||||
@@ -50,6 +52,9 @@ fastApi.add_middleware(
|
|||||||
|
|
||||||
prometheus = Instrumentator().instrument(fastApi)
|
prometheus = Instrumentator().instrument(fastApi)
|
||||||
|
|
||||||
|
# Register custom metrics
|
||||||
|
prometheus.add(number_of_users()).add(number_of_transactions())
|
||||||
|
|
||||||
prometheus.expose(
|
prometheus.expose(
|
||||||
fastApi,
|
fastApi,
|
||||||
endpoint="/metrics",
|
endpoint="/metrics",
|
||||||
|
|||||||
48
7project/backend/app/services/prometheus.py
Normal file
48
7project/backend/app/services/prometheus.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
from typing import Callable
|
||||||
|
from prometheus_fastapi_instrumentator.metrics import Info
|
||||||
|
from prometheus_client import Gauge
|
||||||
|
from sqlalchemy import select, func
|
||||||
|
|
||||||
|
from app.core.db import async_session_maker
|
||||||
|
from app.models.transaction import Transaction
|
||||||
|
from app.models.user import User
|
||||||
|
|
||||||
|
|
||||||
|
def number_of_users() -> Callable[[Info], None]:
|
||||||
|
METRIC = Gauge(
|
||||||
|
"number_of_users_total",
|
||||||
|
"Number of registered users.",
|
||||||
|
labelnames=("users",)
|
||||||
|
)
|
||||||
|
|
||||||
|
async def instrumentation(info: Info) -> None:
|
||||||
|
try:
|
||||||
|
async with async_session_maker() as session:
|
||||||
|
result = await session.execute(select(func.count(User.id)))
|
||||||
|
user_count = result.scalar_one() or 0
|
||||||
|
except Exception:
|
||||||
|
# In case of DB errors, avoid crashing metrics endpoint
|
||||||
|
user_count = 0
|
||||||
|
METRIC.labels(users="total").set(user_count)
|
||||||
|
|
||||||
|
return instrumentation
|
||||||
|
|
||||||
|
|
||||||
|
def number_of_transactions() -> Callable[[Info], None]:
|
||||||
|
METRIC = Gauge(
|
||||||
|
"number_of_transactions_total",
|
||||||
|
"Number of transactions stored.",
|
||||||
|
labelnames=("transactions",)
|
||||||
|
)
|
||||||
|
|
||||||
|
async def instrumentation(info: Info) -> None:
|
||||||
|
try:
|
||||||
|
async with async_session_maker() as session:
|
||||||
|
result = await session.execute(select(func.count()).select_from(Transaction))
|
||||||
|
transaction_count = result.scalar_one() or 0
|
||||||
|
except Exception:
|
||||||
|
# In case of DB errors, avoid crashing metrics endpoint
|
||||||
|
transaction_count = 0
|
||||||
|
METRIC.labels(transactions="total").set(transaction_count)
|
||||||
|
|
||||||
|
return instrumentation
|
||||||
@@ -43,8 +43,8 @@ The tracker should not store the transactions in the database - security vulnera
|
|||||||
|
|
||||||
Last 3 minutes of the meeting, summarize action items.
|
Last 3 minutes of the meeting, summarize action items.
|
||||||
|
|
||||||
- [ ] Change the name on frontend from 7project
|
- [x] Change the name on frontend from 7project
|
||||||
- [ ] Finalize the funcionality and everyting in the code part
|
- [x] Finalize the funcionality and everyting in the code part
|
||||||
- [ ] Try to finalize report with focus on reproducibility
|
- [ ] Try to finalize report with focus on reproducibility
|
||||||
- [ ] More high level explanation of the workflow in the report
|
- [ ] More high level explanation of the workflow in the report
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user