relay/internal/models/log_entry.go
2022-08-29 12:01:32 -07:00

78 lines
1.8 KiB
Go

package models
import (
"github.com/sirupsen/logrus"
"time"
)
type LogEntryType string
// LogEntry represents a event log entry.
type LogEntry struct {
ID int64 `validate:"-" bun:"id,pk,autoincrement"`
CreatedAt time.Time `validate:"-" bun:",nullzero,notnull,default:current_timestamp"`
Type LogEntryType `validate:"-" bun:",nullzero,notnull"`
MetaData string `validate:"-" bun:",nullzero,notnull"`
}
type LogEntryMetaData interface {
String() string
ToJSON() (string, error)
FromJSON(string) error
}
func (l *LogEntry) String() string {
log := logger.WithFields(logrus.Fields{
"func": "String",
"model": "LogEntry",
})
var metadata LogEntryMetaData
switch l.Type {
case LogEntryTypeBlockCreate:
metadata = &LogEntryBlockCreate{}
case LogEntryTypeBlockDelete:
metadata = &LogEntryBlockDelete{}
case LogEntryTypeBlockUpdate:
metadata = &LogEntryBlockUpdate{}
case LogEntryTypeInstanceDeliveryPaused:
metadata = &LogEntryInstanceDeliveryPaused{}
case LogEntryTypeInstanceDeliveryResumed:
metadata = &LogEntryInstanceDeliveryResumed{}
case LogEntryTypeInstanceJoin:
metadata = &LogEntryInstanceJoin{}
case LogEntryTypeInstanceKick:
metadata = &LogEntryInstanceKick{}
case LogEntryTypeInstanceLeft:
metadata = &LogEntryInstanceLeft{}
default:
log.Warnf("unhandled log entry type %s", l.Type)
return ""
}
err := metadata.FromJSON(l.MetaData)
if err != nil {
log.Warnf("can't decode json for event %s: %s", l.Type, err.Error())
return ""
}
return metadata.String()
}
func (l *LogEntry) SetMetaData(metadata LogEntryMetaData) error {
metaDataJson, err := metadata.ToJSON()
if err != nil {
return err
}
l.MetaData = metaDataJson
return nil
}
func (l *LogEntry) GetMetaData(metadata LogEntryMetaData) error {
return metadata.FromJSON(l.MetaData)
}