mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Added on wire event format
This commit is contained in:
@@ -1,8 +1,63 @@
|
||||
package events
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Events can be passed to external systems via for example AMPQ
|
||||
// Treat these events as basically DTOs so changes has to be backward compatible
|
||||
|
||||
type AccountCreated struct {
|
||||
Name string `json:"name"`
|
||||
type Priority string
|
||||
|
||||
const (
|
||||
PRIO_DEBUG Priority = "DEBUG"
|
||||
PRIO_INFO Priority = "INFO"
|
||||
PRIO_ERROR Priority = "ERROR"
|
||||
)
|
||||
|
||||
type Event struct {
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
}
|
||||
|
||||
type OnTheWireEvent struct {
|
||||
EventType string `json:"event_type"`
|
||||
Priority Priority `json:"priority"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Payload interface{} `json:"payload"`
|
||||
}
|
||||
|
||||
type EventBase interface {
|
||||
ToOnWriteEvent() *OnTheWireEvent
|
||||
}
|
||||
|
||||
func ToOnWriteEvent(event interface{}) (*OnTheWireEvent, error) {
|
||||
eventType := reflect.TypeOf(event)
|
||||
|
||||
wireEvent := OnTheWireEvent{
|
||||
Priority: PRIO_INFO,
|
||||
EventType: eventType.Name(),
|
||||
Payload: event,
|
||||
}
|
||||
|
||||
baseField := reflect.ValueOf(event).FieldByName("Timestamp")
|
||||
if baseField.IsValid() {
|
||||
wireEvent.Timestamp = baseField.Interface().(time.Time)
|
||||
} else {
|
||||
wireEvent.Timestamp = time.Now()
|
||||
}
|
||||
|
||||
return &wireEvent, nil
|
||||
}
|
||||
|
||||
type AccountCreated struct {
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Id int64 `json:"id"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type AccountUpdated struct {
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Id int64 `json:"id"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user