mirror of
https://github.com/acepanel/panel.git
synced 2026-02-05 04:37:17 +08:00
100 lines
2.5 KiB
Go
100 lines
2.5 KiB
Go
package commands
|
||
|
||
import (
|
||
"context"
|
||
|
||
"github.com/goravel/framework/contracts/console"
|
||
"github.com/goravel/framework/contracts/console/command"
|
||
"github.com/goravel/framework/facades"
|
||
"github.com/goravel/framework/support/carbon"
|
||
"github.com/goravel/framework/support/color"
|
||
"github.com/spf13/cast"
|
||
|
||
"github.com/TheTNB/panel/app/models"
|
||
"github.com/TheTNB/panel/internal/services"
|
||
"github.com/TheTNB/panel/pkg/tools"
|
||
"github.com/TheTNB/panel/types"
|
||
)
|
||
|
||
// Monitoring 系统监控
|
||
type Monitoring struct {
|
||
}
|
||
|
||
// Signature The name and signature of the console command.
|
||
func (receiver *Monitoring) Signature() string {
|
||
return "panel:monitoring"
|
||
}
|
||
|
||
// Description The console command description.
|
||
func (receiver *Monitoring) Description() string {
|
||
ctx := context.Background()
|
||
return facades.Lang(ctx).Get("commands.panel:monitoring.description")
|
||
}
|
||
|
||
// Extend The console command extend.
|
||
func (receiver *Monitoring) Extend() command.Extend {
|
||
return command.Extend{
|
||
Category: "panel",
|
||
}
|
||
}
|
||
|
||
// Handle Execute the console command.
|
||
func (receiver *Monitoring) Handle(console.Context) error {
|
||
if types.Status != types.StatusNormal {
|
||
return nil
|
||
}
|
||
|
||
// 将等待中的任务分发
|
||
// TODO 有bug,需要设计一个锁机制防止重复分发
|
||
//task := services.NewTaskImpl()
|
||
//_ = task.DispatchWaiting()
|
||
|
||
setting := services.NewSettingImpl()
|
||
monitor := setting.Get(models.SettingKeyMonitor)
|
||
if !cast.ToBool(monitor) {
|
||
return nil
|
||
}
|
||
|
||
info := tools.GetMonitoringInfo()
|
||
translate := facades.Lang(context.Background())
|
||
|
||
// 去除部分数据以减少数据库存储
|
||
info.Disk = nil
|
||
for _, cpu := range info.Cpus {
|
||
cpu.VendorID = ""
|
||
cpu.Family = ""
|
||
cpu.Model = ""
|
||
cpu.PhysicalID = ""
|
||
cpu.ModelName = ""
|
||
cpu.Flags = nil
|
||
}
|
||
|
||
if types.Status != types.StatusNormal {
|
||
return nil
|
||
}
|
||
err := facades.Orm().Query().Create(&models.Monitor{
|
||
Info: info,
|
||
})
|
||
if err != nil {
|
||
facades.Log().Tags("面板", "系统监控").With(map[string]any{
|
||
"error": err.Error(),
|
||
}).Infof("保存失败")
|
||
color.Red().Printfln(translate.Get("commands.panel:monitoring.fail")+": %s", err.Error())
|
||
return nil
|
||
}
|
||
|
||
// 删除过期数据
|
||
days := cast.ToInt(setting.Get(models.SettingKeyMonitorDays))
|
||
if days <= 0 || types.Status != types.StatusNormal {
|
||
return nil
|
||
}
|
||
if _, err = facades.Orm().Query().Where("created_at < ?", carbon.Now().SubDays(days).ToDateTimeString()).Delete(&models.Monitor{}); err != nil {
|
||
facades.Log().Tags("面板", "系统监控").With(map[string]any{
|
||
"error": err.Error(),
|
||
}).Infof("删除过期数据失败")
|
||
return nil
|
||
}
|
||
|
||
return nil
|
||
}
|