readme
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
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
|
||||
Reference in New Issue
Block a user