Skip to content

Commit

Permalink
🚸 IP 变更提醒增强
Browse files Browse the repository at this point in the history
  • Loading branch information
naiba committed Jun 22, 2021
1 parent d59acfa commit 365148e
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 22 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<div align="center">
<img width="500" style="max-width:100%" src="resource/static/brand.png" title="哪吒监控">
<br><br>
<img src="https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=Dash%20v0.8.2&logo=github&style=for-the-badge">&nbsp;<img src="https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github">&nbsp;<img src="https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge">&nbsp;<img src="https://img.shields.io/badge/Installer-v0.6.1-brightgreen?style=for-the-badge&logo=linux">
<img src="https://img.shields.io/github/workflow/status/naiba/nezha/Dashboard%20image?label=Dash%20v0.8.3&logo=github&style=for-the-badge">&nbsp;<img src="https://img.shields.io/github/v/release/naiba/nezha?color=brightgreen&label=Agent&style=for-the-badge&logo=github">&nbsp;<img src="https://img.shields.io/github/workflow/status/naiba/nezha/Agent%20release?label=Agent%20CI&logo=github&style=for-the-badge">&nbsp;<img src="https://img.shields.io/badge/Installer-v0.6.1-brightgreen?style=for-the-badge&logo=linux">
<br>
<br>
<p>:trollface: <b>哪吒监控</b> 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。</p>
Expand Down
2 changes: 2 additions & 0 deletions cmd/dashboard/controller/member_api.go
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,7 @@ type settingForm struct {
EnableIPChangeNotification string
IgnoredIPNotification string
Oauth2Type string
Cover uint8
}

