From e02f2cba9d31c6143d77e7adf9fb3fef7a6d7f2a Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Wed, 18 Aug 2021 21:37:00 +0200 Subject: [PATCH] v2.2.0; added new rout to retrieve database info (e.g. size on disk and number of measurements) --- src/StorageLeaf.py | 20 ++++++++++++++++++-- src/logic/database/Crud.py | 4 ++++ src/logic/database/Schemas.py | 13 +++++++++++++ src/version.json | 6 +++--- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/StorageLeaf.py b/src/StorageLeaf.py index 13b7130..a42fb06 100644 --- a/src/StorageLeaf.py +++ b/src/StorageLeaf.py @@ -3,15 +3,17 @@ import os import uvicorn from TheCodeLabs_BaseUtils.DefaultLogger import DefaultLogger -from fastapi import FastAPI +from fastapi import FastAPI, Depends from fastapi.openapi.docs import get_swagger_ui_html, get_redoc_html from fastapi.middleware.cors import CORSMiddleware +from sqlalchemy.orm import Session from starlette.responses import RedirectResponse, FileResponse from Settings import SETTINGS from logic import Constants +from logic.Dependencies import get_database from logic.DiscoveryService import DiscoveryService -from logic.database import Models, Schemas +from logic.database import Models, Schemas, Crud from logic.database.Database import engine from logic.routers import DeviceRouter from logic.routers import SensorRouter, MeasurementRouter @@ -72,6 +74,20 @@ def overridden_redoc(): redoc_favicon_url=app.url_path_for('favicon')) +@app.get('/databaseInfo', + summary='Gets information about the database version', + tags=['general'], + response_model=Schemas.DatabaseInfo) +async def databaseInfo(db: Session = Depends(get_database)): + numberOfMeasurements = Crud.get_total_number_of_measurements(db) + + sizeInBytes = os.path.getsize(databaseSettings['databasePath']) + sizeInMegaBytes = sizeInBytes // 1024 // 1024 + + return Schemas.DatabaseInfo(number_of_measurements=numberOfMeasurements, + size_on_disk_in_mb=sizeInMegaBytes) + + app.include_router(DeviceRouter.router) app.include_router(SensorRouter.router) app.include_router(MeasurementRouter.router) diff --git a/src/logic/database/Crud.py b/src/logic/database/Crud.py index cb5f45f..9fde026 100644 --- a/src/logic/database/Crud.py +++ b/src/logic/database/Crud.py @@ -168,5 +168,9 @@ def delete_measurement(db: Session, measurement: Schemas.Measurement): db.commit() +def get_total_number_of_measurements(db: Session) -> List[int]: + return db.query(Models.Measurement).count() + + def __get_current_datetime(): return datetime.strftime(datetime.now(), DATE_FORMAT) diff --git a/src/logic/database/Schemas.py b/src/logic/database/Schemas.py index a58df20..78bc9c8 100644 --- a/src/logic/database/Schemas.py +++ b/src/logic/database/Schemas.py @@ -25,6 +25,19 @@ class Version(BaseModel): } +class DatabaseInfo(BaseModel): + number_of_measurements: int + size_on_disk_in_mb: int + + class Config: + schema_extra = { + 'example': { + 'number_of_measurements': 1000, + 'size_on_disk_in_mb': 14 + } + } + + class MinMax(BaseModel): min: float = None max: float = None diff --git a/src/version.json b/src/version.json index 6a6986e..fa7ced4 100644 --- a/src/version.json +++ b/src/version.json @@ -1,7 +1,7 @@ { "version": { - "name": "v2.1.0", - "code": 15, - "date": "17.05.21" + "name": "v2.2.0", + "code": 16, + "date": "18.08.21" } } \ No newline at end of file -- GitLab