get-aggregates #2

Merged
pascal merged 4 commits from get-aggregates into main 2025-09-18 09:06:10 +00: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 fastapi import APIRouter
from .schema import ExampleSchema from .schema import ExampleSchema
router = APIRouter(tags=["example"]) router = APIRouter(tags=["aggregate"])
@router.get("/example") @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 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: 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 src.service import load_config
from fastapi import FastAPI from fastapi import FastAPI
import logging import logging
from src.aggregate import aggregate_router
logger = logging.getLogger("uvicorn") logger = logging.getLogger("uvicorn")
@@ -8,6 +9,7 @@ logger.info("Starting application")
config = load_config() config = load_config()
app = FastAPI() app = FastAPI()
app.include_router(aggregate_router)
@app.get("/") @app.get("/")