Files
ipam/backend/app/api/v1/reports.py
T
Your Name bca0da7c7d readme
2026-07-20 13:40:05 +08:00

116 lines
3.5 KiB
Python

from fastapi import APIRouter, Depends, Query, Response
from sqlalchemy.orm import Session
from typing import Optional
from app.core.database import get_db
from app.core.security import require_permission
from app.models.network import IPStatus
from app.services.report_service import ReportExportService
router = APIRouter(prefix="/reports", tags=["报表导出"])
@router.get("/ip-addresses/csv", summary="导出IP地址CSV")
def export_ip_addresses_csv(
network_id: Optional[int] = None,
status: Optional[IPStatus] = None,
online_only: bool = Query(False, description="仅导出在线IP"),
db: Session = Depends(get_db),
current_user = Depends(require_permission("report:export"))
):
"""导出IP地址表CSV"""
csv_content, filename = ReportExportService.export_ip_addresses_csv(
db,
network_id=network_id,
status=status,
include_online_only=online_only
)
return Response(
content=csv_content,
media_type="text/csv; charset=utf-8-sig",
headers={
"Content-Disposition": f"attachment; filename*=UTF-8''{filename}"
}
)
@router.get("/networks/csv", summary="导出网段汇总CSV")
def export_networks_csv(
db: Session = Depends(get_db),
current_user = Depends(require_permission("report:export"))
):
"""导出网段汇总CSV"""
csv_content, filename = ReportExportService.export_networks_csv(db)
return Response(
content=csv_content,
media_type="text/csv; charset=utf-8-sig",
headers={
"Content-Disposition": f"attachment; filename*=UTF-8''{filename}"
}
)
@router.get("/alerts/csv", summary="导出告警CSV")
def export_alerts_csv(
status: Optional[str] = None,
db: Session = Depends(get_db),
current_user = Depends(require_permission("report:export"))
):
"""导出告警CSV"""
csv_content, filename = ReportExportService.export_alerts_csv(db, status=status)
return Response(
content=csv_content,
media_type="text/csv; charset=utf-8-sig",
headers={
"Content-Disposition": f"attachment; filename*=UTF-8''{filename}"
}
)
@router.get("/snmp-devices/csv", summary="导出SNMP设备CSV")
def export_snmp_devices_csv(
db: Session = Depends(get_db),
current_user = Depends(require_permission("report:export"))
):
"""导出SNMP设备CSV"""
csv_content, filename = ReportExportService.export_snmp_devices_csv(db)
return Response(
content=csv_content,
media_type="text/csv; charset=utf-8-sig",
headers={
"Content-Disposition": f"attachment; filename*=UTF-8''{filename}"
}
)
@router.get("/arp-table/csv", summary="导出ARP表CSV")
def export_arp_table_csv(
device_id: Optional[int] = None,
db: Session = Depends(get_db),
current_user = Depends(require_permission("report:export"))
):
"""导出ARP表CSV"""
csv_content, filename = ReportExportService.export_arp_table_csv(db, device_id=device_id)
return Response(
content=csv_content,
media_type="text/csv; charset=utf-8-sig",
headers={
"Content-Disposition": f"attachment; filename*=UTF-8''{filename}"
}
)
@router.get("/summary", summary="获取IPAM系统汇总报表")
def get_ipam_summary_report(
db: Session = Depends(get_db),
current_user = Depends(require_permission("report:view"))
):
"""获取IPAM系统汇总统计报表"""
summary = ReportExportService.get_ipam_summary(db)
return summary