1
0
Fork 0
forked from boyska/circolog
circolog/main.go

68 lines
1.9 KiB
Go
Raw Normal View History

2018-08-22 18:47:00 +02:00
package main
import (
"container/ring"
"flag"
"fmt"
"net/http"
2018-08-22 23:51:59 +02:00
"os"
2018-08-22 18:47:00 +02:00
syslog "gopkg.in/mcuadros/go-syslog.v2"
"gopkg.in/mcuadros/go-syslog.v2/format"
)
func getSyslogdHandler(circbuf *ring.Ring, hub Hub) func(channel syslog.LogPartsChannel) {
return func(channel syslog.LogPartsChannel) {
for logParts := range channel {
hub.logMessages <- logParts
fmt.Println(logParts)
circbuf.Value = logParts
circbuf = circbuf.Next()
2018-08-22 20:56:43 +02:00
}
2018-08-22 23:51:59 +02:00
}
}
2018-08-22 18:47:00 +02:00
func main() {
2018-08-22 23:51:59 +02:00
var err error
2018-08-22 18:47:00 +02:00
syslogSocketPath := flag.String("syslogd-socket", "", "The socket to listen to syslog addresses")
// dumpSocketPath := flag.String("dump-socket", "/run/buffer.sock", "The socket that user will connect to in order to receive logs")
bufsize := flag.Int("buffer-size", 1000, "Number of messages to keep")
syslogAddr := flag.String("syslog-addr", "127.0.0.1:9514", "Address:port where to listen for syslog messages")
queryAddr := flag.String("query-addr", "127.0.0.1:9080", "Address:port where to bind the query service")
2018-08-22 18:47:00 +02:00
flag.Parse()
var hub Hub
hub = NewHub()
2018-08-22 20:56:43 +02:00
channel := make(chan format.LogParts)
2018-08-22 18:47:00 +02:00
handler := syslog.NewChannelHandler(channel)
server := syslog.NewServer()
server.SetFormat(syslog.RFC5424)
server.SetHandler(handler)
if *syslogSocketPath != "" {
2018-08-22 23:51:59 +02:00
if err = server.ListenUnixgram(*syslogSocketPath); err != nil {
fmt.Fprintln(os.Stderr, "argh", err)
os.Exit(1)
}
2018-08-22 21:05:37 +02:00
fmt.Printf("Binding socket `%s` [syslog]\n", *syslogSocketPath)
2018-08-22 20:56:43 +02:00
} else {
fmt.Printf("Binding address `%s` [syslog]\n", *syslogAddr)
2018-08-22 23:51:59 +02:00
if err = server.ListenUDP(*syslogAddr); err != nil {
fmt.Fprintln(os.Stderr, "argh", err)
os.Exit(1)
}
2018-08-22 18:47:00 +02:00
}
circbuf := ring.New(*bufsize)
2018-08-22 23:51:59 +02:00
if err = server.Boot(); err != nil {
fmt.Fprintln(os.Stderr, "argh", err)
os.Exit(1)
}
go hub.Run()
go getSyslogdHandler(circbuf, hub)(channel)
2018-08-22 18:47:00 +02:00
setupHttp(circbuf, hub)
fmt.Printf("Binding address `%s` [http]\n", *queryAddr)
http.ListenAndServe(*queryAddr, nil)
2018-08-22 18:47:00 +02:00
server.Wait()
}