Skip to content
Snippets Groups Projects
Commit 6048eaba authored by Matthias Rampke's avatar Matthias Rampke Committed by ale
Browse files

Strip time, hostname, service columns out before parsing

The data we get from rsyslog includes more than just the raw JSON. Strip
those bits out before trying to parse anything.
parent 9176ba36
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ package main
import (
"bufio"
"bytes"
"log"
"os"
"sync"
......@@ -37,7 +38,8 @@ func newRsyslogExporter() *rsyslogExporter {
return e
}
func (re *rsyslogExporter) handleStatLine(buf []byte) {
func (re *rsyslogExporter) handleStatLine(rawbuf []byte) {
buf := bytes.SplitN(rawbuf, []byte(" "), 4)[3]
pstatType := getStatType(buf)
log.Printf("pstatType: %+v", pstatType)
......
......@@ -88,7 +88,7 @@ func TestHandleLineWithAction(t *testing.T) {
},
}
actionLog := []byte(`{"name":"test_action","processed":100000,"failed":2,"suspended":1,"suspended.duration":1000,"resumed":1}`)
actionLog := []byte(`2017-08-30T08:10:04.786350+00:00 some-node.example.org rsyslogd-pstats: {"name":"test_action","processed":100000,"failed":2,"suspended":1,"suspended.duration":1000,"resumed":1}`)
testHelper(t, actionLog, tests)
}
......@@ -141,7 +141,7 @@ func TestHandleLineWithResource(t *testing.T) {
},
}
resourceLog := []byte(`{"name":"resource-usage","utime":10,"stime":20,"maxrss":30,"minflt":40,"majflt":50,"inblock":60,"oublock":70,"nvcsw":80,"nivcsw":90}`)
resourceLog := []byte(`2017-08-30T08:10:04.786350+00:00 some-node.example.org rsyslogd-pstats: {"name":"resource-usage","utime":10,"stime":20,"maxrss":30,"minflt":40,"majflt":50,"inblock":60,"oublock":70,"nvcsw":80,"nivcsw":90}`)
testHelper(t, resourceLog, tests)
}
......@@ -154,7 +154,7 @@ func TestHandleLineWithInput(t *testing.T) {
},
}
inputLog := []byte(`{"name":"test_input", "origin":"imuxsock", "submitted":1000}`)
inputLog := []byte(`2017-08-30T08:10:04.786350+00:00 some-node.example.org rsyslogd-pstats: {"name":"test_input", "origin":"imuxsock", "submitted":1000}`)
testHelper(t, inputLog, tests)
}
......@@ -192,12 +192,12 @@ func TestHandleLineWithQueue(t *testing.T) {
},
}
queueLog = []byte(`{"name":"main Q","size":10,"enqueued":20,"full":30,"discarded.full":40,"discarded.nf":50,"maxqsize":60}`)
queueLog := []byte(`2017-08-30T08:10:04.786350+00:00 some-node.example.org rsyslogd-pstats: {"name":"main Q","size":10,"enqueued":20,"full":30,"discarded.full":40,"discarded.nf":50,"maxqsize":60}`)
testHelper(t, queueLog, tests)
}
func TestHandleUnknown(t *testing.T) {
unknownLog := []byte(`{"a":"b"}`)
unknownLog := []byte(`2017-08-30T08:10:04.786350+00:00 some-node.example.org rsyslogd-pstats: {"a":"b"}`)
exporter := newRsyslogExporter()
exporter.handleStatLine(unknownLog)
......
......@@ -3,16 +3,16 @@ package main
import "testing"
var (
queueLog = []byte(`{"name":"main Q","size":10,"enqueued":20,"full":30,"discarded.full":40,"discarded.nf":50,"maxqsize":60}`)
queueStat = []byte(`{"name":"main Q","size":10,"enqueued":20,"full":30,"discarded.full":40,"discarded.nf":50,"maxqsize":60}`)
)
func TestNewQueueFromJSON(t *testing.T) {
logType := getStatType(queueLog)
logType := getStatType(queueStat)
if logType != rsyslogQueue {
t.Errorf("detected pstat type should be %d but is %d", rsyslogQueue, logType)
}
pstat, err := newQueueFromJSON([]byte(queueLog))
pstat, err := newQueueFromJSON([]byte(queueStat))
if err != nil {
t.Fatalf("expected parsing queue stat not to fail, got: %v", err)
}
......@@ -47,7 +47,7 @@ func TestNewQueueFromJSON(t *testing.T) {
}
func TestQueueToPoints(t *testing.T) {
pstat, err := newQueueFromJSON([]byte(queueLog))
pstat, err := newQueueFromJSON([]byte(queueStat))
if err != nil {
t.Fatalf("expected parsing queue stat not to fail, got: %v", err)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment