mirror of https://github.com/allinssl/allinssl
233 lines
5.3 KiB
Go
233 lines
5.3 KiB
Go
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)
|
||
}
|