diff --git a/engine/cdr.go b/engine/cdr.go index 8c551c655..19d8e261a 100644 --- a/engine/cdr.go +++ b/engine/cdr.go @@ -71,17 +71,6 @@ func NewCDRFromExternalCDR(extCdr *ExternalCDR, timezone string) (*CDR, error) { return cdr, nil } -func NewCDRWithDefaults(cfg *config.CGRConfig) *CDR { - return &CDR{ - ToR: utils.VOICE, - RequestType: cfg.GeneralCfg().DefaultReqType, - Tenant: cfg.GeneralCfg().DefaultTenant, - Category: cfg.GeneralCfg().DefaultCategory, - ExtraFields: make(map[string]string), - Cost: -1, - } -} - type CDR struct { CGRID string RunID string @@ -427,36 +416,6 @@ func (cdr *CDR) AsExportRecord(exportFields []*config.FCTemplate, return expRecord, nil } -// AsExportMap converts the CDR into a map[string]string based on export template -// Used in real-time replication as well as remote exports -func (cdr *CDR) AsExportMap(exportFields []*config.FCTemplate, httpSkipTLSCheck bool, - groupedCDRs []*CDR, filterS *FilterS) (expMap map[string]string, err error) { - expMap = make(map[string]string) - nM := utils.MapStorage{ - utils.MetaReq: cdr.AsMapStringIface(), - utils.MetaEC: cdr.CostDetails, - } - for _, cfgFld := range exportFields { - if !strings.HasPrefix(cfgFld.Path, utils.MetaExp+utils.NestingSep) { - continue - } - if pass, err := filterS.Pass(cdr.Tenant, - cfgFld.Filters, nM); err != nil { - return nil, err - } else if !pass { - continue - } - var fmtOut string - if fmtOut, err = cdr.formatField(cfgFld, httpSkipTLSCheck, groupedCDRs, filterS); err != nil { - utils.Logger.Warning(fmt.Sprintf(" error: %s exporting field: %s, CDR: %s\n", - err.Error(), utils.ToJSON(cfgFld), utils.ToJSON(cdr))) - return nil, err - } - expMap[strings.TrimPrefix(cfgFld.Path, utils.MetaExp+utils.NestingSep)] += fmtOut - } - return -} - // AsCDRsql converts the CDR into the format used for SQL storage func (cdr *CDR) AsCDRsql() (cdrSQL *CDRsql) { cdrSQL = new(CDRsql) @@ -492,75 +451,6 @@ func (cdr *CDR) AsCGREvent() *utils.CGREvent { } } -// UpdateFromCGREvent will update CDR with event fields from CGREvent -func (cdr *CDR) UpdateFromCGREvent(cgrEv *utils.CGREvent, fields []string) (err error) { - for _, fldName := range fields { - fldName = strings.TrimPrefix(fldName, utils.MetaReq+utils.NestingSep) - if _, has := cgrEv.Event[fldName]; !has { - continue //maybe removed - } - switch fldName { - case utils.OriginHost: - if cdr.OriginHost, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.Source: - if cdr.Source, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.ToR: - if cdr.ToR, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.RequestType: - if cdr.RequestType, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.Tenant: - if cdr.Tenant, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.Category: - if cdr.Category, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.Account: - if cdr.Account, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.Subject: - if cdr.Subject, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.Destination: - if cdr.Destination, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - case utils.SetupTime: - if cdr.SetupTime, err = cgrEv.FieldAsTime(fldName, - config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { - return - } - case utils.AnswerTime: - if cdr.AnswerTime, err = cgrEv.FieldAsTime(fldName, - config.CgrConfig().GeneralCfg().DefaultTimezone); err != nil { - return - } - case utils.Usage: - if cdr.Usage, err = cgrEv.FieldAsDuration(fldName); err != nil { - return - } - default: - var fldVal string - if fldVal, err = cgrEv.FieldAsString(fldName); err != nil { - return - } - cdr.ExtraFields[fldName] = fldVal - } - } - return -} - // NewCDRFromSQL converts the CDRsql into CDR func NewCDRFromSQL(cdrSQL *CDRsql) (cdr *CDR, err error) { cdr = new(CDR) @@ -636,28 +526,6 @@ type UsageRecord struct { ExtraFields map[string]string } -func (self *UsageRecord) AsCDR(timezone string) (*CDR, error) { - var err error - cdr := &CDR{CGRID: self.GetId(), ToR: self.ToR, RequestType: self.RequestType, Tenant: self.Tenant, - Category: self.Category, Account: self.Account, Subject: self.Subject, Destination: self.Destination} - if cdr.SetupTime, err = utils.ParseTimeDetectLayout(self.SetupTime, timezone); err != nil { - return nil, err - } - if cdr.AnswerTime, err = utils.ParseTimeDetectLayout(self.AnswerTime, timezone); err != nil { - return nil, err - } - if cdr.Usage, err = utils.ParseDurationWithNanosecs(self.Usage); err != nil { - return nil, err - } - if self.ExtraFields != nil { - cdr.ExtraFields = make(map[string]string) - } - for k, v := range self.ExtraFields { - cdr.ExtraFields[k] = v - } - return cdr, nil -} - func (self *UsageRecord) AsCallDescriptor(timezone string, denyNegative bool) (*CallDescriptor, error) { var err error cd := &CallDescriptor{ diff --git a/engine/cdr_test.go b/engine/cdr_test.go index d64dd3fb8..3a0846163 100644 --- a/engine/cdr_test.go +++ b/engine/cdr_test.go @@ -410,25 +410,6 @@ func TestCDRAsExternalCDR(t *testing.T) { } } -func TesUsageReqAsCDR(t *testing.T) { - setupReq := &UsageRecord{ToR: utils.VOICE, RequestType: utils.META_RATED, - Tenant: "cgrates.org", Category: "call", - Account: "1001", Subject: "1001", Destination: "1002", - SetupTime: "2013-11-07T08:42:20Z", AnswerTime: "2013-11-07T08:42:26Z", - Usage: "0.00000001"} - eStorCdr := &CDR{ToR: utils.VOICE, RequestType: utils.META_RATED, - Tenant: "cgrates.org", Category: "call", Account: "1001", - Subject: "1001", Destination: "1002", - SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), - AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), - Usage: time.Duration(10)} - if CDR, err := setupReq.AsCDR(""); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(eStorCdr, CDR) { - t.Errorf("Expected: %+v, received: %+v", eStorCdr, CDR) - } -} - func TestUsageReqAsCD(t *testing.T) { req := &UsageRecord{ToR: utils.VOICE, RequestType: utils.META_RATED, Tenant: "cgrates.org", Category: "call", @@ -843,37 +824,6 @@ func TestCDRAsExportRecord(t *testing.T) { } -func TestCDRAsExportMap(t *testing.T) { - cdr := &CDR{CGRID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), - OrderID: 123, ToR: utils.VOICE, OriginID: "dsafdsaf", - OriginHost: "192.168.1.1", Source: utils.UNIT_TEST, RequestType: utils.META_RATED, - Tenant: "cgrates.org", Category: "call", Account: "1001", - Subject: "1001", Destination: "+4986517174963", - SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), - AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), RunID: utils.MetaDefault, - Usage: time.Duration(10) * time.Second, Cost: 1.01, - ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, - } - eCDRMp := map[string]string{ - utils.CGRID: cdr.CGRID, - utils.Destination: "004986517174963", - "FieldExtra1": "val_extr1", - } - expFlds := []*config.FCTemplate{ - &config.FCTemplate{Path: utils.MetaExp + utils.NestingSep + utils.CGRID, Type: utils.META_COMPOSED, - Value: config.NewRSRParsersMustCompile(utils.DynamicDataPrefix+utils.MetaReq+utils.NestingSep+utils.CGRID, utils.INFIELD_SEP)}, - &config.FCTemplate{Path: utils.MetaExp + utils.NestingSep + utils.Destination, Type: utils.META_COMPOSED, - Value: config.NewRSRParsersMustCompile("~*req.Destination:s/^\\+(\\d+)$/00${1}/", utils.INFIELD_SEP)}, - &config.FCTemplate{Path: utils.MetaExp + utils.NestingSep + "FieldExtra1", Type: utils.META_COMPOSED, - Value: config.NewRSRParsersMustCompile("~*req.field_extr1", utils.INFIELD_SEP)}, - } - if cdrMp, err := cdr.AsExportMap(expFlds, false, nil, nil); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(eCDRMp, cdrMp) { - t.Errorf("Expecting: %+v, received: %+v", eCDRMp, cdrMp) - } -} - func TestCDRAsCDRsql(t *testing.T) { cdr := &CDR{CGRID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), OrderID: 123, @@ -1037,85 +987,6 @@ func TestCDRAsCGREvent(t *testing.T) { } } -func TestCDRUpdateFromCGREvent(t *testing.T) { - cdr := &CDR{ - CGRID: utils.Sha1("dsafdsaf", time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC).String()), - OrderID: 123, - ToR: utils.VOICE, - OriginID: "dsafdsaf", - OriginHost: "192.168.1.1", - Source: utils.UNIT_TEST, - RequestType: utils.META_RATED, - Tenant: "cgrates.org", - Category: "call", - Account: "1001", - Subject: "1001", - Destination: "+4986517174963", - SetupTime: time.Date(2013, 11, 7, 8, 42, 20, 0, time.UTC), - AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), - RunID: utils.MetaDefault, - Usage: time.Duration(10) * time.Second, - Cost: 1.01, - ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, - } - var costdetails *CallCost - cgrEvent := &utils.CGREvent{ - Tenant: "cgrates.org", - ID: "GenePreRated", - Event: map[string]interface{}{ - "Account": "1001", - "AnswerTime": time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), - "CGRID": cdr.CGRID, - "Category": "call", - "Cost": 1.01, - "CostDetails": costdetails, - "CostSource": "", - "Destination": "+4986517174963", - "ExtraInfo": "", - "OrderID": int64(123), - "OriginHost": "192.168.1.2", - "OriginID": "dsafdsaf", - "Partial": false, - "RequestType": "*PreRated", - "RunID": utils.MetaDefault, - "SetupTime": time.Date(2013, 11, 7, 8, 42, 23, 0, time.UTC), - "Source": "UNIT_TEST", - "Subject": "1001", - "Tenant": "cgrates.org", - "ToR": "*voice", - "Usage": time.Duration(13) * time.Second, - "field_extr1": "val_extr1", - "fieldextr2": "valextr2", - "PreRated": false, - }, - } - eCDR := &CDR{ - CGRID: cdr.CGRID, - OrderID: 123, - ToR: utils.VOICE, - OriginID: "dsafdsaf", - OriginHost: "192.168.1.2", - Source: utils.UNIT_TEST, - RequestType: utils.META_RATED, - Tenant: "cgrates.org", - Category: "call", - Account: "1001", - Subject: "1001", - Destination: "+4986517174963", - SetupTime: time.Date(2013, 11, 7, 8, 42, 23, 0, time.UTC), - AnswerTime: time.Date(2013, 11, 7, 8, 42, 26, 0, time.UTC), - RunID: utils.MetaDefault, - Usage: time.Duration(13) * time.Second, - Cost: 1.01, - ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"}, - } - if err := cdr.UpdateFromCGREvent(cgrEvent, []string{"OriginHost", "SetupTime", "Usage"}); err != nil { - t.Error(err) - } else if !reflect.DeepEqual(cdr, eCDR) { - t.Errorf("Expecting: %+v, received: %+v", cdr, eCDR) - } -} - func TestCDRAddDefaults(t *testing.T) { cdr := &CDR{ OriginID: "dsafdsaf",