Skip to content

Commit 84d7a27

Browse files
committed
fix: fixup updating counters after State pointer/value migration
1 parent d2fd89c commit 84d7a27

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

bin/prom-apcupsd-exporter

4 KB
Binary file not shown.

model/model.go

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,14 @@ func (m *Model) AddEvent(e Event) {
4343

4444
// Update method
4545
func (m *Model) Update(newState State) {
46-
prevState := m.State
47-
m.PrevState = prevState
46+
m.PrevState = m.State
4847
m.State = newState
4948

5049
m.updateStatusCounts()
5150
m.updateTransferOnbatt()
5251
m.updateEvents()
5352

54-
_, diff := prevState.Compare(newState)
53+
_, diff := m.PrevState.Compare(newState)
5554
m.ChangedFields = diff
5655

5756
if len(diff) > 0 || len(m.NewEvents) > 0 {
@@ -65,39 +64,39 @@ func (m *Model) Update(newState State) {
6564

6665
// updateStatusCounts method
6766
func (m *Model) updateStatusCounts() {
68-
old := m.PrevState
69-
curr := m.State
70-
curr.UpsStatus.FlagChangeCounts = old.UpsStatus.CloneFlagChangeCounts()
71-
flags := curr.UpsStatus.GetFlags()
72-
prevFlags := old.UpsStatus.GetFlags()
73-
for flagName := range StatusFlags {
74-
if flags[flagName] != prevFlags[flagName] {
75-
curr.UpsStatus.FlagChangeCounts[flagName]++
67+
m.State.UpsStatus.FlagChangeCounts = m.PrevState.UpsStatus.CloneFlagChangeCounts()
68+
69+
if m.State.UpsStatus.Flag != m.PrevState.UpsStatus.Flag {
70+
flags := m.State.UpsStatus.GetFlags()
71+
prevFlags := m.PrevState.UpsStatus.GetFlags()
72+
for flagName := range StatusFlags {
73+
if flags[flagName] != prevFlags[flagName] {
74+
m.State.UpsStatus.FlagChangeCounts[flagName]++
75+
}
7676
}
7777
}
7878
}
7979

8080
// updateTransferOnbatt method
8181
func (m *Model) updateTransferOnbatt() {
82-
old := m.PrevState
83-
curr := m.State
84-
8582
// Reveal hidden quick transfers on battery and back
86-
transDelta := int64(curr.UpsTransferOnBatteryCount) - int64(old.UpsTransferOnBatteryCount)
83+
transDelta := int64(m.State.UpsTransferOnBatteryCount) -
84+
int64(m.PrevState.UpsTransferOnBatteryCount)
85+
8786
if transDelta > 0 {
8887
minIncr := uint64(transDelta-1) * 2
89-
curr.UpsStatus.FlagChangeCounts["online"] += minIncr
90-
curr.UpsStatus.FlagChangeCounts["onbatt"] += minIncr
88+
m.State.UpsStatus.FlagChangeCounts["online"] += minIncr
89+
m.State.UpsStatus.FlagChangeCounts["onbatt"] += minIncr
9190

92-
flag := curr.UpsStatus.Flag
91+
flag := m.State.UpsStatus.Flag
9392
if flag&StatusFlags["online"] != 0 {
94-
curr.UpsStatus.FlagChangeCounts["online"] += 2
93+
m.State.UpsStatus.FlagChangeCounts["online"] += 2
9594
}
9695
if flag&StatusFlags["onbatt"] == 0 {
97-
curr.UpsStatus.FlagChangeCounts["onbatt"] += 2
96+
m.State.UpsStatus.FlagChangeCounts["onbatt"] += 2
9897

99-
m.AddEvent(eventFromType(EventTypeOnbatt, old, curr))
100-
m.AddEvent(eventFromType(EventTypeOnbattEnd, old, curr))
98+
m.AddEvent(eventFromType(EventTypeOnbatt, m.PrevState, m.State))
99+
m.AddEvent(eventFromType(EventTypeOnbattEnd, m.PrevState, m.State))
101100
}
102101
}
103102
}

0 commit comments

Comments
 (0)