-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevent.go
80 lines (69 loc) · 1.63 KB
/
event.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package main
import (
"fmt"
"strings"
"time"
)
var (
errCouldNotParseCmdOut = "Unknown command output: %s"
errCouldNotParseTime = "Could not parse time: %s: %s"
)
type ipmiEvent struct {
ID string
Time time.Time
Sensor string
Type string
Level string
Message string
State int
}
const (
timeFmt = "Jan-02-2006T15:04:05"
)
func newIPMIEvent(stdOutLine string) (*ipmiEvent, error) {
parts := strings.Split(stdOutLine, ",")
if len(parts) != 7 {
return nil, fmt.Errorf(errCouldNotParseCmdOut, stdOutLine)
}
inputTime := parts[1] + "T" + parts[2]
eventTime, err := time.Parse(timeFmt, inputTime)
if err != nil {
return nil, fmt.Errorf(errCouldNotParseTime, inputTime, err)
}
event := &ipmiEvent{
ID: parts[0],
Time: eventTime,
Sensor: parts[3],
Type: parts[4],
Level: parts[5],
Message: parts[6],
State: 1,
}
return event, nil
}
func spacesToUnderscore(str string) string {
return strings.Replace(str, " ", "_", -1)
}
func (ev ipmiEvent) InfluxDB(checkName, hostname string, eventTime bool) string {
var timestamp time.Time
if eventTime {
timestamp = ev.Time
} else {
timestamp = time.Now()
}
return fmt.Sprintf(
`%s,host=%s,event_type=%s,error_level=%s,sensor_name=%s event_id=%s,error_message="%s",state=%d %d`,
checkName, hostname, spacesToUnderscore(ev.Type), spacesToUnderscore(ev.Level), spacesToUnderscore(ev.Sensor),
ev.ID, ev.Message, ev.State, timestamp.UnixNano())
}
func newEmptyIPMIEvent() *ipmiEvent {
return &ipmiEvent{
ID: "0",
Time: time.Now(),
Sensor: "OK",
Type: "OK",
Level: "OK",
Message: "No errors",
State: 0,
}
}