mirror of
https://github.com/mariocandela/beelzebub.git
synced 2025-07-01 18:47:26 -04:00
Feature: non-blocking tracer, changed license (#57)
* refactor tracer, introduce worker to avoid un-blocker trace strategy * fixed unit test and refactor dockerFile * buffered events chan * refactor yaml API core, initial web hook tracing implementations * added banner * changed license from GPL 3 to MIT * Edit readme
This commit is contained in:
@ -5,8 +5,11 @@ import (
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const Workers = 5
|
||||
|
||||
type Event struct {
|
||||
DateTime string
|
||||
RemoteAddr string
|
||||
@ -32,7 +35,7 @@ type Event struct {
|
||||
|
||||
type (
|
||||
Protocol int
|
||||
Status int
|
||||
Status int
|
||||
)
|
||||
|
||||
const (
|
||||
@ -63,7 +66,8 @@ type Tracer interface {
|
||||
}
|
||||
|
||||
type tracer struct {
|
||||
strategy Strategy
|
||||
strategy Strategy
|
||||
eventsChan chan Event
|
||||
}
|
||||
|
||||
var (
|
||||
@ -90,17 +94,32 @@ var (
|
||||
)
|
||||
|
||||
func Init(strategy Strategy) *tracer {
|
||||
return &tracer{
|
||||
strategy: strategy,
|
||||
tracer := &tracer{
|
||||
strategy: strategy,
|
||||
eventsChan: make(chan Event, Workers),
|
||||
}
|
||||
|
||||
for i := 0; i < Workers; i++ {
|
||||
go func(i int) {
|
||||
log.Debug("Init trace worker: ", i)
|
||||
for event := range tracer.eventsChan {
|
||||
tracer.strategy(event)
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
|
||||
return tracer
|
||||
}
|
||||
|
||||
func (tracer *tracer) setStrategy(strategy Strategy) {
|
||||
tracer.strategy = strategy
|
||||
}
|
||||
|
||||
func (tracer *tracer) TraceEvent(event Event) {
|
||||
event.DateTime = time.Now().UTC().Format(time.RFC3339)
|
||||
|
||||
tracer.strategy(event)
|
||||
tracer.eventsChan <- event
|
||||
|
||||
//Openmetrics
|
||||
eventsTotal.Inc()
|
||||
|
||||
switch event.Protocol {
|
||||
|
Reference in New Issue
Block a user