diff --git a/agent/app/dto/setting.go b/agent/app/dto/setting.go index d9d015f3d..50591c407 100644 --- a/agent/app/dto/setting.go +++ b/agent/app/dto/setting.go @@ -1,7 +1,6 @@ package dto type SettingInfo struct { - SystemIP string `json:"systemIP"` DockerSockPath string `json:"dockerSockPath"` SystemVersion string `json:"systemVersion"` diff --git a/agent/app/repo/monitor.go b/agent/app/repo/monitor.go index bae119552..5cdca6769 100644 --- a/agent/app/repo/monitor.go +++ b/agent/app/repo/monitor.go @@ -28,7 +28,7 @@ func NewIMonitorRepo() IMonitorRepo { func (u *MonitorRepo) GetBase(opts ...DBOption) ([]model.MonitorBase, error) { var data []model.MonitorBase - db := global.DB + db := global.MonitorDB for _, opt := range opts { db = opt(db) } @@ -37,7 +37,7 @@ func (u *MonitorRepo) GetBase(opts ...DBOption) ([]model.MonitorBase, error) { } func (u *MonitorRepo) GetIO(opts ...DBOption) ([]model.MonitorIO, error) { var data []model.MonitorIO - db := global.DB + db := global.MonitorDB for _, opt := range opts { db = opt(db) } @@ -46,7 +46,7 @@ func (u *MonitorRepo) GetIO(opts ...DBOption) ([]model.MonitorIO, error) { } func (u *MonitorRepo) GetNetwork(opts ...DBOption) ([]model.MonitorNetwork, error) { var data []model.MonitorNetwork - db := global.DB + db := global.MonitorDB for _, opt := range opts { db = opt(db) } diff --git a/agent/app/service/monitor.go b/agent/app/service/monitor.go index 750c9a7d3..dbf820c4c 100644 --- a/agent/app/service/monitor.go +++ b/agent/app/service/monitor.go @@ -9,6 +9,7 @@ import ( "github.com/1Panel-dev/1Panel/agent/app/repo" "github.com/1Panel-dev/1Panel/agent/buserr" + "github.com/1Panel-dev/1Panel/agent/constant" "github.com/1Panel-dev/1Panel/agent/app/dto" "github.com/1Panel-dev/1Panel/agent/app/model" @@ -82,7 +83,7 @@ func (m *MonitorService) LoadMonitorData(req dto.MonitorSearch) ([]dto.MonitorDa data = append(data, itemData) } if req.Param == "all" || req.Param == "network" { - bases, err := monitorRepo.GetIO(repo.WithByName(req.Info), repo.WithByCreatedAt(req.StartTime, req.EndTime)) + bases, err := monitorRepo.GetNetwork(repo.WithByName(req.Info), repo.WithByCreatedAt(req.StartTime, req.EndTime)) if err != nil { return nil, err } @@ -119,6 +120,33 @@ func (m *MonitorService) LoadSetting() (*dto.MonitorSetting, error) { } func (m *MonitorService) UpdateSetting(key, value string) error { + switch key { + case "MonitorStatus": + if value == constant.StatusEnable && global.MonitorCronID == 0 { + interval, err := settingRepo.Get(settingRepo.WithByKey("MonitorInterval")) + if err != nil { + return err + } + if err := StartMonitor(false, interval.Value); err != nil { + return err + } + } + if value == constant.StatusDisable && global.MonitorCronID != 0 { + monitorCancel() + global.Cron.Remove(cron.EntryID(global.MonitorCronID)) + global.MonitorCronID = 0 + } + case "MonitorInterval": + status, err := settingRepo.Get(settingRepo.WithByKey("MonitorStatus")) + if err != nil { + return err + } + if status.Value == constant.StatusEnable && global.MonitorCronID != 0 { + if err := StartMonitor(true, value); err != nil { + return err + } + } + } return settingRepo.Update(key, value) } diff --git a/agent/app/service/snapshot_create.go b/agent/app/service/snapshot_create.go index 7881736ee..ec88443e0 100644 --- a/agent/app/service/snapshot_create.go +++ b/agent/app/service/snapshot_create.go @@ -247,7 +247,6 @@ func loadDbConn(snap *snapHelper, targetDir string, req dto.SnapshotCreate) erro } } - _ = snap.snapAgentDB.Model(&model.Setting{}).Where("key = ?", "SystemIP").Updates(map[string]interface{}{"value": ""}).Error _ = snap.snapAgentDB.Where("id = ?", snap.SnapID).Delete(&model.Snapshot{}).Error return nil diff --git a/agent/cron/cron.go b/agent/cron/cron.go index c0d8eaca8..70ed24d0b 100644 --- a/agent/cron/cron.go +++ b/agent/cron/cron.go @@ -28,7 +28,7 @@ func Run() { if err := global.DB.Where("key = ?", "MonitorStatus").Find(&status).Error; err != nil { global.LOG.Errorf("load monitor status from db failed, err: %v", err) } - if status.Value == "enable" { + if status.Value == "Enable" { if err := global.DB.Where("key = ?", "MonitorInterval").Find(&interval).Error; err != nil { global.LOG.Errorf("load monitor interval from db failed, err: %v", err) } diff --git a/agent/init/migration/migrate.go b/agent/init/migration/migrate.go index 142da1dbf..e48707a16 100644 --- a/agent/init/migration/migrate.go +++ b/agent/init/migration/migrate.go @@ -25,6 +25,7 @@ func InitAgentDB() { migrations.UpdateAppTag, migrations.UpdateApp, migrations.AddOllamaModel, + migrations.UpdateSettingStatus, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/agent/init/migration/migrations/init.go b/agent/init/migration/migrations/init.go index 553743913..191f2de86 100644 --- a/agent/init/migration/migrations/init.go +++ b/agent/init/migration/migrations/init.go @@ -104,9 +104,6 @@ var InitSetting = &gormigrate.Migration{ if err := tx.Create(&model.Setting{Key: "EncryptKey", Value: global.CONF.Base.EncryptKey}).Error; err != nil { return err } - if err := tx.Create(&model.Setting{Key: "SystemIP", Value: ""}).Error; err != nil { - return err - } if err := tx.Create(&model.Setting{Key: "DockerSockPath", Value: "unix:///var/run/docker.sock"}).Error; err != nil { return err } @@ -275,3 +272,16 @@ var AddOllamaModel = &gormigrate.Migration{ return nil }, } + +var UpdateSettingStatus = &gormigrate.Migration{ + ID: "20250227-update-setting-status", + Migrate: func(tx *gorm.DB) error { + if err := tx.Model(model.Setting{}).Where("value = ?", "enable").Update("value", constant.StatusEnable).Error; err != nil { + return err + } + if err := tx.Model(model.Setting{}).Where("value = ?", "disable").Update("value", constant.StatusDisable).Error; err != nil { + return err + } + return nil + }, +} diff --git a/core/app/dto/setting.go b/core/app/dto/setting.go index 9c42a762d..f6bb03e3c 100644 --- a/core/app/dto/setting.go +++ b/core/app/dto/setting.go @@ -15,6 +15,7 @@ type SettingInfo struct { Theme string `json:"theme"` MenuTabs string `json:"menuTabs"` Language string `json:"language"` + SystemIP string `json:"systemIP"` ServerPort string `json:"serverPort"` SSL string `json:"ssl"` diff --git a/core/init/migration/migrate.go b/core/init/migration/migrate.go index f2c851cc2..0b6151fed 100644 --- a/core/init/migration/migrate.go +++ b/core/init/migration/migrate.go @@ -22,6 +22,7 @@ func Init() { migrations.RemoveLocalBackup, migrations.AddMFAInterval, migrations.UpdateXpackHideMemu, + migrations.AddSystemIP, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/core/init/migration/migrations/init.go b/core/init/migration/migrations/init.go index 51eb277b9..e6f0502a1 100644 --- a/core/init/migration/migrations/init.go +++ b/core/init/migration/migrations/init.go @@ -318,3 +318,13 @@ var UpdateXpackHideMemu = &gormigrate.Migration{ return nil }, } + +var AddSystemIP = &gormigrate.Migration{ + ID: "20250227-add-system-ip", + Migrate: func(tx *gorm.DB) error { + if err := tx.Create(&model.Setting{Key: "SystemIP", Value: ""}).Error; err != nil { + return err + } + return nil + }, +} diff --git a/frontend/src/views/ai/model/conn/index.vue b/frontend/src/views/ai/model/conn/index.vue index 6b413bab0..5d1af785d 100644 --- a/frontend/src/views/ai/model/conn/index.vue +++ b/frontend/src/views/ai/model/conn/index.vue @@ -70,6 +70,8 @@ import i18n from '@/lang'; import { ElForm } from 'element-plus'; import { getSettingInfo } from '@/api/modules/setting'; import { getBindDomain } from '@/api/modules/ai'; +import { GlobalStore } from '@/store'; +const globalStore = GlobalStore(); const loading = ref(false); @@ -104,6 +106,10 @@ const handleClose = () => { }; const loadSystemIP = async () => { + if (globalStore.currentNode !== 'local') { + form.systemIP = globalStore.currentNode || i18n.global.t('database.localIP'); + return; + } const res = await getSettingInfo(); form.systemIP = res.data.systemIP || i18n.global.t('database.localIP'); }; diff --git a/frontend/src/views/database/mysql/conn/index.vue b/frontend/src/views/database/mysql/conn/index.vue index e3912f460..5f107cebb 100644 --- a/frontend/src/views/database/mysql/conn/index.vue +++ b/frontend/src/views/database/mysql/conn/index.vue @@ -113,6 +113,8 @@ import { getAppConnInfo } from '@/api/modules/app'; import { MsgSuccess } from '@/utils/message'; import { getRandomStr } from '@/utils/util'; import { getSettingInfo } from '@/api/modules/setting'; +import { GlobalStore } from '@/store'; +const globalStore = GlobalStore(); const loading = ref(false); @@ -179,6 +181,10 @@ const loadAccess = async () => { }; const loadSystemIP = async () => { + if (globalStore.currentNode !== 'local') { + form.systemIP = globalStore.currentNode || i18n.global.t('database.localIP'); + return; + } const res = await getSettingInfo(); form.systemIP = res.data.systemIP || i18n.global.t('database.localIP'); }; diff --git a/frontend/src/views/database/postgresql/conn/index.vue b/frontend/src/views/database/postgresql/conn/index.vue index 611e629af..9d47752de 100644 --- a/frontend/src/views/database/postgresql/conn/index.vue +++ b/frontend/src/views/database/postgresql/conn/index.vue @@ -115,6 +115,8 @@ import { getAppConnInfo } from '@/api/modules/app'; import { MsgSuccess } from '@/utils/message'; import { getRandomStr } from '@/utils/util'; import { getSettingInfo } from '@/api/modules/setting'; +import { GlobalStore } from '@/store'; +const globalStore = GlobalStore(); const loading = ref(false); @@ -179,6 +181,10 @@ const loadAccess = async () => { }; const loadSystemIP = async () => { + if (globalStore.currentNode !== 'local') { + form.systemIP = globalStore.currentNode || i18n.global.t('database.localIP'); + return; + } const res = await getSettingInfo(); form.systemIP = res.data.systemIP || i18n.global.t('database.localIP'); }; diff --git a/frontend/src/views/database/redis/conn/index.vue b/frontend/src/views/database/redis/conn/index.vue index 768374d23..ce85ef4a0 100644 --- a/frontend/src/views/database/redis/conn/index.vue +++ b/frontend/src/views/database/redis/conn/index.vue @@ -104,6 +104,8 @@ import { getAppConnInfo } from '@/api/modules/app'; import { MsgSuccess } from '@/utils/message'; import { getRandomStr } from '@/utils/util'; import { getSettingInfo } from '@/api/modules/setting'; +import { GlobalStore } from '@/store'; +const globalStore = GlobalStore(); const loading = ref(false); @@ -181,6 +183,10 @@ const loadPassword = async () => { }; const loadSystemIP = async () => { + if (globalStore.currentNode !== 'local') { + form.systemIP = globalStore.currentNode || i18n.global.t('database.localIP'); + return; + } const res = await getSettingInfo(); form.systemIP = res.data.systemIP || i18n.global.t('database.localIP'); }; diff --git a/frontend/src/views/home/app/index.vue b/frontend/src/views/home/app/index.vue index 363a6b0d5..1d4615fce 100644 --- a/frontend/src/views/home/app/index.vue +++ b/frontend/src/views/home/app/index.vue @@ -4,7 +4,7 @@