From 4b1af369e35bfc84d58d0e4e0533208f0074c63d Mon Sep 17 00:00:00 2001 From: UUBulb <35923940+uubulb@users.noreply.github.com> Date: Sun, 19 Jan 2025 21:22:00 +0800 Subject: [PATCH] small improvements (#958) * small improvements * fix: return empty iterator if no json present * use time.Tick * changes --- model/alertrule.go | 4 ++-- model/notification.go | 4 ++-- pkg/ddns/ddns.go | 6 +++--- pkg/ddns/webhook/webhook.go | 4 ++-- pkg/utils/gjson.go | 23 ++++++++++++----------- service/rpc/nezha.go | 2 +- service/singleton/alertsentinel.go | 9 ++++----- service/singleton/notification.go | 8 ++++---- service/singleton/servicesentinel.go | 6 +++--- service/singleton/singleton.go | 2 +- 10 files changed, 34 insertions(+), 34 deletions(-) diff --git a/model/alertrule.go b/model/alertrule.go index c2ac896..9b4fca0 100644 --- a/model/alertrule.go +++ b/model/alertrule.go @@ -102,7 +102,7 @@ func (r *AlertRule) Check(points [][]bool) (maxDuration int, passed bool) { hasPassedRule = true continue } - total, fail := 0.0, 0.0 + total, fail := 0, 0 for timeTick := len(points) - duration; timeTick < len(points); timeTick++ { total++ if !points[timeTick][ruleId] { @@ -110,7 +110,7 @@ func (r *AlertRule) Check(points [][]bool) (maxDuration int, passed bool) { } } // 当70%以上的采样点未通过规则判断时 才认为当前检查未通过 - if fail/total <= 0.7 { + if fail*100/total <= 70 { hasPassedRule = true } } diff --git a/model/notification.go b/model/notification.go index c6e1678..514d4d8 100644 --- a/model/notification.go +++ b/model/notification.go @@ -70,7 +70,7 @@ func (ns *NotificationServerBundle) reqBody(message string) (string, error) { return string(msgBytes)[1 : len(msgBytes)-1] }), nil case NotificationRequestTypeForm: - data, err := utils.GjsonParseStringMap(n.RequestBody) + data, err := utils.GjsonIter(n.RequestBody) if err != nil { return "", err } @@ -98,7 +98,7 @@ func (n *Notification) setRequestHeader(req *http.Request) error { if n.RequestHeader == "" { return nil } - m, err := utils.GjsonParseStringMap(n.RequestHeader) + m, err := utils.GjsonIter(n.RequestHeader) if err != nil { return err } diff --git a/pkg/ddns/ddns.go b/pkg/ddns/ddns.go index 78f0184..8c600e6 100644 --- a/pkg/ddns/ddns.go +++ b/pkg/ddns/ddns.go @@ -48,11 +48,11 @@ func (provider *Provider) UpdateDomain(ctx context.Context) { for _, domain := range provider.DDNSProfile.Domains { for retries := 0; retries < int(provider.DDNSProfile.MaxRetries); retries++ { provider.domain = domain - log.Printf("NEZHA>> 正在尝试更新域名(%s)DDNS(%d/%d)", provider.domain, retries+1, provider.DDNSProfile.MaxRetries) + log.Printf("NEZHA>> Updating DNS Record of domain %s: %d/%d", provider.domain, retries+1, provider.DDNSProfile.MaxRetries) if err := provider.updateDomain(); err != nil { - log.Printf("NEZHA>> 尝试更新域名(%s)DDNS失败: %v", provider.domain, err) + log.Printf("NEZHA>> Failed to update DNS record of domain %s: %v", provider.domain, err) } else { - log.Printf("NEZHA>> 尝试更新域名(%s)DDNS成功", provider.domain) + log.Printf("NEZHA>> Update DNS record of domain %s succeed", provider.domain) break } } diff --git a/pkg/ddns/webhook/webhook.go b/pkg/ddns/webhook/webhook.go index b74d434..af99ab6 100644 --- a/pkg/ddns/webhook/webhook.go +++ b/pkg/ddns/webhook/webhook.go @@ -77,7 +77,7 @@ func (provider *Provider) prepareRequest(ctx context.Context) (*http.Request, er return nil, err } - headers, err := utils.GjsonParseStringMap( + headers, err := utils.GjsonIter( provider.formatWebhookString(provider.DDNSProfile.WebhookHeaders)) if err != nil { return nil, err @@ -139,7 +139,7 @@ func (provider *Provider) reqBody() (string, error) { case requestTypeJSON: return provider.formatWebhookString(provider.DDNSProfile.WebhookRequestBody), nil case requestTypeForm: - data, err := utils.GjsonParseStringMap(provider.DDNSProfile.WebhookRequestBody) + data, err := utils.GjsonIter(provider.DDNSProfile.WebhookRequestBody) if err != nil { return "", err } diff --git a/pkg/utils/gjson.go b/pkg/utils/gjson.go index 0063681..77594a7 100644 --- a/pkg/utils/gjson.go +++ b/pkg/utils/gjson.go @@ -2,6 +2,7 @@ package utils import ( "errors" + "iter" "github.com/tidwall/gjson" ) @@ -11,6 +12,8 @@ var ( ErrGjsonWrongType = errors.New("wrong type") ) +var emptyIterator = func(yield func(string, string) bool) {} + func GjsonGet(json []byte, path string) (gjson.Result, error) { result := gjson.GetBytes(json, path) if !result.Exists() { @@ -20,21 +23,19 @@ func GjsonGet(json []byte, path string) (gjson.Result, error) { return result, nil } -func GjsonParseStringMap(jsonObject string) (map[string]string, error) { - if jsonObject == "" { - return nil, nil +func GjsonIter(json string) (iter.Seq2[string, string], error) { + if json == "" { + return emptyIterator, nil } - result := gjson.Parse(jsonObject) + result := gjson.Parse(json) if !result.IsObject() { return nil, ErrGjsonWrongType } - ret := make(map[string]string) - result.ForEach(func(key, value gjson.Result) bool { - ret[key.String()] = value.String() - return true - }) - - return ret, nil + return func(yield func(string, string) bool) { + result.ForEach(func(k, v gjson.Result) bool { + return yield(k.String(), v.String()) + }) + }, nil } diff --git a/service/rpc/nezha.go b/service/rpc/nezha.go index 98996fb..cd2ee7f 100644 --- a/service/rpc/nezha.go +++ b/service/rpc/nezha.go @@ -239,7 +239,7 @@ func (s *NezhaHandler) ReportGeoIP(c context.Context, r *pb.GeoIP) (*pb.GeoIP, e }(provider) } } else { - log.Printf("NEZHA>> 获取DDNS配置时发生错误: %v", err) + log.Printf("NEZHA>> Failed to retrieve DDNS configuration: %v", err) } } diff --git a/service/singleton/alertsentinel.go b/service/singleton/alertsentinel.go index 125d810..9d94d36 100644 --- a/service/singleton/alertsentinel.go +++ b/service/singleton/alertsentinel.go @@ -74,20 +74,19 @@ func AlertSentinelStart() { AlertsLock.Unlock() time.Sleep(time.Second * 10) - var lastPrint time.Time + lastPrint := time.Now() var checkCount uint64 - for { - startedAt := time.Now() + ticker := time.Tick(3 * time.Second) // 3秒钟检查一次 + for startedAt := range ticker { checkStatus() checkCount++ if lastPrint.Before(startedAt.Add(-1 * time.Hour)) { if Conf.Debug { - log.Println("NEZHA>> 报警规则检测每小时", checkCount, "次", startedAt, time.Now()) + log.Printf("NEZHA>> Checking alert rules %d times each hour %v %v", checkCount, startedAt, time.Now()) } checkCount = 0 lastPrint = startedAt } - time.Sleep(time.Until(startedAt.Add(time.Second * 3))) // 3秒钟检查一次 } } diff --git a/service/singleton/notification.go b/service/singleton/notification.go index cb63087..b040214 100644 --- a/service/singleton/notification.go +++ b/service/singleton/notification.go @@ -247,7 +247,7 @@ func SendNotification(notificationGroupID uint64, desc string, muteLabel *string if !flag { if Conf.Debug { - log.Println("NEZHA>> 静音的重复通知:", desc, muteLabel) + log.Println("NEZHA>> Muted repeated notification", desc, muteLabel) } return } @@ -256,7 +256,7 @@ func SendNotification(notificationGroupID uint64, desc string, muteLabel *string NotificationsLock.RLock() defer NotificationsLock.RUnlock() for _, n := range NotificationList[notificationGroupID] { - log.Println("NEZHA>> 尝试通知", n.Name) + log.Printf("NEZHA>> Try to notify %s", n.Name) } for _, n := range NotificationList[notificationGroupID] { ns := model.NotificationServerBundle{ @@ -268,9 +268,9 @@ func SendNotification(notificationGroupID uint64, desc string, muteLabel *string ns.Server = ext[0] } if err := ns.Send(desc); err != nil { - log.Println("NEZHA>> 向 ", n.Name, " 发送通知失败:", err) + log.Printf("NEZHA>> Sending notification to %s failed: %v", n.Name, err) } else { - log.Println("NEZHA>> 向 ", n.Name, " 发送通知成功:") + log.Printf("NEZHA>> Sending notification to %s succeed", n.Name) } } } diff --git a/service/singleton/servicesentinel.go b/service/singleton/servicesentinel.go index 8cbfd1b..b2ad2cf 100644 --- a/service/singleton/servicesentinel.go +++ b/service/singleton/servicesentinel.go @@ -359,7 +359,7 @@ func (ss *ServiceSentinel) worker() { // 从服务状态汇报管道获取汇报的服务数据 for r := range ss.serviceReportChannel { if ss.Services[r.Data.GetId()] == nil || ss.Services[r.Data.GetId()].ID == 0 { - log.Printf("NEZHA>> 错误的服务监控上报 %+v", r) + log.Printf("NEZHA>> Incorrect service monitor report %+v", r) continue } mh := r.Data @@ -383,7 +383,7 @@ func (ss *ServiceSentinel) worker() { Data: mh.Data, ServerID: r.Reporter, }).Error; err != nil { - log.Println("NEZHA>> 服务监控数据持久化失败:", err) + log.Printf("NEZHA>> Failed to save service monitor metrics: %v", err) } } serviceTcpMap[r.Reporter] = ts @@ -450,7 +450,7 @@ func (ss *ServiceSentinel) worker() { Up: ss.serviceResponseDataStoreCurrentUp[mh.GetId()], Down: ss.serviceResponseDataStoreCurrentDown[mh.GetId()], }).Error; err != nil { - log.Println("NEZHA>> 服务监控数据持久化失败:", err) + log.Printf("NEZHA>> Failed to save service monitor metrics: %v", err) } } diff --git a/service/singleton/singleton.go b/service/singleton/singleton.go index c46471b..96ca6a5 100644 --- a/service/singleton/singleton.go +++ b/service/singleton/singleton.go @@ -112,7 +112,7 @@ func RecordTransferHourlyUsage() { if len(txs) == 0 { return } - log.Println("NEZHA>> Cron 流量统计入库", len(txs), DB.Create(txs).Error) + log.Printf("NEZHA>> Saved traffic metrics to database. Affected %d row(s), Error: %v", len(txs), DB.Create(txs).Error) } // CleanServiceHistory 清理无效或过时的 监控记录 和 流量记录