Skip to content

Commit 2678312

Browse files
committed
improve service discovery
do not drop targets if they dont respond to mdns anymore, try to keep them alive as long as they respond Signed-off-by: Markus Blaschke <[email protected]>
1 parent e5bfd48 commit 2678312

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

discovery/discovery.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414

1515
const (
1616
TargetHealthDead = 0
17-
TargetHealthLow = 1
17+
TargetHealthLow = 2
1818
TargetHealthGood = 10
1919

2020
TargetHealthy = true
@@ -118,9 +118,19 @@ func (d *serviceDiscovery) Run(timeout time.Duration) {
118118
d.lock.Lock()
119119
defer d.lock.Unlock()
120120

121-
// set all non-discovered targets to low health
121+
// reduce all non-discovered targets health
122122
for target := range d.targetList {
123-
d.targetList[target].Health = TargetHealthLow
123+
// set to low health if target was healthy before
124+
// reduce health even further if not detected
125+
// some devices seems not to respond to mdns discovery after some time,
126+
// so try to keep them alive here
127+
if d.targetList[target].Health > TargetHealthLow {
128+
d.targetList[target].Health = TargetHealthLow
129+
} else {
130+
// reduce health even more for each failed service discovery
131+
d.targetList[target].Health = d.targetList[target].Health - 1
132+
}
133+
124134
}
125135

126136
// set all discovered targets to good health

shellyplug/prober.gen2.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ func (sp *ShellyPlug) collectFromTargetGen2(target discovery.DiscoveryTarget, lo
3030
}
3131

3232
if shellyConfig, err := shellyProber.GetShellyConfig(); err == nil {
33+
// target is healthy
34+
if discovery.ServiceDiscovery != nil {
35+
discovery.ServiceDiscovery.MarkTarget(target.Address, discovery.TargetHealthy)
36+
}
37+
3338
// systemStatus
3439
if result, err := shellyProber.GetSysStatus(); err == nil {
3540
sp.prometheus.sysUnixtime.With(targetLabels).Set(float64(result.Unixtime))

0 commit comments

Comments
 (0)