From 767f43551e10b511daf1e8b084f29309811a7553 Mon Sep 17 00:00:00 2001 From: "Magel, Denis" Date: Thu, 18 Sep 2025 14:23:19 +0200 Subject: [PATCH] rebased --- .env | 11 +++-------- src/aggregate/__init__.py | 2 +- src/aggregate/aggregate_service.py | 4 ++-- src/database.py | 2 +- src/example/router.py | 2 +- src/example/schema.py | 11 +++++++---- src/initialize.py | 27 ++++++++++++++------------- src/main.py | 4 ++-- 8 files changed, 31 insertions(+), 32 deletions(-) diff --git a/.env b/.env index 65c8a17..cc0ff43 100644 --- a/.env +++ b/.env @@ -1,8 +1,3 @@ -# Environment variables for NetApp ONTAP clusters -CLUSTER1_HOSTNAME=172.16.57.2 -CLUSTER1_USERNAME=admin -CLUSTER1_PASSWORD=Netapp12 - -CLUSTER2_HOSTNAME=172.16.56.2 -CLUSTER2_USERNAME=admin -CLUSTER2_PASSWORD=Netapp12 \ No newline at end of file +cluster_inventory_path = ../config/inventory.yml +redis_host = '172.16.0.208' +redis_port = '6379' \ No newline at end of file diff --git a/src/aggregate/__init__.py b/src/aggregate/__init__.py index e94ee4f..b91fa84 100644 --- a/src/aggregate/__init__.py +++ b/src/aggregate/__init__.py @@ -1,5 +1,5 @@ from src.example.router import router as example_router -from .aggregate_router import router as aggregate_router +from src.aggregate.aggregate_router import router as aggregate_router __all__ = ["example_router", "aggregate_router"] diff --git a/src/aggregate/aggregate_service.py b/src/aggregate/aggregate_service.py index 7a37d87..af35121 100644 --- a/src/aggregate/aggregate_service.py +++ b/src/aggregate/aggregate_service.py @@ -3,9 +3,9 @@ from typing import List from fastapi import Request -from .aggregate_schema import AggregateSchema, MetricEnum +from src.aggregate.aggregate_schema import AggregateSchema, MetricEnum from logging import getLogger -from ..utils import round_bytes, get_data_from_ontap +from src.utils import round_bytes, get_data_from_ontap logger = getLogger("uvicorn") logger.setLevel("DEBUG") diff --git a/src/database.py b/src/database.py index a278d98..c014138 100644 --- a/src/database.py +++ b/src/database.py @@ -3,7 +3,7 @@ import logging from redis import Redis, ConnectionError from typing import List from pydantic import TypeAdapter -from schema import ConfigSchema +from src.schema import ConfigSchema def setup_db_conn(redishost, redisport: str): diff --git a/src/example/router.py b/src/example/router.py index ab4f0f0..e9f11f2 100644 --- a/src/example/router.py +++ b/src/example/router.py @@ -1,7 +1,7 @@ # contains the router for the aggregate endpoint from fastapi import APIRouter -from .schema import ExampleSchema +from src.example.schema import ExampleSchema router = APIRouter(tags=["aggregate"]) diff --git a/src/example/schema.py b/src/example/schema.py index d0ae38a..0e564e0 100644 --- a/src/example/schema.py +++ b/src/example/schema.py @@ -1,15 +1,18 @@ # contains the schema definitions for the aggregate service from pydantic import BaseModel +from pathlib import Path class ExampleSchema(BaseModel): example_field: str another_field: int + class ClusterCreds(BaseModel): """A structure to hold basic auth cluster credentials for a cluster""" - username: str - password: str - hostname: str = None + + username: str + password: str + hostname: str = None cert_filepath: Path = None - key_filepath: Path = None + key_filepath: Path = None diff --git a/src/initialize.py b/src/initialize.py index dcdd84d..b6c6298 100644 --- a/src/initialize.py +++ b/src/initialize.py @@ -5,40 +5,41 @@ import yaml from pathlib import Path from dotenv import load_dotenv -from database import setup_db_conn -from schema import ConfigSchema +from src.database import setup_db_conn +from src.schema import ConfigSchema from typing import List from pydantic import TypeAdapter + def initialize_config(): load_dotenv() - log = logging.getLogger('uvicorn') - ENV_INVENTORYPATH = os.getenv('cluster_inventory_path') - ENV_REDISHOST = os.getenv('redis_host') - ENV_REDISPORT = os.getenv('redis_port') + log = logging.getLogger("uvicorn") + ENV_INVENTORYPATH = os.getenv("cluster_inventory_path") + ENV_REDISHOST = os.getenv("redis_host") + ENV_REDISPORT = os.getenv("redis_port") log.info(f"Found Cluster Inventory file at: {ENV_INVENTORYPATH}") if not ENV_INVENTORYPATH or not Path(ENV_INVENTORYPATH).is_file(): print(f"FATAL: Inventory file {ENV_INVENTORYPATH} is missing or not a file.") return False try: - with open(ENV_INVENTORYPATH, 'r') as f: + with open(ENV_INVENTORYPATH, "r") as f: inv = yaml.safe_load(f) - inventory = json.dumps(inv) + inventory = json.dumps(inv) except Exception as e: print(f"FATAL: Cannot read inventory file {ENV_INVENTORYPATH}. Err: {e}") return False - print(f'[INFO] Importing configuration to DB...') + print(f"[INFO] Importing configuration to DB...") try: GLOBAL_INVENTORY_VALID = TypeAdapter(List[ConfigSchema]).validate_python(inv) redis_conn = setup_db_conn(ENV_REDISHOST, ENV_REDISPORT) - redis_conn.hset('cluster_inventory', mapping={'inventory': inventory}) + redis_conn.hset("cluster_inventory", mapping={"inventory": inventory}) redis_conn.close() - log.info("Configuration has been loaded.") + log.info("Configuration has been loaded.") return True - except Exception as e: + except Exception as e: print(f"FATAL: Redis DB error: {e}") - return False \ No newline at end of file + return False diff --git a/src/main.py b/src/main.py index 7863649..7bcf9c7 100644 --- a/src/main.py +++ b/src/main.py @@ -8,9 +8,9 @@ from src.config import config_router from contextlib import asynccontextmanager -from database import setup_db_conn, get_config_from_db +from .database import setup_db_conn, get_config_from_db from src.initialize import initialize_config -from utils import setup_logging +from .utils import setup_logging logger = logging.getLogger("uvicorn") logger.info("Starting application")