allinssl/backend/app/api/monitor/monitor.go

233 lines
5.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package monitor
import (
"ALLinSSL/backend/internal/monitor"
"ALLinSSL/backend/public"
"ALLinSSL/static"
"github.com/gin-gonic/gin"
"net/http"
"strings"
)
func GetMonitorList(c *gin.Context) {
var form struct {
Search string `form:"search"`
Page int64 `form:"p"`
Limit int64 `form:"limit"`
}
err := c.Bind(&form)
if err != nil {
public.FailMsg(c, err.Error())
return
}
data, count, err := monitor.GetList(form.Search, form.Page, form.Limit)
if err != nil {
public.FailMsg(c, err.Error())
return
}
public.SuccessData(c, data, count)
return
}
func AddMonitor(c *gin.Context) {
var form struct {
Name string `form:"name"`
Target string `form:"target"`
MonitorType string `form:"monitor_type"`
ReportTypes string `form:"report_types"`
Cycle string `form:"cycle"`
RepeatSendGap string `form:"repeat_send_gap"`
Active string `form:"active"`
AdvanceDay string `form:"advance_day"`
}
err := c.Bind(&form)
if err != nil {
public.FailMsg(c, err.Error())
return
}
form.Name = strings.TrimSpace(form.Name)
form.Target = strings.TrimSpace(form.Target)
err = monitor.AddMonitor(form.Name, form.Target, form.MonitorType, form.ReportTypes, form.Cycle, form.RepeatSendGap, form.Active, form.AdvanceDay)
if err != nil {
public.FailMsg(c, err.Error())
return
}
public.SuccessMsg(c, "添加成功")
return
}
func UpdMonitor(c *gin.Context) {
var form struct {
ID string `form:"id"`
Target string `form:"target"`
Name string `form:"name"`
Cycle string `form:"cycle"`
ReportTypes string `form:"report_types"`
RepeatSendGap string `form:"repeat_send_gap"`
Active string `form:"active"`
AdvanceDay string `form:"advance_day"`
}
err := c.Bind(&form)
if err != nil {
public.FailMsg(c, err.Error())
return
}
form.ID = strings.TrimSpace(form.ID)
form.Target = strings.TrimSpace(form.Target)
form.Name = strings.TrimSpace(form.Name)
form.ReportTypes = strings.TrimSpace(form.ReportTypes)
err = monitor.UpdMonitor(form.ID, form.Name, form.Target, form.ReportTypes, form.Cycle, form.RepeatSendGap, form.Active, form.AdvanceDay)
if err != nil {
public.FailMsg(c, err.Error())
return
}
public.SuccessMsg(c, "修改成功")
return
}
func DelMonitor(c *gin.Context) {
var form struct {
ID string `form:"id"`
}
err := c.Bind(&form)
if err != nil {
public.FailMsg(c, err.Error())
return
}
err = monitor.DelMonitor(form.ID)
if err != nil {
public.FailMsg(c, err.Error())
return
}
public.SuccessMsg(c, "删除成功")
return
}
func SetMonitor(c *gin.Context) {
var form struct {
ID string `form:"id"`
Active int `form:"active"`
}
err := c.Bind(&form)
if err != nil {
public.FailMsg(c, err.Error())
return
}
err = monitor.SetMonitor(form.ID, form.Active)
if err != nil {
public.FailMsg(c, err.Error())
return
}
public.SuccessMsg(c, "操作成功")
return
}
func GetMonitorInfo(c *gin.Context) {
var form struct {
ID string `form:"id"`
}
err := c.Bind(&form)
if err != nil {
public.FailMsg(c, err.Error())
return
}
form.ID = strings.TrimSpace(form.ID)
data, err := monitor.GetInfo(form.ID)
if err != nil {
public.FailMsg(c, err.Error())
return
}
public.SuccessData(c, data, 0)
return
}
func GetErrRecord(c *gin.Context) {
var form struct {
ID int64 `form:"id"`
Page int64 `form:"p"`
Limit int64 `form:"limit"`
}
err := c.Bind(&form)
if err != nil {
public.FailMsg(c, err.Error())
return
}
data, count, err := monitor.GetErrRecord(form.ID, form.Page, form.Limit)
if err != nil {
public.FailMsg(c, err.Error())
return
}
public.SuccessData(c, data, count)
return
}
func FileAddMonitor(c *gin.Context) {
file, err := c.FormFile("file")
if err != nil {
public.FailMsg(c, "上传文件失败: "+err.Error())
return
}
if file.Size > 10*1024*1024 { // 限制文件大小为10MB
public.FailMsg(c, "上传文件过大最大限制10MB")
return
}
data, err := monitor.ParseMonitorFile(file)
if err != nil {
public.FailMsg(c, "文件解析失败: "+err.Error())
return
}
if len(data) == 0 {
public.FailMsg(c, "文件中没有有效的监控数据")
return
}
err = monitor.MultiAddMonitor(data)
if err != nil {
public.FailMsg(c, "文件导入失败: "+err.Error())
return
}
public.SuccessMsg(c, "文件导入成功")
return
}
func GetTemplate(c *gin.Context) {
t := c.Query("type")
if t == "" {
c.String(http.StatusBadRequest, "参数 type 不能为空")
return
}
fileMap := map[string]string{
"txt": "monitor_templates/template.txt",
"csv": "monitor_templates/template.csv",
"json": "monitor_templates/template.json",
"xlsx": "monitor_templates/template.xlsx",
}
filePath, ok := fileMap[strings.ToLower(t)]
if !ok {
c.String(http.StatusBadRequest, "不支持的类型")
return
}
data, err := static.MonitorTemplatesFS.ReadFile(filePath)
if err != nil {
c.String(http.StatusInternalServerError, "模板文件读取失败")
return
}
// 设置 Content-Type
contentTypes := map[string]string{
"txt": "text/plain",
"csv": "text/csv",
"json": "application/json",
"xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"xls": "application/vnd.ms-excel",
}
c.Header("Content-Type", contentTypes[t])
c.Header("Content-Disposition", "attachment; filename=template."+t)
c.Data(http.StatusOK, contentTypes[t], data)
}