Skip to content

Commit d8d8551

Browse files
authored
Convert NaN or Infinity value metrics to string (#271)
* Convert NaN or Infinity value metrics to string * Fixed test name
1 parent 30027c9 commit d8d8551

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

events/events.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package events
33
import (
44
"encoding/json"
55
"fmt"
6+
"math"
67
"sort"
78
"strings"
89

@@ -121,11 +122,21 @@ func LogMessage(msg *events.Envelope) *Event {
121122

122123
func ValueMetric(msg *events.Envelope) *Event {
123124
valMetric := msg.GetValueMetric()
125+
value := valMetric.GetValue()
124126

125127
fields := logrus.Fields{
126128
"name": valMetric.GetName(),
127129
"unit": valMetric.GetUnit(),
128-
"value": valMetric.GetValue(),
130+
"value": value,
131+
}
132+
133+
// Convert special values
134+
if math.IsNaN(value) {
135+
fields["value"] = "NaN"
136+
} else if math.IsInf(value, 1) {
137+
fields["value"] = "Infinity"
138+
} else if math.IsInf(value, -1) {
139+
fields["value"] = "-Infinity"
129140
}
130141

131142
return &Event{

events/events_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package events_test
22

33
import (
4+
"math"
5+
46
fevents "github.com/cloudfoundry-community/splunk-firehose-nozzle/events"
57
"github.com/cloudfoundry-community/splunk-firehose-nozzle/testing"
68
. "github.com/cloudfoundry/sonde-go/events"
@@ -88,6 +90,45 @@ var _ = Describe("Events", func() {
8890
Expect(evt.Fields["unit"]).To(Equal(unit))
8991
})
9092

93+
It("ValueMetric NaN", func() {
94+
msg = NewValueMetric()
95+
nan := math.NaN()
96+
msg.ValueMetric.Value = &nan
97+
evt := fevents.ValueMetric(msg)
98+
Expect(evt).ToNot(BeNil())
99+
Expect(evt.Fields).ToNot(BeNil())
100+
Expect(evt.Msg).To(Equal(""))
101+
Expect(evt.Fields["name"]).To(Equal(name))
102+
Expect(evt.Fields["value"]).To(Equal("NaN"))
103+
Expect(evt.Fields["unit"]).To(Equal(unit))
104+
})
105+
106+
It("ValueMetric +Infinity", func() {
107+
msg = NewValueMetric()
108+
inf := math.Inf(1)
109+
msg.ValueMetric.Value = &inf
110+
evt := fevents.ValueMetric(msg)
111+
Expect(evt).ToNot(BeNil())
112+
Expect(evt.Fields).ToNot(BeNil())
113+
Expect(evt.Msg).To(Equal(""))
114+
Expect(evt.Fields["name"]).To(Equal(name))
115+
Expect(evt.Fields["value"]).To(Equal("Infinity"))
116+
Expect(evt.Fields["unit"]).To(Equal(unit))
117+
})
118+
119+
It("ValueMetric -Infinity", func() {
120+
msg = NewValueMetric()
121+
inf := math.Inf(-1)
122+
msg.ValueMetric.Value = &inf
123+
evt := fevents.ValueMetric(msg)
124+
Expect(evt).ToNot(BeNil())
125+
Expect(evt.Fields).ToNot(BeNil())
126+
Expect(evt.Msg).To(Equal(""))
127+
Expect(evt.Fields["name"]).To(Equal(name))
128+
Expect(evt.Fields["value"]).To(Equal("-Infinity"))
129+
Expect(evt.Fields["unit"]).To(Equal(unit))
130+
})
131+
91132
It("CounterEvent", func() {
92133
msg = NewCounterEvent()
93134
evt := fevents.CounterEvent(msg)

0 commit comments

Comments
 (0)