mirror of
https://git.ptzo.gdn/feditools/relay.git
synced 2024-09-21 17:37:12 +00:00
78 lines
1.8 KiB
Go
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)
|
|
}
|