Add log buffer site

This commit is contained in:
2020-10-12 00:16:23 +02:00
parent 2a1ef7f2cb
commit 866a7a8b81
8 changed files with 134 additions and 2 deletions

33
logbuffer/logbuffer.go Normal file
View File

@@ -0,0 +1,33 @@
package logbuffer
import (
"fmt"
"github.com/gin-gonic/gin"
"time"
)
func UseLogBuffer(queue *Queue) gin.HandlerFunc {
return gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string {
output := fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"\n",
param.ClientIP,
param.TimeStamp.Format(time.RFC1123),
param.Method,
param.Path,
param.Request.Proto,
param.StatusCode,
param.Latency,
param.Request.UserAgent(),
param.ErrorMessage,
)
// Write the output to our queue
queue.push(output)
queue.Limit(50)
// Return nothing
return ""
})
}

44
logbuffer/queue.go Normal file
View File

@@ -0,0 +1,44 @@
package logbuffer
import "container/list"
type Queue struct {
queue *list.List
}
func New() *Queue{
return &Queue{queue: list.New()}
}
func (q Queue)push(value interface{}) {
q.queue.PushBack(value)
}
func (q Queue)pop() interface{} {
element := q.queue.Front()
value := element.Value
q.queue.Remove(element)
return value
}
func (q Queue)Length() int {
return q.queue.Len()
}
// Limit the amount of items in the queue
func (q Queue)Limit(items int) {
for q.Length() > items {
// Remove items
q.pop()
}
}
func (q Queue)ToSlice() []string {
var slice []string
element := q.queue.Front()
for i := 0; i < q.Length(); i++ {
slice = append(slice, element.Value.(string))
element = element.Next()
}
return slice
}