fix: remove status mutation side effect in PublishEventToUI
- stop overwriting record.Status inside the publish function - status should be managed by the caller, not the publisher
This commit is contained in:
parent
2f7cd5a8fc
commit
715183994c
|
|
@ -49,8 +49,6 @@ func initUIEventChannel(ctx context.Context) (*amqp.Channel, error) {
|
||||||
// to the UI-facing fanout exchange. Intended to be called after the event has
|
// to the UI-facing fanout exchange. Intended to be called after the event has
|
||||||
// been successfully persisted to the database.
|
// been successfully persisted to the database.
|
||||||
func PublishEventToUI(ctx context.Context, ch *amqp.Channel, record *EventRecord) error {
|
func PublishEventToUI(ctx context.Context, ch *amqp.Channel, record *EventRecord) error {
|
||||||
record.Status = constants.EventStatusReported
|
|
||||||
|
|
||||||
body, err := json.Marshal(record)
|
body, err := json.Marshal(record)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(ctx, "marshal event record for UI publish failed", "event_uuid", record.EventUUID, "error", err)
|
logger.Error(ctx, "marshal event record for UI publish failed", "event_uuid", record.EventUUID, "error", err)
|
||||||
|
|
|
||||||
|
|
@ -127,24 +127,25 @@ func processAlarmEventMessage(ctx context.Context, msg amqp.Delivery, uiCh *amqp
|
||||||
mongodbClient := database.GetMongoClient()
|
mongodbClient := database.GetMongoClient()
|
||||||
|
|
||||||
var alarmEvent EventRecord
|
var alarmEvent EventRecord
|
||||||
err := json.Unmarshal(msg.Body, &alarmEvent)
|
if err := json.Unmarshal(msg.Body, &alarmEvent); err != nil {
|
||||||
if err != nil {
|
|
||||||
logger.Error(ctx, "unmarshal alarm event message failed", "error", err)
|
logger.Error(ctx, "unmarshal alarm event message failed", "error", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
alarmEvent.IsPersisted = true
|
alarmEvent.IsPersisted = true
|
||||||
|
alarmEvent.Status = constants.EventStatusReported
|
||||||
|
|
||||||
result, err := mongodbClient.Database(constants.EventDBName).Collection(constants.EventCollectionName).InsertOne(ctx, alarmEvent)
|
result, err := mongodbClient.Database(constants.EventDBName).Collection(constants.EventCollectionName).InsertOne(ctx, alarmEvent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(ctx, "failed to insert alarm event into database", "error", err)
|
logger.Error(ctx, "failed to insert alarm event into database", "error", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = msg.Ack(false)
|
logger.Info(ctx, "alarm event inserted into database", "result", result)
|
||||||
if err != nil {
|
|
||||||
|
if err := msg.Ack(false); err != nil {
|
||||||
logger.Error(ctx, "ack alarm event message failed", "error", err)
|
logger.Error(ctx, "ack alarm event message failed", "error", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
logger.Info(ctx, "alarm event inserted into database", "result", result)
|
|
||||||
|
|
||||||
if err := PublishEventToUI(ctx, uiCh, &alarmEvent); err != nil {
|
if err := PublishEventToUI(ctx, uiCh, &alarmEvent); err != nil {
|
||||||
logger.Error(ctx, "publish alarm event to UI failed", "event_uuid", alarmEvent.EventUUID, "error", err)
|
logger.Error(ctx, "publish alarm event to UI failed", "event_uuid", alarmEvent.EventUUID, "error", err)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue