Skip to content

Commit

Permalink
pinger: fix pinger group
Browse files Browse the repository at this point in the history
  • Loading branch information
Ehco1996 committed Sep 7, 2024
1 parent 6a1e282 commit cffb631
Showing 1 changed file with 7 additions and 13 deletions.
20 changes: 7 additions & 13 deletions internal/metrics/ping.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package metrics

import (
"math"
"runtime"
"time"

"github.com/Ehco1996/ehco/internal/config"
Expand All @@ -19,9 +18,6 @@ func (pg *PingGroup) newPinger(ruleLabel string, remote string, addr string) (*p
pinger.Interval = pingInterval
pinger.Timeout = time.Duration(math.MaxInt64)
pinger.RecordRtts = false
if runtime.GOOS != "darwin" {
pinger.SetPrivileged(true)
}
pinger.OnRecv = func(pkt *ping.Packet) {
ip := pkt.IPAddr.String()
PingResponseDurationMilliseconds.WithLabelValues(
Expand All @@ -35,25 +31,23 @@ func (pg *PingGroup) newPinger(ruleLabel string, remote string, addr string) (*p
type PingGroup struct {
logger *zap.Logger

// k: addr
Pingers map[string]*ping.Pinger
Pingers []*ping.Pinger
}

func NewPingGroup(cfg *config.Config) *PingGroup {
pg := &PingGroup{
logger: zap.L().Named("pinger"),
Pingers: make(map[string]*ping.Pinger),
}
pg := &PingGroup{logger: zap.L().Named("pinger"), Pingers: make([]*ping.Pinger, 0)}

for _, relayCfg := range cfg.RelayConfigs {
for _, remote := range relayCfg.GetAllRemotes() {
addr, err := remote.GetAddrHost()
if err != nil {
pg.logger.Error("try parse host error", zap.Error(err))
continue
}
if pinger, err := pg.newPinger(relayCfg.Label, remote.Address, addr); err != nil {
pg.logger.Error("new pinger meet error", zap.Error(err))
} else {
pg.Pingers[addr] = pinger
pg.Pingers = append(pg.Pingers, pinger)
}
}
}
Expand All @@ -66,10 +60,10 @@ func (pg *PingGroup) Run() {
}
pg.logger.Sugar().Infof("Start Ping Group now total pinger: %d", len(pg.Pingers))
splay := time.Duration(pingInterval.Nanoseconds() / int64(len(pg.Pingers)))
for addr, pinger := range pg.Pingers {
for _, pinger := range pg.Pingers {
go func() {
if err := pinger.Run(); err != nil {
pg.logger.Error("Starting pinger meet err", zap.String("addr", addr), zap.Error(err))
pg.logger.Error("Starting pinger meet err", zap.Error(err), zap.String("addr", pinger.Addr()))
}
}()
time.Sleep(splay)
Expand Down

0 comments on commit cffb631

Please sign in to comment.