123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package logic
- import (
- "context"
- "encoding/json"
- "log/slog"
- "time"
- "github.com/google/go-cmp/cmp"
- "github.com/google/uuid"
- "github.com/gravitl/netmaker/db"
- "github.com/gravitl/netmaker/logic"
- "github.com/gravitl/netmaker/models"
- "github.com/gravitl/netmaker/schema"
- )
- var EventActivityCh = make(chan models.Event, 100)
- func LogEvent(a *models.Event) {
- EventActivityCh <- *a
- }
- func EventRententionHook() error {
- settings := logic.GetServerSettings()
- retentionPeriod := settings.AuditLogsRetentionPeriodInDays
- if retentionPeriod <= 0 {
- retentionPeriod = 30
- }
- err := (&schema.Event{}).DeleteOldEvents(db.WithContext(context.TODO()), retentionPeriod)
- if err != nil {
- slog.Warn("failed to delete old events pas retention period", "error", err)
- }
- return nil
- }
- func EventWatcher() {
- logic.HookManagerCh <- models.HookDetails{
- Hook: EventRententionHook,
- Interval: time.Hour * 24,
- }
- for e := range EventActivityCh {
- if e.Action == models.Update {
- // check if diff
- if cmp.Equal(e.Diff.Old, e.Diff.New) {
- continue
- }
- }
- sourceJson, _ := json.Marshal(e.Source)
- dstJson, _ := json.Marshal(e.Target)
- diff, _ := json.Marshal(e.Diff)
- a := schema.Event{
- ID: uuid.New().String(),
- Action: e.Action,
- Source: sourceJson,
- Target: dstJson,
- Origin: e.Origin,
- NetworkID: e.NetworkID,
- TriggeredBy: e.TriggeredBy,
- Diff: diff,
- TimeStamp: time.Now().UTC(),
- }
- a.Create(db.WithContext(context.TODO()))
- }
- }
|