add ctoplogger, log facility, socket server

This commit is contained in:
Bradley Cicenas 2017-02-04 02:01:52 +00:00
parent 3f36e0c1f5
commit 03789b8ed3
3 changed files with 91 additions and 5 deletions

View File

@ -33,11 +33,12 @@ func NewDefaultConfig() Config {
docker = "unix:///var/run/docker.sock"
}
config := Config{
"dockerHost": docker,
"filterStr": "",
"sortField": "id",
"sortReverse": "0",
"enableHeader": "0",
"dockerHost": docker,
"filterStr": "",
"sortField": "id",
"sortReverse": "0",
"enableHeader": "0",
"loggingEnabled": "1",
}
go func() {
for m := range configChan {

82
logging/main.go Normal file
View File

@ -0,0 +1,82 @@
package logging
import (
"net"
"time"
"github.com/op/go-logging"
)
const (
size = 64
path = "/tmp/ctop.sock"
)
var format = logging.MustStringFormatter(
`%{color}%{time:15:04:05.000} %{shortfunc} ▶ %{level:.4s} %{id:03x}%{color:reset} %{message}`,
)
type CTopLogger struct {
*logging.Logger
backend *logging.MemoryBackend
}
func (log *CTopLogger) Serve() {
ln, err := net.Listen("unix", path)
if err != nil {
panic(err)
}
for {
conn, err := ln.Accept()
if err != nil {
panic(err)
}
go log.handler(conn)
}
}
func (log *CTopLogger) handler(conn net.Conn) {
defer conn.Close()
for msg := range log.tail() {
conn.Write([]byte(msg))
}
}
func (log *CTopLogger) tail() chan string {
stream := make(chan string)
node := log.backend.Head()
go func() {
for {
stream <- node.Record.Formatted(0)
for {
nnode := node.Next()
if nnode != nil {
node = nnode
break
}
time.Sleep(1 * time.Second)
}
}
}()
return stream
}
func New(serverEnabled string) *CTopLogger {
log := &CTopLogger{
logging.MustGetLogger("ctop"),
logging.NewMemoryBackend(size),
}
logging.SetBackend(logging.NewBackendFormatter(log.backend, format))
log.Info("initialized logging")
if serverEnabled == "1" {
go log.Serve()
}
return log
}

View File

@ -1,9 +1,12 @@
package main
import (
"github.com/bcicen/ctop/logging"
ui "github.com/gizak/termui"
)
var log = logging.New(GlobalConfig["loggingEnabled"])
func main() {
if err := ui.Init(); err != nil {
panic(err)