From a4a5505ae5910c86affd47e6971ce3fa2bee09ea Mon Sep 17 00:00:00 2001 From: CWestICL Date: Thu, 6 Jul 2023 14:17:04 +0100 Subject: [PATCH] Logging added --- datahub/core/log_config.py | 26 ++++++++++++++++++++++++++ datahub/main.py | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 datahub/core/log_config.py diff --git a/datahub/core/log_config.py b/datahub/core/log_config.py new file mode 100644 index 0000000..0c09c7c --- /dev/null +++ b/datahub/core/log_config.py @@ -0,0 +1,26 @@ +"""Dict configuration for formal logging.""" +LOG_LEVEL: str = "DEBUG" +FORMAT: str = "[%(levelname)s] %(asctime)s | %(message)s" +logging_dict_config = { + "version": 1, + "formatters": { + "basic": { + "()": "uvicorn.logging.DefaultFormatter", + "format": FORMAT, + } + }, + "handlers": { + "console": { + "formatter": "basic", + "class": "logging.StreamHandler", + "stream": "ext://sys.stderr", + "level": LOG_LEVEL, + } + }, + "loggers": { + "api_logger": { + "handlers": ["console"], + "level": LOG_LEVEL, + } + }, +} diff --git a/datahub/main.py b/datahub/main.py index 6e3a94c..40b01b7 100644 --- a/datahub/main.py +++ b/datahub/main.py @@ -1,16 +1,26 @@ """Script for running Datahub API.""" +import logging +import logging.config from typing import Any, Hashable from fastapi import FastAPI, HTTPException from pydantic import BaseModel +from datahub.core.log_config import logging_dict_config + from . import data as dt from .dsr import DSRModel, validate_dsr_arrays from .opal import OpalModel from .wesim import get_wesim +logging.config.dictConfig(logging_dict_config) + app = FastAPI() +log = logging.getLogger("api_logger") +log.debug("Logging is configured.") +log.info("Datahub API is running...") + class OpalArrayData(BaseModel): """Class for defining required key values for Opal data as an array.""" @@ -28,24 +38,41 @@ def create_opal_data(data: OpalModel | OpalArrayData) -> dict[str, str]: Returns: A Dict of the Opal data that has just been added to the Dataframe """ + log.info("Recieved Opal data.") + raw_data = data.dict() if isinstance(data, OpalArrayData): + log.info("Array format detected.") append_input = raw_data["array"] else: + log.info("Dict format detected.") append_input = raw_data - # TODO: Change print statements to more formal logging - print(dt.opal_df) + log.info( + """Original Opal DataFrame: + + %s + """, + dt.opal_df, + ) if isinstance(append_input, list) and not len(append_input) == 45: + log.error("Array has invalid length. Expecting 45 items.") raise HTTPException( status_code=400, detail="Array has invalid length. Expecting 45 items." ) + log.info("Appending new data...") dt.opal_df.opal.append(append_input) - print(dt.opal_df) + log.info( + """Updated Opal DataFrame: + + %s + """, + dt.opal_df, + ) return {"message": "Data submitted successfully."}