diff --git a/engine/chargers.go b/engine/chargers.go index 27575e31a..241702e95 100644 --- a/engine/chargers.go +++ b/engine/chargers.go @@ -113,10 +113,11 @@ func (cS *ChargerS) processEvent(ctx *context.Context, tnt string, cgrEv *utils. clonedEv.Tenant = tnt clonedEv.APIOpts[utils.MetaRunID] = cP.RunID clonedEv.APIOpts[utils.Subsys] = utils.MetaChargers + clonedEv.APIOpts[utils.MetaChargeID] = utils.Sha1(utils.IfaceAsString(clonedEv.Event[utils.CGRID]), cP.RunID) rply[i] = &ChrgSProcessEventReply{ ChargerSProfile: cP.ID, CGREvent: clonedEv, - AlteredFields: []string{utils.MetaOptsRunID}, + AlteredFields: []string{utils.MetaOptsRunID, utils.MetaChargeID}, } if len(cP.AttributeIDs) == 1 && cP.AttributeIDs[0] == utils.MetaNone { continue // AttributeS disabled diff --git a/utils/cgrevent.go b/utils/cgrevent.go index 61dbcaaab..4d3af2ae7 100644 --- a/utils/cgrevent.go +++ b/utils/cgrevent.go @@ -110,6 +110,15 @@ func (cgrEv *CGREvent) AsDataProvider() (ev MapStorage) { } } +func (cgrEv *CGREvent) GetCDRUniqueID() string { + if chargeId, ok := cgrEv.APIOpts[MetaChargeID]; ok { + return IfaceAsString(chargeId) + } else if cgrId, ok := cgrEv.Event[CGRID]; ok { + return IfaceAsString(cgrId) + } + return UUIDSha1Prefix() +} + // EventWithFlags is used where flags are needed to mark processing type EventWithFlags struct { Flags []string diff --git a/utils/consts.go b/utils/consts.go index b4a661021..1db2eb272 100644 --- a/utils/consts.go +++ b/utils/consts.go @@ -791,6 +791,7 @@ const ( MetaCDR = "*cdr" MetaExporterIDs = "*exporterIDs" MetaExporterID = "*exporterID" + MetaChargeID = "*chargeID" MetaAsync = "*async" MetaUsage = "*usage" MetaStartTime = "*startTime"