From c93e03e95195f2e2a35f3df5ac8675bb0b9cd038 Mon Sep 17 00:00:00 2001 From: dushixiang Date: Mon, 18 Jan 2021 00:04:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B5=84=E4=BA=A7=E5=AD=98?= =?UTF-8?q?=E6=B4=BB=E7=8A=B6=E6=80=81=E5=AE=9A=E6=97=B6=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E4=B8=8E=E5=88=9B=E5=BB=BA=E6=97=B6=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/api/asset.go | 6 ++++++ pkg/handle/runner.go | 12 +++++++++++- pkg/model/asset.go | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pkg/api/asset.go b/pkg/api/asset.go index e56e9e9..5436c3a 100644 --- a/pkg/api/asset.go +++ b/pkg/api/asset.go @@ -24,6 +24,12 @@ func AssetCreateEndpoint(c echo.Context) error { return err } + // 创建后自动检测资产是否存活 + go func() { + active := utils.Tcping(item.IP, item.Port) + model.UpdateAssetActiveById(active, item.ID) + }() + return Success(c, item) } diff --git a/pkg/handle/runner.go b/pkg/handle/runner.go index 66fb5cd..2307b37 100644 --- a/pkg/handle/runner.go +++ b/pkg/handle/runner.go @@ -17,8 +17,8 @@ func RunTicker() { c := cron.New(cron.WithSeconds()) //精确到秒 - // 定时任务,每隔一小时删除一次未使用的会话信息 _, _ = c.AddFunc("0 0 0/1 * * ?", func() { + // 定时任务,每隔一小时删除一次未使用的会话信息 sessions, _ := model.FindSessionByStatusIn([]string{model.NoConnect, model.Connecting}) if sessions != nil && len(sessions) > 0 { now := time.Now() @@ -30,6 +30,16 @@ func RunTicker() { } } } + // 每隔一小时检测一次资产是否存活 + assets, _ := model.FindAllAsset() + if assets != nil && len(assets) > 0 { + for i := range assets { + asset := assets[i] + active := utils.Tcping(asset.IP, asset.Port) + model.UpdateAssetActiveById(active, asset.ID) + logrus.Infof("资产「%v」ID「%v」存活状态检测完成,存活「%v」。", asset.Name, asset.ID, active) + } + } }) // 定时任务,每隔一分钟校验一次运行中的会话信息 diff --git a/pkg/model/asset.go b/pkg/model/asset.go index 5be697d..71fc9bb 100644 --- a/pkg/model/asset.go +++ b/pkg/model/asset.go @@ -43,6 +43,11 @@ func (r *Asset) TableName() string { return "assets" } +func FindAllAsset() (o []Asset, err error) { + err = global.DB.Find(&o).Error + return +} + func FindAssetByConditions(protocol string, account User) (o []Asset, err error) { db := global.DB.Table("assets").Select("assets.id,assets.name,assets.ip,assets.port,assets.protocol,assets.active,assets.owner,assets.created, users.nickname as owner_name,COUNT(resources.user_id) as sharer_count").Joins("left join users on assets.owner = users.id").Joins("left join resources on assets.id = resources.resource_id").Group("assets.id")