get-aggregates #2
4
src/aggregate/__init__.py
Normal file
4
src/aggregate/__init__.py
Normal 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"]
|
||||||
21
src/aggregate/aggregate_router.py
Normal file
21
src/aggregate/aggregate_router.py
Normal 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)
|
||||||
8
src/aggregate/aggregate_schema.py
Normal file
8
src/aggregate/aggregate_schema.py
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# contains the schema definitions for aggregates
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
class AggregateSchema(BaseModel):
|
||||||
|
aggregate: str
|
||||||
|
node: str
|
||||||
|
available: str
|
||||||
24
src/aggregate/aggregate_service.py
Normal file
24
src/aggregate/aggregate_service.py
Normal 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
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
from .router import router as example_router
|
|
||||||
|
|
||||||
__all__ = ["example_router"]
|
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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("/")
|
||||||
|
|||||||
Reference in New Issue
Block a user