[client] add resource id fields to netflow events (#3445)

* [client] add resource id fields to netflow events
This commit is contained in:
hakansa
2025-03-14 18:57:23 +08:00
committed by GitHub
parent 78b86e0beb
commit 64f27aee55
17 changed files with 279 additions and 82 deletions
+22 -4
View File
@@ -2,6 +2,7 @@ package logger
import (
"context"
"net"
"sync"
"sync/atomic"
"time"
@@ -11,6 +12,7 @@ import (
"github.com/netbirdio/netbird/client/internal/netflow/store"
"github.com/netbirdio/netbird/client/internal/netflow/types"
"github.com/netbirdio/netbird/client/internal/peer"
)
type rcvChan chan *types.EventFields
@@ -21,15 +23,20 @@ type Logger struct {
enabled atomic.Bool
rcvChan atomic.Pointer[rcvChan]
cancelReceiver context.CancelFunc
statusRecorder *peer.Status
wgIfaceIPNet net.IPNet
Store types.Store
}
func New(ctx context.Context) *Logger {
func New(ctx context.Context, statusRecorder *peer.Status, wgIfaceIPNet net.IPNet) *Logger {
ctx, cancel := context.WithCancel(ctx)
return &Logger{
ctx: ctx,
cancel: cancel,
Store: store.NewMemoryStore(),
ctx: ctx,
cancel: cancel,
statusRecorder: statusRecorder,
wgIfaceIPNet: wgIfaceIPNet,
Store: store.NewMemoryStore(),
}
}
@@ -80,6 +87,17 @@ func (l *Logger) startReceiver() {
EventFields: *eventFields,
Timestamp: time.Now(),
}
if event.Direction == types.Ingress {
if !l.wgIfaceIPNet.Contains(net.IP(event.SourceIP.AsSlice())) {
event.SourceResourceID = []byte(l.statusRecorder.CheckRoutes(event.SourceIP))
}
} else if event.Direction == types.Egress {
if !l.wgIfaceIPNet.Contains(net.IP(event.DestIP.AsSlice())) {
event.DestResourceID = []byte(l.statusRecorder.CheckRoutes(event.DestIP))
}
}
l.Store.StoreEvent(&event)
}
}
@@ -2,6 +2,7 @@ package logger_test
import (
"context"
"net"
"testing"
"time"
@@ -12,7 +13,7 @@ import (
)
func TestStore(t *testing.T) {
logger := logger.New(context.Background())
logger := logger.New(context.Background(), nil, net.IPNet{})
logger.Enable()
event := types.EventFields{