logmania/receive/syslog/main.go

66 lines
1.2 KiB
Go
Raw Normal View History

2017-08-09 08:45:45 +02:00
package syslog
import (
"net"
2017-08-09 08:45:45 +02:00
2017-10-25 00:36:16 +02:00
log "github.com/sirupsen/logrus"
"dev.sum7.eu/genofire/logmania/lib"
"dev.sum7.eu/genofire/logmania/receive"
2017-08-09 08:45:45 +02:00
)
2017-10-25 00:36:16 +02:00
var logger = log.WithField("receive", "syslog")
2017-08-09 08:45:45 +02:00
type Receiver struct {
receive.Receiver
exportChannel chan *log.Entry
serverSocket *net.UDPConn
2017-08-09 08:45:45 +02:00
}
func Init(config *lib.ReceiveConfig, exportChannel chan *log.Entry) receive.Receiver {
addr, err := net.ResolveUDPAddr(config.Syslog.Type, config.Syslog.Address)
ln, err := net.ListenUDP(config.Syslog.Type, addr)
2017-08-09 08:45:45 +02:00
if err != nil {
2017-10-25 00:36:16 +02:00
logger.Error("init ", err)
return nil
}
recv := &Receiver{
serverSocket: ln,
2017-08-09 08:45:45 +02:00
exportChannel: exportChannel,
}
2017-10-25 00:36:16 +02:00
logger.Info("init")
return recv
2017-08-09 08:45:45 +02:00
}
const maxDataGramSize = 8192
2017-08-09 08:45:45 +02:00
func (rc *Receiver) Listen() {
2017-10-25 00:36:16 +02:00
logger.Info("listen")
for {
buf := make([]byte, maxDataGramSize)
n, src, err := rc.serverSocket.ReadFromUDP(buf)
if err != nil {
2017-10-25 00:36:16 +02:00
logger.Warn("failed to accept connection", err)
continue
2017-08-09 08:45:45 +02:00
}
raw := make([]byte, n)
copy(raw, buf)
2017-10-25 00:36:16 +02:00
entry := toLogEntry(raw, src.IP.String())
if entry != nil {
rc.exportChannel <- entry
}
}
2017-08-09 08:45:45 +02:00
}
func (rc *Receiver) Close() {
rc.serverSocket.Close()
2017-08-09 08:45:45 +02:00
}
func init() {
receive.AddReceiver("syslog", Init)
}