Skip to content

Commit 29474d0

Browse files
committed
added PID parsing to RFC3164 parser
1 parent a127d82 commit 29474d0

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

internal/syslogparser/rfc3164/rfc3164.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type header struct {
2626

2727
type rfc3164message struct {
2828
tag string
29+
pid string
2930
content string
3031
}
3132

@@ -82,6 +83,7 @@ func (p *Parser) Dump() syslogparser.LogParts {
8283
"hostname": p.header.hostname,
8384
"tag": p.message.tag,
8485
"content": p.message.content,
86+
"pid": p.message.pid,
8587
"priority": p.priority.P,
8688
"facility": p.priority.F.Value,
8789
"severity": p.priority.S.Value,
@@ -117,11 +119,12 @@ func (p *Parser) parsemessage() (rfc3164message, error) {
117119
var err error
118120

119121
if !p.skipTag {
120-
tag, err := p.parseTag()
122+
tag, pid, err := p.parseTag()
121123
if err != nil {
122124
return msg, err
123125
}
124126
msg.tag = tag
127+
msg.pid = pid
125128
}
126129

127130
content, err := p.parseContent()
@@ -198,31 +201,39 @@ func (p *Parser) parseHostname() (string, error) {
198201
}
199202

200203
// http://tools.ietf.org/html/rfc3164#section-4.1.3
201-
func (p *Parser) parseTag() (string, error) {
204+
func (p *Parser) parseTag() (string, string, error) {
202205
var b byte
203206
var endOfTag bool
204207
var bracketOpen bool
208+
var bracketClosed bool
205209
var tag []byte
210+
var pid []byte
206211
var err error
207212
var found bool
208213

209214
from := p.cursor
215+
pidFrom := 0
210216

211217
for {
212218
if p.cursor == p.l {
213219
// no tag found, reset cursor for content
214220
p.cursor = from
215-
return "", nil
221+
return "", "", nil
216222
}
217223

218224
b = p.buff[p.cursor]
219225
bracketOpen = (b == '[')
226+
bracketClosed = (b == ']')
220227
endOfTag = (b == ':' || b == ' ')
221228

222-
// XXX : parse PID ?
223229
if bracketOpen {
224230
tag = p.buff[from:p.cursor]
225231
found = true
232+
pidFrom = p.cursor + 1
233+
}
234+
235+
if bracketClosed {
236+
pid = p.buff[pidFrom:p.cursor]
226237
}
227238

228239
if endOfTag {
@@ -242,7 +253,11 @@ func (p *Parser) parseTag() (string, error) {
242253
p.cursor++
243254
}
244255

245-
return string(tag), err
256+
if pidFrom == 0 { // No PID found
257+
pid = []byte{}
258+
}
259+
260+
return string(tag), string(pid), err
246261
}
247262

248263
func (p *Parser) parseContent() (string, error) {

internal/syslogparser/rfc3164/rfc3164_test.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -233,29 +233,30 @@ func (s *Rfc3164TestSuite) TestParseTimestamp_Valid(c *C) {
233233
func (s *Rfc3164TestSuite) TestParseTag_Pid(c *C) {
234234
buff := []byte("apache2[10]:")
235235
tag := "apache2"
236+
pid := "10"
236237

237-
s.assertTag(c, tag, buff, len(buff), nil)
238+
s.assertTag(c, tag, pid, buff, len(buff), nil)
238239
}
239240

240241
func (s *Rfc3164TestSuite) TestParseTag_NoPid(c *C) {
241242
buff := []byte("apache2:")
242243
tag := "apache2"
243244

244-
s.assertTag(c, tag, buff, len(buff), nil)
245+
s.assertTag(c, tag, "", buff, len(buff), nil)
245246
}
246247

247248
func (s *Rfc3164TestSuite) TestParseTag_TrailingSpace(c *C) {
248249
buff := []byte("apache2: ")
249250
tag := "apache2"
250251

251-
s.assertTag(c, tag, buff, len(buff), nil)
252+
s.assertTag(c, tag, "", buff, len(buff), nil)
252253
}
253254

254255
func (s *Rfc3164TestSuite) TestParseTag_NoTag(c *C) {
255256
buff := []byte("apache2")
256257
tag := ""
257258

258-
s.assertTag(c, tag, buff, 0, nil)
259+
s.assertTag(c, tag, "", buff, 0, nil)
259260
}
260261

261262
func (s *Rfc3164TestSuite) TestParseContent_Valid(c *C) {
@@ -352,10 +353,11 @@ func (s *Rfc3164TestSuite) assertTimestamp(c *C, ts time.Time, b []byte, expC in
352353
c.Assert(err, Equals, e)
353354
}
354355

355-
func (s *Rfc3164TestSuite) assertTag(c *C, t string, b []byte, expC int, e error) {
356+
func (s *Rfc3164TestSuite) assertTag(c *C, t string, p string, b []byte, expC int, e error) {
356357
p := NewParser(b)
357-
obtained, err := p.parseTag()
358+
obtained, obtainedPid, err := p.parseTag()
358359
c.Assert(obtained, Equals, t)
360+
c.Assert(obtainedPid, Equals, p)
359361
c.Assert(p.cursor, Equals, expC)
360362
c.Assert(err, Equals, e)
361363
}

0 commit comments

Comments
 (0)