mirror of
https://github.com/nezhahq/nezha.git
synced 2025-02-02 01:28:13 -05:00
✨ feat: ip change notification close #31
This commit is contained in:
parent
c4f6837def
commit
0ce8017875
@ -166,6 +166,7 @@ func receiveCommand(hc pb.NezhaService_HeartbeatClient) error {
|
||||
}
|
||||
|
||||
func reportState() {
|
||||
var lastReportHostInfo time.Time
|
||||
var err error
|
||||
defer log.Printf("reportState exit %v => %v", time.Now(), err)
|
||||
for {
|
||||
@ -176,6 +177,10 @@ func reportState() {
|
||||
log.Printf("reportState error %v", err)
|
||||
time.Sleep(delayWhenError)
|
||||
}
|
||||
if lastReportHostInfo.Before(time.Now().Add(-10 * time.Minute)) {
|
||||
lastReportHostInfo = time.Now()
|
||||
client.Register(ctx, monitor.GetHost().PB())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -261,10 +261,11 @@ func (ma *memberAPI) logout(c *gin.Context) {
|
||||
}
|
||||
|
||||
type settingForm struct {
|
||||
Title string
|
||||
Admin string
|
||||
Theme string
|
||||
CustomCode string
|
||||
Title string
|
||||
Admin string
|
||||
Theme string
|
||||
CustomCode string
|
||||
EnableIPChangeNotification string
|
||||
}
|
||||
|
||||
func (ma *memberAPI) updateSetting(c *gin.Context) {
|
||||
@ -276,6 +277,7 @@ func (ma *memberAPI) updateSetting(c *gin.Context) {
|
||||
})
|
||||
return
|
||||
}
|
||||
dao.Conf.EnableIPChangeNotification = sf.EnableIPChangeNotification == "on"
|
||||
dao.Conf.Site.Brand = sf.Title
|
||||
dao.Conf.Site.Theme = sf.Theme
|
||||
dao.Conf.Site.CustomCode = sf.CustomCode
|
||||
|
@ -10,7 +10,6 @@ import (
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
// Config ..
|
||||
type Config struct {
|
||||
Debug bool
|
||||
Site struct {
|
||||
@ -24,7 +23,8 @@ type Config struct {
|
||||
ClientID string
|
||||
ClientSecret string
|
||||
}
|
||||
HTTPPort uint
|
||||
HTTPPort uint
|
||||
EnableIPChangeNotification bool
|
||||
|
||||
v *viper.Viper
|
||||
}
|
||||
|
@ -106,6 +106,8 @@ function addOrEditServer(server) {
|
||||
modal.find('.positive.button').html(server ? '修改<i class="edit icon"></i>' : '添加<i class="add icon"></i>')
|
||||
modal.find('input[name=id]').val(server ? server.ID : null)
|
||||
modal.find('input[name=name]').val(server ? server.Name : null)
|
||||
modal.find('input[name=Tag]').val(server ? server.Tag : null)
|
||||
modal.find('input[name=DisplayIndex]').val(server ? server.DisplayIndex : null)
|
||||
if (server) {
|
||||
modal.find('.secret.field').attr('style', '')
|
||||
modal.find('input[name=secret]').val(server.Secret)
|
||||
|
@ -9,7 +9,7 @@
|
||||
<script src="https://cdn.jsdelivr.net/npm/semantic-ui@2.4.1/dist/semantic.min.js"></script>
|
||||
<script src="/static/semantic-ui-alerts.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.min.js"></script>
|
||||
<script src="/static/main.js?v202101082103"></script>
|
||||
<script src="/static/main.js?v202101132218"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
@ -22,6 +22,12 @@
|
||||
<label>自定义代码(style、script 都可以)</label>
|
||||
<textarea name="CustomCode">{{.Conf.Site.CustomCode}}</textarea>
|
||||
</div>
|
||||
<div class="field">
|
||||
<div class="ui nf-ssl checkbox">
|
||||
<input name="EnableIPChangeNotification" type="checkbox" tabindex="0" class="hidden">
|
||||
<label>开启 IP 变更提醒</label>
|
||||
</div>
|
||||
</div>
|
||||
<button class="ui button" type="submit">保存</button>
|
||||
</form>
|
||||
</div>
|
||||
@ -40,5 +46,6 @@
|
||||
})
|
||||
return false;
|
||||
})
|
||||
$('.checkbox').checkbox()
|
||||
</script>
|
||||
{{end}}
|
@ -158,7 +158,7 @@ func checkStatus() {
|
||||
}
|
||||
if flag {
|
||||
message := fmt.Sprintf("报警规则:%s,服务器:%s(%s),%s,逮到咯,快去看看!", alert.Name, server.Name, server.Host.IP, desc)
|
||||
go sendNotification(message)
|
||||
go SendNotification(message)
|
||||
}
|
||||
}
|
||||
// 清理旧数据
|
||||
@ -169,7 +169,7 @@ func checkStatus() {
|
||||
}
|
||||
}
|
||||
|
||||
func sendNotification(desc string) {
|
||||
func SendNotification(desc string) {
|
||||
notificationsLock.RLock()
|
||||
defer notificationsLock.RUnlock()
|
||||
for i := 0; i < len(notifications); i++ {
|
||||
|
@ -2,11 +2,13 @@ package rpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/naiba/nezha/model"
|
||||
pb "github.com/naiba/nezha/proto"
|
||||
"github.com/naiba/nezha/service/alertmanager"
|
||||
"github.com/naiba/nezha/service/dao"
|
||||
)
|
||||
|
||||
@ -60,6 +62,14 @@ func (s *NezhaHandler) Register(c context.Context, r *pb.Host) (*pb.Receipt, err
|
||||
host := model.PB2Host(r)
|
||||
dao.ServerLock.RLock()
|
||||
defer dao.ServerLock.RUnlock()
|
||||
if dao.ServerList[clientID].Host != nil &&
|
||||
dao.ServerList[clientID].Host.IP != "" &&
|
||||
host.IP != "" &&
|
||||
dao.ServerList[clientID].Host.IP != host.IP {
|
||||
alertmanager.SendNotification(fmt.Sprintf(
|
||||
"服务器:%s IP变更提醒,旧IP:%s,新IP:%s。",
|
||||
dao.ServerList[clientID].Name, dao.ServerList[clientID].Host.IP, host.IP))
|
||||
}
|
||||
dao.ServerList[clientID].Host = &host
|
||||
return &pb.Receipt{Proced: true}, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user