Implemented a wait function to get all queued messages sent before exiting
This commit is contained in:
parent
9f280a7883
commit
d45003d1a3
1 changed files with 48 additions and 13 deletions
37
lib.go
37
lib.go
|
|
@ -25,6 +25,8 @@ type VictoriaHandler struct {
|
||||||
Instance string
|
Instance string
|
||||||
URL string
|
URL string
|
||||||
|
|
||||||
|
waitCalled chan bool
|
||||||
|
queueLoopExited chan bool
|
||||||
handler slog.Handler
|
handler slog.Handler
|
||||||
filecounter int
|
filecounter int
|
||||||
logdir string
|
logdir string
|
||||||
|
|
@ -49,6 +51,8 @@ func New(w io.Writer, opts slog.HandlerOptions, logdir, url, application, system
|
||||||
vl.logdir = logdir
|
vl.logdir = logdir
|
||||||
|
|
||||||
vl.handler = slog.NewJSONHandler(w, &opts)
|
vl.handler = slog.NewJSONHandler(w, &opts)
|
||||||
|
vl.waitCalled = make(chan bool)
|
||||||
|
vl.queueLoopExited = make(chan bool)
|
||||||
|
|
||||||
// logdir is used to spool logfiles in case of
|
// logdir is used to spool logfiles in case of
|
||||||
err = os.MkdirAll(logdir, 0700)
|
err = os.MkdirAll(logdir, 0700)
|
||||||
|
|
@ -75,6 +79,10 @@ func (vl VictoriaHandler) Handle(ctx context.Context, record slog.Record) error
|
||||||
vl.queue(record)
|
vl.queue(record)
|
||||||
return vl.handler.Handle(ctx, record)
|
return vl.handler.Handle(ctx, record)
|
||||||
} // }}}
|
} // }}}
|
||||||
|
func (vl VictoriaHandler) Wait() { // {{{
|
||||||
|
vl.waitCalled <- true
|
||||||
|
<- vl.queueLoopExited
|
||||||
|
} // }}}
|
||||||
|
|
||||||
func (vl *VictoriaHandler) diskHandler() { // {{{
|
func (vl *VictoriaHandler) diskHandler() { // {{{
|
||||||
for {
|
for {
|
||||||
|
|
@ -113,13 +121,40 @@ func (vl *VictoriaHandler) diskHandler() { // {{{
|
||||||
} // }}}
|
} // }}}
|
||||||
func (vl *VictoriaHandler) queueHandler() { // {{{
|
func (vl *VictoriaHandler) queueHandler() { // {{{
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
queueLoop:
|
||||||
for {
|
for {
|
||||||
msg := <-vl.logQueue
|
|
||||||
|
msgLoop:
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case msg := <-vl.logQueue:
|
||||||
err = vl.send(msg)
|
err = vl.send(msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
vl.logToFile(msg)
|
vl.logToFile(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This can be selected while there still are messages in logQueue.
|
||||||
|
case <-vl.waitCalled:
|
||||||
|
break msgLoop
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Another turn on log queue to gather up all remaining messages.
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case msg := <-vl.logQueue:
|
||||||
|
err = vl.send(msg)
|
||||||
|
if err != nil {
|
||||||
|
vl.logToFile(msg)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break queueLoop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vl.queueLoopExited <- true
|
||||||
} // }}}
|
} // }}}
|
||||||
|
|
||||||
func (vl *VictoriaHandler) queue(rec slog.Record) { // {{{
|
func (vl *VictoriaHandler) queue(rec slog.Record) { // {{{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue