Compare commits

...

5 Commits

Author SHA1 Message Date
1592333ef8 Merge pull request 'get-aggregates' (#2) from get-aggregates into main
Reviewed-on: #2
2025-09-18 09:06:09 +00:00
Pascal Scheiben
73a42aae3b Moving example files back to its place 2025-09-18 10:39:36 +02:00
Pascal Scheiben
615d290773 Renamed folder from example -> aggregate 2025-09-18 10:23:40 +02:00
Magel, Denis
af4b60a0e3 style: 2025-09-18 10:17:24 +02:00
Magel, Denis
63bcd9b931 feat: add GET /aggregates 2025-09-18 10:10:30 +02:00
9 changed files with 64 additions and 8 deletions

View File

@@ -0,0 +1,4 @@
from src.example.router import router as example_router
from .aggregate_router import router as aggregate_router
__all__ = ["example_router", "aggregate_router"]

View File

@@ -0,0 +1,21 @@
# contains the router for the aggregates endpoint
from fastapi import APIRouter, Query
from enum import Enum
from typing import List
from .aggregate_schema import AggregateSchema
from .aggregate_service import get_aggregates
class MetricEnum(str, Enum):
relative = "relative"
absolute = "absolute"
router = APIRouter(tags=["aggregates"])
@router.get("/aggregates", response_model=List[AggregateSchema])
async def aggregates_endpoint(
metric: MetricEnum = Query(MetricEnum.relative, description="Metric type"),
):
return await get_aggregates(metric)

View File

@@ -0,0 +1,8 @@
# contains the schema definitions for aggregates
from pydantic import BaseModel
class AggregateSchema(BaseModel):
aggregate: str
node: str
available: str

View File

@@ -0,0 +1,24 @@
# contains the business logic for aggregates
from typing import List
from .aggregate_schema import AggregateSchema
async def get_aggregates(metric: str = "relative") -> List[AggregateSchema]:
# Dummy data for demonstration
# You can use the metric parameter to filter or modify results as needed
# For now, just return the same data and show metric usage
print(f"Metric used: {metric}")
aggregates: list = [
AggregateSchema(
aggregate="Aggregate A", node="cluster01-01", available="100.0TB"
),
AggregateSchema(
aggregate="Aggregate B", node="cluster01-01", available="200.5GB"
),
AggregateSchema(
aggregate="Aggregate C", node="cluster01-02", available="300.75MB"
),
]
return aggregates

View File

@@ -1,3 +0,0 @@
from .router import router as example_router
__all__ = ["example_router"]

View File

@@ -1,8 +1,8 @@
# contains the router for the example endpoint
# contains the router for the aggregate endpoint
from fastapi import APIRouter
from .schema import ExampleSchema
router = APIRouter(tags=["example"])
router = APIRouter(tags=["aggregate"])
@router.get("/example")

View File

@@ -1,4 +1,4 @@
# contains the schema definitions for the example service
# contains the schema definitions for the aggregate service
from pydantic import BaseModel

View File

@@ -1,3 +1,3 @@
# contains the business logic for the example service
# contains the business logic for the aggregate service
async def example_service() -> str:
return "This is an example service"
return "This is an aggregate service"

View File

@@ -1,6 +1,7 @@
from src.service import load_config
from fastapi import FastAPI
import logging
from src.aggregate import aggregate_router
logger = logging.getLogger("uvicorn")
@@ -8,6 +9,7 @@ logger.info("Starting application")
config = load_config()
app = FastAPI()
app.include_router(aggregate_router)
@app.get("/")