ugrade_server: Add host identity statistics

This commit is contained in:
Orsiris de Jong 2023-02-02 20:14:54 +01:00
parent e073324ce2
commit c3dc022a2d
3 changed files with 30 additions and 5 deletions

View file

@ -7,8 +7,8 @@ __intname__ = "npbackup.upgrade_server.upgrade_server"
__author__ = "Orsiris de Jong" __author__ = "Orsiris de Jong"
__copyright__ = "Copyright (C) 2023 NetInvent" __copyright__ = "Copyright (C) 2023 NetInvent"
__license__ = "GPL-3.0-only" __license__ = "GPL-3.0-only"
__build__ = "202303101" __build__ = "202303102"
__version__ = "1.0.0" __version__ = "1.1.0"
DEVEL = True DEVEL = True

View file

@ -5,14 +5,14 @@ __intname__ = "npbackup.upgrade_server.api"
__author__ = "Orsiris de Jong" __author__ = "Orsiris de Jong"
__copyright__ = "Copyright (C) 2023 NetInvent" __copyright__ = "Copyright (C) 2023 NetInvent"
__license__ = "GPL-3.0-only" __license__ = "GPL-3.0-only"
__build__ = "202303101" __build__ = "202303102"
__appname__ = "npbackup.upgrader" __appname__ = "npbackup.upgrader"
from typing import Literal from typing import Literal
import logging import logging
import secrets import secrets
from fastapi import FastAPI, HTTPException, Response, Depends, status from fastapi import FastAPI, HTTPException, Response, Depends, status, Request
from fastapi.security import HTTPBasic, HTTPBasicCredentials from fastapi.security import HTTPBasic, HTTPBasicCredentials
from fastapi_offline import FastAPIOffline from fastapi_offline import FastAPIOffline
from upgrade_server.models.files import FileGet, FileSend, Platform, Arch from upgrade_server.models.files import FileGet, FileSend, Platform, Arch
@ -80,7 +80,23 @@ async def current_version(auth=Depends(get_current_username)):
@app.get("/upgrades/{platform}/{arch}", response_model=FileSend, status_code=200) @app.get("/upgrades/{platform}/{arch}", response_model=FileSend, status_code=200)
async def upgrades(platform: Platform, arch: Arch, auth=Depends(get_current_username)): @app.get("/upgrades/{platform}/{arch}/{host_identity}", response_model=FileSend, status_code=200)
@app.get("/upgrades/{platform}/{arch}/{host_identity}/{installed_version}", response_model=FileSend, status_code=200)
@app.get("/upgrades/{platform}/{arch}/{host_identity}/{installed_version}/{group}", response_model=FileSend, status_code=200)
async def upgrades(request: Request, platform: Platform, arch: Arch, host_identity: str = None, installed_version: str = None, group: str = None, auth=Depends(get_current_username)):
data = {
"ip": request.client.host,
"host_identity": host_identity,
"installed_version": installed_version,
"group": group,
"platform": platform.value,
"arch": arch.value
}
try:
crud.store_host_info(config_dict['upgrades']['statistics_file'], host_id = data)
except KeyError:
logger.error("No statistics file set.")
file = FileGet(platform=platform, arch=arch) file = FileGet(platform=platform, arch=arch)
try: try:

View file

@ -38,6 +38,15 @@ def is_enabled() -> bool:
return not os.path.isfile("DISABLED") return not os.path.isfile("DISABLED")
def store_host_info(destination: str, host_id: dict) -> None:
try:
data = ",".join(host_id.values()) + "\n"
with open(destination, 'a', encoding='utf-8') as fpw:
fpw.write(data)
except OSError:
logger.error("Cannot write statistics file")
def get_current_version() -> Optional[CurrentVersion]: def get_current_version() -> Optional[CurrentVersion]:
try: try:
path = os.path.join(config_dict["upgrades"]["data_root"], "VERSION") path = os.path.join(config_dict["upgrades"]["data_root"], "VERSION")