Разделение сканирования на разные подсети. Хранение каждой из просканированных подсетей. Исправление багов с заметками и обновленные локали
This commit is contained in:
parent
c326edfb9a
commit
b1306ff66f
10 changed files with 1124 additions and 285 deletions
|
|
@ -1,5 +1,6 @@
|
|||
import os
|
||||
import logging
|
||||
from typing import Optional
|
||||
from fastapi import APIRouter, HTTPException, Depends, Response, Request
|
||||
from starlette.responses import FileResponse
|
||||
from services.settings_service import SettingsService
|
||||
|
|
@ -13,12 +14,14 @@ router = APIRouter()
|
|||
settings_service = SettingsService()
|
||||
|
||||
@router.post("/clear_subnet")
|
||||
def clear_subnet(translations: Translations = Depends(get_translations())):
|
||||
def clear_subnet(subnet: Optional[str] = None, translations: Translations = Depends(get_translations())):
|
||||
"""Очищает данные узлов подсети, сохранённые в devices.json.
|
||||
|
||||
Удаляет все записи об узлах подсети, оставляя файл пустым.
|
||||
|
||||
Args:
|
||||
subnet (Optional[str]): Подсеть в формате CIDR (например, "10.1.1.0/24").
|
||||
Если None, очищает все подсети.
|
||||
translations: Объект переводов для текущего языка.
|
||||
|
||||
Returns:
|
||||
|
|
@ -28,9 +31,12 @@ def clear_subnet(translations: Translations = Depends(get_translations())):
|
|||
HTTPException: Если произошла ошибка очистки (status_code=500).
|
||||
"""
|
||||
try:
|
||||
success = settings_service.clear_subnet()
|
||||
success = settings_service.clear_subnet(subnet)
|
||||
if success:
|
||||
return {"message": translations.gettext("Данные узлов подсети успешно очищены")}
|
||||
if subnet:
|
||||
return {"message": translations.gettext("Данные узлов подсети {subnet} успешно очищены").format(subnet=subnet)}
|
||||
else:
|
||||
return {"message": translations.gettext("Данные всех подсетей успешно очищены")}
|
||||
else:
|
||||
raise HTTPException(status_code=500, detail=translations.gettext("Не удалось очистить данные узлов подсети"))
|
||||
except Exception as e:
|
||||
|
|
@ -91,26 +97,28 @@ DEVICE_PATH = "storage/devices/devices.json"
|
|||
WIFI_PATH = "storage/wifi/wifi.json"
|
||||
|
||||
@router.get("/export_devices", response_class=FileResponse)
|
||||
async def export_devices(translations: Translations = Depends(get_translations())):
|
||||
async def export_devices(subnet: str, translations: Translations = Depends(get_translations())):
|
||||
"""
|
||||
Экспортирует файл с данными устройств в формате JSON.
|
||||
Экспортирует файл с данными устройств в формате JSON для указанной подсети.
|
||||
|
||||
Args:
|
||||
subnet (str): Подсеть в формате CIDR (например, "10.1.1.0/24").
|
||||
translations: Объект переводов для текущего языка.
|
||||
|
||||
Returns:
|
||||
FileResponse: Файл devices.json для скачивания.
|
||||
FileResponse: Файл <subnet>.json для скачивания.
|
||||
|
||||
Raises:
|
||||
HTTPException: Если файл не найден (status_code=404).
|
||||
"""
|
||||
if not os.path.exists(DEVICE_PATH):
|
||||
logger.warning(f"Export file not found: {DEVICE_PATH}")
|
||||
file_path = f"storage/subnets/{subnet.replace('/', '_')}.json"
|
||||
if not os.path.exists(file_path):
|
||||
logger.warning(f"Export file not found: {file_path}")
|
||||
raise HTTPException(status_code=404, detail=translations.gettext("Файл не найден"))
|
||||
logger.info(f"Exporting file: {DEVICE_PATH}")
|
||||
logger.info(f"Exporting file: {file_path}")
|
||||
return FileResponse(
|
||||
path=DEVICE_PATH,
|
||||
filename="devices.json",
|
||||
path=file_path,
|
||||
filename=f"{subnet.replace('/', '_')}.json",
|
||||
media_type="application/json"
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue