1
- package syslogparser
1
+ package rfc3164
2
2
3
3
import (
4
4
"bytes"
5
+ "github.com/jeromer/syslogparser"
5
6
"time"
6
7
)
7
8
8
- func NewRfc3164Parser (buff []byte ) * rfc3164Parser {
9
- return & rfc3164Parser {
9
+ var (
10
+ ErrTagTooLong = & syslogparser.ParserError {"Tag name too long" }
11
+ )
12
+
13
+ type Parser struct {
14
+ buff []byte
15
+ cursor int
16
+ l int
17
+ priority syslogparser.Priority
18
+ version int
19
+ header header
20
+ message rfc3164message
21
+ }
22
+
23
+ type header struct {
24
+ timestamp time.Time
25
+ hostname string
26
+ }
27
+
28
+ type rfc3164message struct {
29
+ tag string
30
+ content string
31
+ }
32
+
33
+ func NewParser (buff []byte ) * Parser {
34
+ return & Parser {
10
35
buff : buff ,
11
36
cursor : 0 ,
12
37
l : len (buff ),
13
38
}
14
39
}
15
40
16
- func (p * rfc3164Parser ) Parse () error {
41
+ func (p * Parser ) Parse () error {
17
42
pri , err := p .parsePriority ()
18
43
if err != nil {
19
44
return err
@@ -26,37 +51,37 @@ func (p *rfc3164Parser) Parse() error {
26
51
27
52
p .cursor ++
28
53
29
- msg , err := p .parseMessage ()
30
- if err != ErrEOL {
54
+ msg , err := p .parsemessage ()
55
+ if err != syslogparser . ErrEOL {
31
56
return err
32
57
}
33
58
34
59
p .priority = pri
35
- p .version = NO_VERSION
60
+ p .version = syslogparser . NO_VERSION
36
61
p .header = hdr
37
62
p .message = msg
38
63
39
64
return nil
40
65
}
41
66
42
- func (p * rfc3164Parser ) Dump () LogParts {
43
- return LogParts {
67
+ func (p * Parser ) Dump () syslogparser. LogParts {
68
+ return syslogparser. LogParts {
44
69
"timestamp" : p .header .timestamp ,
45
70
"hostname" : p .header .hostname ,
46
71
"tag" : p .message .tag ,
47
72
"content" : p .message .content ,
48
- "priority" : p .priority .p ,
49
- "facility" : p .priority .f . value ,
50
- "severity" : p .priority .s . value ,
73
+ "priority" : p .priority .P ,
74
+ "facility" : p .priority .F . Value ,
75
+ "severity" : p .priority .S . Value ,
51
76
}
52
77
}
53
78
54
- func (p * rfc3164Parser ) parsePriority () (priority , error ) {
55
- return parsePriority (p .buff , & p .cursor , p .l )
79
+ func (p * Parser ) parsePriority () (syslogparser. Priority , error ) {
80
+ return syslogparser . ParsePriority (p .buff , & p .cursor , p .l )
56
81
}
57
82
58
- func (p * rfc3164Parser ) parseHeader () (rfc3164Header , error ) {
59
- hdr := rfc3164Header {}
83
+ func (p * Parser ) parseHeader () (header , error ) {
84
+ hdr := header {}
60
85
var err error
61
86
62
87
ts , err := p .parseTimestamp ()
@@ -75,8 +100,8 @@ func (p *rfc3164Parser) parseHeader() (rfc3164Header, error) {
75
100
return hdr , nil
76
101
}
77
102
78
- func (p * rfc3164Parser ) parseMessage () (rfc3164Message , error ) {
79
- msg := rfc3164Message {}
103
+ func (p * Parser ) parsemessage () (rfc3164message , error ) {
104
+ msg := rfc3164message {}
80
105
var err error
81
106
82
107
tag , err := p .parseTag ()
@@ -85,7 +110,7 @@ func (p *rfc3164Parser) parseMessage() (rfc3164Message, error) {
85
110
}
86
111
87
112
content , err := p .parseContent ()
88
- if err != ErrEOL {
113
+ if err != syslogparser . ErrEOL {
89
114
return msg , err
90
115
}
91
116
@@ -96,7 +121,7 @@ func (p *rfc3164Parser) parseMessage() (rfc3164Message, error) {
96
121
}
97
122
98
123
// https://tools.ietf.org/html/rfc3164#section-4.1.2
99
- func (p * rfc3164Parser ) parseTimestamp () (time.Time , error ) {
124
+ func (p * Parser ) parseTimestamp () (time.Time , error ) {
100
125
var ts time.Time
101
126
var err error
102
127
@@ -106,7 +131,7 @@ func (p *rfc3164Parser) parseTimestamp() (time.Time, error) {
106
131
107
132
if p .cursor + tsFmtLen > p .l {
108
133
p .cursor = p .l
109
- return ts , ErrEOL
134
+ return ts , syslogparser . ErrEOL
110
135
}
111
136
112
137
sub := p .buff [p .cursor : tsFmtLen + p .cursor ]
@@ -120,7 +145,7 @@ func (p *rfc3164Parser) parseTimestamp() (time.Time, error) {
120
145
p .cursor ++
121
146
}
122
147
123
- return ts , ErrTimestampUnknownFormat
148
+ return ts , syslogparser . ErrTimestampUnknownFormat
124
149
}
125
150
126
151
fixTimestampIfNeeded (& ts )
@@ -134,12 +159,12 @@ func (p *rfc3164Parser) parseTimestamp() (time.Time, error) {
134
159
return ts , nil
135
160
}
136
161
137
- func (p * rfc3164Parser ) parseHostname () (string , error ) {
138
- return parseHostname (p .buff , & p .cursor , p .l )
162
+ func (p * Parser ) parseHostname () (string , error ) {
163
+ return syslogparser . ParseHostname (p .buff , & p .cursor , p .l )
139
164
}
140
165
141
166
// http://tools.ietf.org/html/rfc3164#section-4.1.3
142
- func (p * rfc3164Parser ) parseTag () (string , error ) {
167
+ func (p * Parser ) parseTag () (string , error ) {
143
168
var b byte
144
169
var endOfTag bool
145
170
var bracketOpen bool
@@ -187,15 +212,15 @@ func (p *rfc3164Parser) parseTag() (string, error) {
187
212
return string (tag ), err
188
213
}
189
214
190
- func (p * rfc3164Parser ) parseContent () (string , error ) {
215
+ func (p * Parser ) parseContent () (string , error ) {
191
216
if p .cursor > p .l {
192
- return "" , ErrEOL
217
+ return "" , syslogparser . ErrEOL
193
218
}
194
219
195
220
content := bytes .Trim (p .buff [p .cursor :p .l ], " " )
196
221
p .cursor += len (content )
197
222
198
- return string (content ), ErrEOL
223
+ return string (content ), syslogparser . ErrEOL
199
224
}
200
225
201
226
func fixTimestampIfNeeded (ts * time.Time ) {
0 commit comments