153 lines
3.6 KiB
Go
153 lines
3.6 KiB
Go
package task
|
||
|
||
import (
|
||
"context"
|
||
"strconv"
|
||
"time"
|
||
|
||
"next-terminal/server/constant"
|
||
"next-terminal/server/log"
|
||
"next-terminal/server/repository"
|
||
)
|
||
|
||
type Ticker struct {
|
||
}
|
||
|
||
func NewTicker() *Ticker {
|
||
return &Ticker{}
|
||
}
|
||
func init() {
|
||
ticker := NewTicker()
|
||
ticker.SetupTicker()
|
||
}
|
||
|
||
func (t *Ticker) SetupTicker() {
|
||
|
||
// 每隔一小时删除一次未使用的会话信息
|
||
unUsedSessionTicker := time.NewTicker(time.Minute * 60)
|
||
go func() {
|
||
for range unUsedSessionTicker.C {
|
||
t.deleteUnUsedSession()
|
||
}
|
||
}()
|
||
|
||
// 每隔6小时删除超过时长限制的会话
|
||
timeoutSessionTicker := time.NewTicker(time.Hour * 6)
|
||
go func() {
|
||
for range timeoutSessionTicker.C {
|
||
deleteOutTimeSession()
|
||
deleteOutTimeLoginLog()
|
||
deleteOutTimeJobLog()
|
||
}
|
||
}()
|
||
}
|
||
|
||
func (t *Ticker) deleteUnUsedSession() {
|
||
sessions, err := repository.SessionRepository.FindByStatusIn(context.TODO(), []string{constant.NoConnect, constant.Connecting})
|
||
if err != nil {
|
||
log.Errorf("查询会话列表失败: %v", err.Error())
|
||
return
|
||
}
|
||
if len(sessions) > 0 {
|
||
now := time.Now()
|
||
for i := range sessions {
|
||
if now.Sub(sessions[i].ConnectedTime.Time) > time.Hour*1 {
|
||
err := repository.SessionRepository.DeleteById(context.TODO(), sessions[i].ID)
|
||
s := sessions[i].Username + "@" + sessions[i].IP + ":" + strconv.Itoa(sessions[i].Port)
|
||
if err != nil {
|
||
log.Errorf("会话「%v」ID「%v」超过1小时未打开,删除失败: %v", s, sessions[i].ID, err.Error())
|
||
} else {
|
||
log.Infof("会话「%v」ID「%v」超过1小时未打开,已删除。", s, sessions[i].ID)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
func deleteOutTimeSession() {
|
||
property, err := repository.PropertyRepository.FindByName(context.TODO(), "session-saved-limit")
|
||
if err != nil {
|
||
return
|
||
}
|
||
if property.Value == "" || property.Value == "-" {
|
||
return
|
||
}
|
||
limit, err := strconv.Atoi(property.Value)
|
||
if err != nil {
|
||
return
|
||
}
|
||
sessions, err := repository.SessionRepository.FindOutTimeSessions(context.TODO(), limit)
|
||
if err != nil {
|
||
return
|
||
}
|
||
|
||
if len(sessions) > 0 {
|
||
var ids []string
|
||
for i := range sessions {
|
||
ids = append(ids, sessions[i].ID)
|
||
}
|
||
err := repository.SessionRepository.DeleteByIds(context.TODO(), ids)
|
||
if err != nil {
|
||
log.Errorf("删除离线会话失败 %v", err)
|
||
}
|
||
}
|
||
}
|
||
|
||
func deleteOutTimeLoginLog() {
|
||
property, err := repository.PropertyRepository.FindByName(context.TODO(), "login-log-saved-limit")
|
||
if err != nil {
|
||
return
|
||
}
|
||
if property.Value == "" || property.Value == "-" {
|
||
return
|
||
}
|
||
limit, err := strconv.Atoi(property.Value)
|
||
if err != nil {
|
||
log.Errorf("获取删除登录日志保留时常失败 %v", err)
|
||
return
|
||
}
|
||
|
||
loginLogs, err := repository.LoginLogRepository.FindOutTimeLog(context.TODO(), limit)
|
||
if err != nil {
|
||
log.Errorf("获取登录日志失败 %v", err)
|
||
return
|
||
}
|
||
|
||
if len(loginLogs) > 0 {
|
||
for i := range loginLogs {
|
||
err := repository.LoginLogRepository.DeleteById(context.TODO(), loginLogs[i].ID)
|
||
if err != nil {
|
||
log.Errorf("删除登录日志失败 %v", err)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
func deleteOutTimeJobLog() {
|
||
property, err := repository.PropertyRepository.FindByName(context.TODO(), "cron-log-saved-limit")
|
||
if err != nil {
|
||
return
|
||
}
|
||
if property.Value == "" || property.Value == "-" {
|
||
return
|
||
}
|
||
limit, err := strconv.Atoi(property.Value)
|
||
if err != nil {
|
||
return
|
||
}
|
||
|
||
jobLogs, err := repository.JobLogRepository.FindOutTimeLog(context.TODO(), limit)
|
||
if err != nil {
|
||
return
|
||
}
|
||
|
||
if len(jobLogs) > 0 {
|
||
for i := range jobLogs {
|
||
err := repository.JobLogRepository.DeleteById(context.TODO(), jobLogs[i].ID)
|
||
if err != nil {
|
||
log.Errorf("删除计划日志失败 %v", err)
|
||
}
|
||
}
|
||
}
|
||
}
|