eventRT/event/upload_event.go

57 lines
1.3 KiB
Go

package event
import (
"context"
"eventRT/constants"
"eventRT/database"
"eventRT/logger"
"time"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
)
func PersistAndPublishEvent(ctx context.Context, record *EventRecord) error {
ctx, span := otel.Tracer("eventRT/event").Start(ctx, "PersistAndPublishEvent")
defer span.End()
span.SetAttributes(
attribute.String("event_uuid", record.EventUUID),
)
record.IsPersisted = true
record.Status = constants.EventStatusReported
record.Operations = append(record.Operations, OperationRecord{
Action: "report",
Op: "eventrt", // TODO
TS: time.Now().UnixMilli(),
})
dbCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
_, err := database.GetMongoClient().Database(constants.EventDBName).
Collection(constants.EventCollectionName).
InsertOne(dbCtx, record)
if err != nil {
logger.Error(ctx, "insert event into database failed",
"error", err, "event", record)
return err
}
uiCh, err := initUIEventChannel(ctx)
if err != nil {
logger.Error(ctx, "init UI event channel failed", "error", err)
return nil
}
defer uiCh.Close()
if err := PublishEventToUI(ctx, uiCh, record); err != nil {
logger.Error(ctx, "publish event to UI failed",
"event_uuid", record.EventUUID, "error", err)
return nil
}
return nil
}