github.com/nais/knorten@v0.0.0-20240104110906-55926958e361/pkg/events/eventlogs.go (about)

     1  package events
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/google/uuid"
     8  	"github.com/nais/knorten/pkg/database"
     9  	"github.com/nais/knorten/pkg/database/gensql"
    10  	"github.com/sirupsen/logrus"
    11  )
    12  
    13  type EventLogger struct {
    14  	eventID uuid.UUID
    15  	log     *logrus.Entry
    16  	repo    database.Repository
    17  	context context.Context
    18  }
    19  
    20  func (e EventLogger) Info(messages ...any) {
    21  	for _, message := range messages {
    22  		messageAsString := fmt.Sprint(message)
    23  
    24  		e.log.Info(messageAsString)
    25  		err := e.repo.EventLogCreate(e.context, e.eventID, messageAsString, database.LogTypeInfo)
    26  		if err != nil {
    27  			e.log.WithError(err).Error("can't write event to database")
    28  		}
    29  	}
    30  }
    31  
    32  func (e EventLogger) Infof(template string, arg ...any) {
    33  	e.Info(fmt.Sprintf(template, arg...))
    34  }
    35  
    36  // Error will not create event logs for users.
    37  func (e EventLogger) Error(messages ...any) {
    38  	for _, message := range messages {
    39  		messageAsString := fmt.Sprint(message)
    40  		e.log.Error(messageAsString)
    41  	}
    42  }
    43  
    44  // Errorf will not create event logs for users.
    45  func (e EventLogger) Errorf(template string, arg ...any) {
    46  	e.Error(fmt.Sprintf(template, arg...))
    47  }
    48  
    49  func (e EventLogger) WithError(err error) *logrus.Entry {
    50  	return e.log.WithError(err)
    51  }
    52  
    53  func newEventLogger(ctx context.Context, log *logrus.Entry, repo database.Repository, event gensql.Event) EventLogger {
    54  	return EventLogger{
    55  		eventID: event.ID,
    56  		log:     log.WithField("eventType", event.Type).WithField("eventID", event.ID),
    57  		repo:    repo,
    58  		context: ctx,
    59  	}
    60  }