116 lines
3.5 KiB
Python
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
|