Files
Message-Push-Nest/models/send_tasks_logs.go
T

182 lines
5.1 KiB
Go
Raw Normal View History

2023-12-30 17:40:20 +08:00
package models
import (
"fmt"
"message-nest/pkg/util"
)
type SendTasksLogs struct {
2024-01-22 14:17:33 +08:00
ID int `gorm:"primary_key" json:"id" `
TaskID string `json:"task_id" gorm:"type:varchar(12) comment '任务id';default:'';index:task_id"`
Log string `json:"log" gorm:"type:text comment '日志';"`
2024-01-25 11:38:45 +08:00
Status *int `json:"status" gorm:"type:int comment '状态';default:0;"`
2024-01-22 14:17:33 +08:00
CallerIp string `json:"caller_ip" gorm:"type:varchar(256) comment '发送者的ip';default:'';"`
2023-12-30 17:40:20 +08:00
2024-01-07 21:30:59 +08:00
CreatedOn util.Time `json:"created_on" gorm:"type:timestamp comment '创建时间';default:current_timestamp;"`
2024-01-20 13:21:38 +08:00
ModifiedOn util.Time `json:"modified_on" gorm:"type:timestamp comment '更新时间';"`
2023-12-30 17:40:20 +08:00
}
// Add 添加日志记录
func (log *SendTasksLogs) Add() error {
if err := db.Create(&log).Error; err != nil {
return err
}
return nil
}
// 日志列表的结果
type LogsResult struct {
ID int `json:"id"`
TaskID string `json:"task_id"`
Log string `json:"log"`
CreatedOn util.Time `json:"created_on"`
ModifiedOn util.Time `json:"modified_on"`
TaskName string `json:"task_name"`
Status int `json:"status"`
2024-01-22 14:17:33 +08:00
CallerIp string `json:"caller_ip"`
2023-12-30 17:40:20 +08:00
}
// GetSendLogs 获取所有日志记录
2024-01-25 15:08:00 +08:00
func GetSendLogs(pageNum int, pageSize int, name string, taskId string, maps map[string]interface{}) ([]LogsResult, error) {
2023-12-30 17:40:20 +08:00
var logs []LogsResult
2024-01-14 22:44:10 +08:00
logt := db.NewScope(SendTasksLogs{}).TableName()
taskt := db.NewScope(SendTasks{}).TableName()
2023-12-30 17:40:20 +08:00
query := db.
Table(logt).
Select(fmt.Sprintf("%s.*, %s.name as task_name", logt, taskt)).
2023-12-31 21:31:56 +08:00
Joins(fmt.Sprintf("LEFT JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
2023-12-30 17:40:20 +08:00
2024-01-25 15:08:00 +08:00
dayVal, ok := maps["day_created_on"]
if ok {
delete(maps, "day_created_on")
query = query.Where(fmt.Sprintf("DATE(%s.created_on) = ?", logt), dayVal)
}
query = query.Where(maps)
2023-12-30 17:40:20 +08:00
if name != "" {
query = query.Where(fmt.Sprintf("%s.name like ?", taskt), fmt.Sprintf("%%%s%%", name))
}
if taskId != "" {
2023-12-31 21:31:56 +08:00
query = query.Where(fmt.Sprintf("%s.task_id = ?", logt), taskId)
2023-12-30 17:40:20 +08:00
}
query = query.Order("created_on DESC")
if pageSize > 0 || pageNum > 0 {
query = query.Offset(pageNum).Limit(pageSize)
}
query.Scan(&logs)
return logs, nil
}
// GetSendLogsTotal 获取所有日志总数
2024-01-25 15:08:00 +08:00
func GetSendLogsTotal(name string, taskId string, maps map[string]interface{}) (int, error) {
2023-12-30 17:40:20 +08:00
var total int
2024-01-14 22:44:10 +08:00
logt := db.NewScope(SendTasksLogs{}).TableName()
taskt := db.NewScope(SendTasks{}).TableName()
2023-12-30 17:40:20 +08:00
query := db.
Table(logt).
2023-12-31 21:31:56 +08:00
Joins(fmt.Sprintf("LEFT JOIN %s ON %s.task_id = %s.id", taskt, logt, taskt))
2024-01-25 15:08:00 +08:00
dayVal, ok := maps["day_created_on"]
if ok {
delete(maps, "day_created_on")
query = query.Where(fmt.Sprintf("DATE(%s.created_on) = ?", logt), dayVal)
}
query = query.Where(maps)
2023-12-30 17:40:20 +08:00
if name != "" {
query = query.Where(fmt.Sprintf("%s.name like ?", taskt), fmt.Sprintf("%%%s%%", name))
}
if taskId != "" {
2023-12-31 21:31:56 +08:00
query = query.Where(fmt.Sprintf("%s.task_id = ?", logt), taskId)
2023-12-30 17:40:20 +08:00
}
query.Count(&total)
return total, nil
}
2023-12-31 21:31:56 +08:00
// GetSendLogsTotal 获取所有日志总数
2024-01-03 20:41:43 +08:00
func DeleteOutDateLogs(keepNum int) (int, error) {
var affectedRows int
2024-01-14 22:44:10 +08:00
logt := db.NewScope(SendTasksLogs{}).TableName()
2023-12-31 21:31:56 +08:00
sql := fmt.Sprintf(`DELETE FROM %s
2024-01-03 20:41:43 +08:00
WHERE id NOT IN (
SELECT id FROM (
SELECT id
FROM %s
ORDER BY created_on DESC
LIMIT %d
) tmp
);`, logt, logt, keepNum)
2023-12-31 21:31:56 +08:00
result := db.Exec(sql)
if result.Error != nil {
2024-01-03 20:41:43 +08:00
return affectedRows, result.Error
2023-12-31 21:31:56 +08:00
}
2024-01-03 20:41:43 +08:00
affectedRows = int(result.RowsAffected)
return affectedRows, nil
2023-12-31 21:31:56 +08:00
}
2024-01-24 21:33:51 +08:00
type StatisticData struct {
TodaySuccNum int `json:"today_succ_num"`
TodayFailedNum int `json:"today_failed_num"`
TodayTotalNum int `json:"today_total_num"`
LatestSendData []LatestSendData `json:"latest_send_data"`
WayCateData []WayCateData `json:"way_cate_data"`
}
type LatestSendData struct {
Day string `json:"day"`
Num int `json:"num"`
}
type WayCateData struct {
WayName string `json:"way_name"`
CountNum int `json:"count_num"`
}
// GetStatisticData 获取统计数据
func GetStatisticData() (StatisticData, error) {
var statistic StatisticData
var latestData []LatestSendData
var wayCateData []WayCateData
logt := db.NewScope(SendTasksLogs{}).TableName()
inst := db.NewScope(SendTasksIns{}).TableName()
wayst := db.NewScope(SendWays{}).TableName()
// 今日统计数据
query := db.
Table(logt).
Select(`
COUNT(*) AS today_total_num,
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS today_succ_num,
2024-01-25 10:52:36 +08:00
SUM(CASE WHEN status != 1 or status is null THEN 1 ELSE 0 END) AS today_failed_num`).
2024-01-24 21:33:51 +08:00
Where("DATE(created_on) = CURDATE()")
query.First(&statistic)
// 最近30天数据
days := 30
queryData := db.
Table(logt).
Select(`
CAST(DATE(created_on) AS CHAR) AS day,
COUNT(*) AS num`).
Where(" created_on >= CURDATE() - INTERVAL ? DAY", days).
Group("DATE(created_on)").
Order("created_on")
queryData.Scan(&latestData)
// 消息实例分类数目
db.
Table(inst).
Select(fmt.Sprintf("%s.name as way_name, count(%s.id) as count_num", wayst, wayst)).
Joins(fmt.Sprintf("JOIN %s ON %s.way_id = %s.id", wayst, inst, wayst)).
Group(fmt.Sprintf("%s.id", wayst)).
Scan(&wayCateData)
statistic.LatestSendData = latestData
statistic.WayCateData = wayCateData
return statistic, nil
}