func (ma *memberAPI) updateSetting(c *gin.Context) {
Expand All @@ -461,6 +462,7 @@ func (ma *memberAPI) updateSetting(c *gin.Context) {
return
}
dao.Conf.EnableIPChangeNotification = sf.EnableIPChangeNotification == "on"
dao.Conf.Cover = sf.Cover
dao.Conf.IgnoredIPNotification = sf.IgnoredIPNotification
dao.Conf.Site.Brand = sf.Title
dao.Conf.Site.Theme = sf.Theme
Expand Down
16 changes: 12 additions & 4 deletions model/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ const (
ConfigTypeGitee = "gitee"
)

const (
ConfigCoverAll = iota
ConfigCoverIgnoreAll
)

type Config struct {
Debug bool
Site struct {
Expand All @@ -35,10 +40,13 @@ type Config struct {
HTTPPort uint
GRPCPort uint
EnableIPChangeNotification bool
IgnoredIPNotification string // 忽略IP变更提醒的服务器列表

// IP变更提醒
Cover uint8 // 覆盖范围
IgnoredIPNotification string // 特定服务器

v *viper.Viper
IgnoredIPNotificationServerIDs map[uint64]struct{}
IgnoredIPNotificationServerIDs map[uint64]bool
}

func (c *Config) Read(path string) error {
Expand Down Expand Up @@ -70,12 +78,12 @@ func (c *Config) Read(path string) error {
}

func (c *Config) updateIgnoredIPNotificationID() {
c.IgnoredIPNotificationServerIDs = make(map[uint64]struct{})
c.IgnoredIPNotificationServerIDs = make(map[uint64]bool)
splitedIDs := strings.Split(c.IgnoredIPNotification, ",")
for i := 0; i < len(splitedIDs); i++ {
id, _ := strconv.ParseUint(splitedIDs[i], 10, 64)
if id > 0 {
c.IgnoredIPNotificationServerIDs[id] = struct{}{}
c.IgnoredIPNotificationServerIDs[id] = true
}
}
}
Expand Down
50 changes: 35 additions & 15 deletions resource/template/dashboard/setting.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@
<div class="field">
<label>登录类型</label>
<select name="Oauth2Type">
<option value="github"{{if eq .Conf.Oauth2.Type "github"}} selected="selected"{{end}}>GitHub</option>
<option value="gitee"{{if eq .Conf.Oauth2.Type "gitee"}} selected="selected"{{end}}>Gitee</option>
<option value="github" {{if eq .Conf.Oauth2.Type "github" }} selected="selected" {{end}}>GitHub
</option>
<option value="gitee" {{if eq .Conf.Oauth2.Type "gitee" }} selected="selected" {{end}}>Gitee
</option>
</select>
</div>
<div class="field">
Expand All @@ -22,9 +24,12 @@
<div class="field">
<label>前台主题</label>
<select name="Theme">
<option value="default"{{if eq .Conf.Site.Theme "default"}} selected="selected"{{end}}>默认主题</option>
<option value="daynight"{{if eq .Conf.Site.Theme "daynight"}} selected="selected"{{end}}>JackieSung DayNight</option>
<option value="hotaru"{{if eq .Conf.Site.Theme "hotaru"}} selected="selected"{{end}}>CokeMine Hotaru</option>
<option value="default" {{if eq .Conf.Site.Theme "default" }} selected="selected" {{end}}>默认主题
</option>
<option value="daynight" {{if eq .Conf.Site.Theme "daynight" }} selected="selected" {{end}}>
JackieSung DayNight</option>
<option value="hotaru" {{if eq .Conf.Site.Theme "hotaru" }} selected="selected" {{end}}>CokeMine
Hotaru</option>
</select>
</div>
<div class="field">
Expand All @@ -36,13 +41,26 @@
<input type="text" name="ViewPassword" placeholder="" value="{{.Conf.Site.ViewPassword}}">
</div>
<div class="field">
<label>IP 变更忽略</label>
<input type="text" name="IgnoredIPNotification" placeholder="服务器ID 以逗号隔开 1001,1002,1003" value="{{.Conf.IgnoredIPNotification}}">
<label>IP 变更提醒</label>
</div>
<div class="field">
<div class="ui nf-ssl checkbox">
<input name="EnableIPChangeNotification" type="checkbox" tabindex="0" class="hidden">
<label>开启 IP 变更提醒</label>
<div class="ui segment">
<div class="field">
<label>覆盖范围</label>
<select name="Cover" class="ui fluid dropdown">
<option value=0>覆盖所有,仅特定服务器不提醒</option>
<option value=1>忽略所有,仅提醒特定服务器</option>
</select>
</div>
<div class="field">
<label>特定服务器</label>
<input type="text" name="IgnoredIPNotification" placeholder="服务器ID 以逗号隔开 1001,1002,1003"
value="{{.Conf.IgnoredIPNotification}}">
</div>
<div class="field">
<div class="ui nf-ssl checkbox">
<input name="EnableIPChangeNotification" type="checkbox" tabindex="0" class="hidden">
<label>启用</label>
</div>
</div>
</div>
<button class="ui button" type="submit">保存</button>
Expand All @@ -64,7 +82,7 @@
} else {
$.suiAlert({
title: '',
description:resp.message,
description: resp.message,
type: 'error',
time: '3',
position: 'top-center',
Expand All @@ -73,7 +91,7 @@
}).error(err => {
$.suiAlert({
title: '',
description:err,
description: err,
type: 'error',
time: '3',
position: 'top-center',
Expand All @@ -82,8 +100,10 @@
return false;
})
$('.checkbox').checkbox()
{{if .Conf.EnableIPChangeNotification}}
$('#settingForm').find("select[name=Cover]")
.val({{.Conf.Cover}});
{{ if .Conf.EnableIPChangeNotification}}
$('.checkbox').checkbox('set checked')
{{end}}
{{ end }}
</script>
{{end}}
2 changes: 1 addition & 1 deletion service/dao/dao.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
pb "github.com/naiba/nezha/proto"
)

var Version = "v0.8.2" // !!记得修改 README 中的 badge 版本!!
var Version = "v0.8.3" // !!记得修改 README 中的 badge 版本!!

const (
SnapshotDelay = 3
Expand Down
3 changes: 2 additions & 1 deletion service/rpc/nezha.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ func (s *NezhaHandler) ReportSystemInfo(c context.Context, r *pb.Host) (*pb.Rece
dao.ServerLock.RLock()
defer dao.ServerLock.RUnlock()
if dao.Conf.EnableIPChangeNotification &&
dao.Conf.IgnoredIPNotificationServerIDs[clientID] != struct{}{} &&
((dao.Conf.Cover == model.ConfigCoverAll && !dao.Conf.IgnoredIPNotificationServerIDs[clientID]) ||
(dao.Conf.Cover == model.ConfigCoverIgnoreAll && dao.Conf.IgnoredIPNotificationServerIDs[clientID])) &&
dao.ServerList[clientID].Host != nil &&
dao.ServerList[clientID].Host.IP != "" &&
host.IP != "" &&
Expand Down

0 comments on commit 365148e

Please sign in to comment.