Skip to content

Commit 7c5913a

Browse files
committed
formats refactor
1 parent 0bfa6f8 commit 7c5913a

File tree

3 files changed

+39
-84
lines changed

3 files changed

+39
-84
lines changed

rfc6587_test.go renamed to format/rfc6587_test.go

+14-7
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package syslog
1+
package format
22

33
import (
44
"bufio"
@@ -8,11 +8,13 @@ import (
88
"testing"
99
)
1010

11-
func TestSingleSplit(t *testing.T) {
11+
func TestRFC6587_GetSplitFuncSingleSplit(t *testing.T) {
12+
f := RFC6587{}
13+
1214
find := "I am test."
1315
buf := strings.NewReader("10 " + find)
1416
scanner := bufio.NewScanner(buf)
15-
scanner.Split(rfc6587ScannerSplit)
17+
scanner.Split(f.GetSplitFunc())
1618
if r := scanner.Scan(); !r {
1719
t.Error("Expected Scan() to return true, but didn't")
1820
}
@@ -21,7 +23,9 @@ func TestSingleSplit(t *testing.T) {
2123
}
2224
}
2325

24-
func TestMultiSplit(t *testing.T) {
26+
func TestRFC6587_GetSplitFuncMultiSplit(t *testing.T) {
27+
f := RFC6587{}
28+
2529
find := []string{
2630
"I am test.",
2731
"I am test 2.",
@@ -32,7 +36,7 @@ func TestMultiSplit(t *testing.T) {
3236
fmt.Fprintf(buf, "%d %s", len(i), i)
3337
}
3438
scanner := bufio.NewScanner(buf)
35-
scanner.Split(rfc6587ScannerSplit)
39+
scanner.Split(f.GetSplitFunc())
3640

3741
i := 0
3842
for scanner.Scan() {
@@ -44,11 +48,14 @@ func TestMultiSplit(t *testing.T) {
4448
}
4549
}
4650

47-
func TestBadSplit(t *testing.T) {
51+
func TestRFC6587_GetSplitBadSplit(t *testing.T) {
52+
f := RFC6587{}
53+
4854
find := "I am test.2 ab"
4955
buf := strings.NewReader("9 " + find)
5056
scanner := bufio.NewScanner(buf)
51-
scanner.Split(rfc6587ScannerSplit)
57+
scanner.Split(f.GetSplitFunc())
58+
5259
if r := scanner.Scan(); !r {
5360
t.Error("Expected Scan() to return true, but didn't")
5461
}

server.go

+23-75
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,39 @@ package syslog
22

33
import (
44
"bufio"
5-
"bytes"
65
"errors"
76
"net"
8-
"strconv"
97
"sync"
10-
118
"time"
129

13-
"github.com/jeromer/syslogparser"
14-
"github.com/jeromer/syslogparser/rfc3164"
15-
"github.com/jeromer/syslogparser/rfc5424"
10+
"github.com/mcuadros/go-syslog/format"
1611
)
1712

18-
type Format int
19-
20-
const (
21-
RFC3164 Format = 1 + iota // RFC3164: http://www.ietf.org/rfc/rfc3164.txt
22-
RFC5424 // RFC5424: http://www.ietf.org/rfc/rfc5424.txt
23-
RFC6587 // RFC6587: http://www.ietf.org/rfc/rfc6587.txt
13+
var (
14+
RFC3164 = &format.RFC3164{} // RFC3164: http://www.ietf.org/rfc/rfc3164.txt
15+
RFC5424 = &format.RFC5424{} // RFC5424: http://www.ietf.org/rfc/rfc5424.txt
16+
RFC6587 = &format.RFC6587{} // RFC6587: http://www.ietf.org/rfc/rfc6587.txt
2417
)
2518

2619
type Server struct {
2720
listeners []*net.TCPListener
2821
connections []net.Conn
2922
wait sync.WaitGroup
3023
doneTcp chan bool
31-
format Format
24+
format format.Format
3225
handler Handler
3326
lastError error
3427
readTimeoutMilliseconds int64
3528
}
3629

3730
//NewServer returns a new Server
3831
func NewServer() *Server {
39-
server := new(Server)
40-
41-
return server
32+
return &Server{}
4233
}
4334

4435
//Sets the syslog format (RFC3164 or RFC5424 or RFC6587)
45-
func (self *Server) SetFormat(format Format) {
46-
self.format = format
36+
func (self *Server) SetFormat(f format.Format) {
37+
self.format = f
4738
}
4839

4940
//Sets the handler, this handler with receive every syslog entry
@@ -107,7 +98,7 @@ func (self *Server) ListenTCP(addr string) error {
10798

10899
//Starts the server, all the go routines goes to live
109100
func (self *Server) Boot() error {
110-
if self.format == 0 {
101+
if self.format == nil {
111102
return errors.New("please set a valid format")
112103
}
113104

@@ -148,43 +139,10 @@ func (self *Server) goAcceptConnection(listener *net.TCPListener) {
148139
}(listener)
149140
}
150141

151-
type TimeoutCloser interface {
152-
Close() error
153-
SetReadDeadline(t time.Time) error
154-
}
155-
156-
type ScanCloser struct {
157-
*bufio.Scanner
158-
closer TimeoutCloser
159-
}
160-
161-
func rfc6587ScannerSplit(data []byte, atEOF bool) (advance int, token []byte, err error) {
162-
if atEOF && len(data) == 0 {
163-
return 0, nil, nil
164-
}
165-
166-
if i := bytes.IndexByte(data, ' '); i > 0 {
167-
pLength := data[0:i]
168-
length, err := strconv.Atoi(string(pLength))
169-
if err != nil {
170-
return 0, nil, err
171-
}
172-
end := length + i + 1
173-
if len(data) >= end {
174-
//Return the frame with the length removed
175-
return end, data[i+1 : end], nil
176-
}
177-
}
178-
179-
// Request more data
180-
return 0, nil, nil
181-
}
182-
183142
func (self *Server) goScanConnection(connection net.Conn, needClose bool) {
184143
scanner := bufio.NewScanner(connection)
185-
switch self.format {
186-
case RFC6587:
187-
scanner.Split(rfc6587ScannerSplit)
144+
if sf := self.format.GetSplitFunc(); sf != nil {
145+
scanner.Split(sf)
188146
}
189147

190148
var scanCloser *ScanCloser
@@ -229,15 +187,7 @@ func (self *Server) scan(scanCloser *ScanCloser) {
229187
}
230188

231189
func (self *Server) parser(line []byte) {
232-
var parser syslogparser.LogParser
233-
234-
switch self.format {
235-
case RFC3164:
236-
parser = self.getParserRFC3164(line)
237-
case RFC5424, RFC6587:
238-
parser = self.getParserRFC5424(line)
239-
}
240-
190+
parser := self.format.GetParser(line)
241191
err := parser.Parse()
242192
if err != nil {
243193
self.lastError = err
@@ -246,18 +196,6 @@ func (self *Server) parser(line []byte) {
246196
go self.handler.Handle(parser.Dump(), int64(len(line)), err)
247197
}
248198

249-
func (self *Server) getParserRFC3164(line []byte) *rfc3164.Parser {
250-
parser := rfc3164.NewParser(line)
251-
252-
return parser
253-
}
254-
255-
func (self *Server) getParserRFC5424(line []byte) *rfc5424.Parser {
256-
parser := rfc5424.NewParser(line)
257-
258-
return parser
259-
}
260-
261199
//Returns the last error
262200
func (self *Server) GetLastError() error {
263201
return self.lastError
@@ -288,3 +226,13 @@ func (self *Server) Kill() error {
288226
func (self *Server) Wait() {
289227
self.wait.Wait()
290228
}
229+
230+
type TimeoutCloser interface {
231+
Close() error
232+
SetReadDeadline(t time.Time) error
233+
}
234+
235+
type ScanCloser struct {
236+
*bufio.Scanner
237+
closer TimeoutCloser
238+
}

server_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ func (s *ServerSuite) TestTailFile(c *C) {
4848
}
4949

5050
type HandlerMock struct {
51-
LastLogParts syslogparser.LogParts
51+
LastLogParts syslogparser.LogParts
5252
LastMessageLength int64
53-
LastError error
53+
LastError error
5454
}
5555

5656
func (self *HandlerMock) Handle(logParts syslogparser.LogParts, msgLen int64, err error) {

0 commit comments

Comments
 (0)