69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package event
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type EventDestType uint8
|
|
|
|
const (
|
|
EH_DEST_TYPE_DB EventDestType = iota + 1 // dest. type: data base
|
|
EH_DEST_TYPE_BRK // dest. type: data message broker
|
|
EH_DEST_TYPE_PIPE // dest. type: unix or nt pipe
|
|
)
|
|
|
|
const EH_WAIT_TIME time.Duration = (time.Second * 2) // sec to wait for retry
|
|
|
|
type MetaData map[string]any
|
|
|
|
func (m MetaData) Get(key string) (any, error) {
|
|
value, ok := m[key]
|
|
if !ok {
|
|
return nil, errors.New("key not found")
|
|
}
|
|
return value, nil
|
|
}
|
|
|
|
func (m MetaData) Set(key string, value any) {
|
|
m[key] = value
|
|
}
|
|
|
|
func (m MetaData) Delete(key string) {
|
|
delete(m, key)
|
|
}
|
|
|
|
func NewMetaData() MetaData {
|
|
return make(map[string]any)
|
|
}
|
|
|
|
// Event struct
|
|
type Event struct {
|
|
EventID string
|
|
EventTopic string
|
|
EventSender string
|
|
EventDestType EventDestType
|
|
EventMeta MetaData
|
|
EventData any
|
|
EventTime string
|
|
}
|
|
|
|
// NewEvent creates a new event
|
|
func NewEvent(eventSender, eventTopic string, eventMeta MetaData, eventData any) *Event {
|
|
// check if eventMeta is nil
|
|
if eventMeta == nil {
|
|
eventMeta = NewMetaData()
|
|
}
|
|
// return event
|
|
return &Event{
|
|
EventID: uuid.NewString(),
|
|
EventTopic: eventTopic,
|
|
EventSender: eventSender,
|
|
EventMeta: eventMeta,
|
|
EventData: eventData,
|
|
EventTime: time.Now().UTC().Format(time.RFC3339),
|
|
}
|
|
}
|