Add Layout optional for SetupTime/AnswerTime for CDR

This commit is contained in:
TeoV
2019-06-04 15:06:31 +03:00
committed by Dan Christian Bogos
parent 2afcae57e0
commit a5f9be607e
2 changed files with 49 additions and 7 deletions

View File

@@ -331,9 +331,17 @@ func (cdr *CDR) exportFieldValue(cfgCdrFld *config.FCTemplate, filterS *FilterS)
cdrVal = cdr.FormatCost(cfgCdrFld.CostShiftDigits,
cfgCdrFld.RoundingDecimals)
case utils.SetupTime:
cdrVal = cdr.SetupTime.Format(cfgCdrFld.Layout)
if cfgCdrFld.Layout == "" {
cdrVal = cdr.SetupTime.Format(time.RFC3339)
} else {
cdrVal = cdr.SetupTime.Format(cfgCdrFld.Layout)
}
case utils.AnswerTime: // Format time based on layout
cdrVal = cdr.AnswerTime.Format(cfgCdrFld.Layout)
if cfgCdrFld.Layout == "" {
cdrVal = cdr.AnswerTime.Format(time.RFC3339)
} else {
cdrVal = cdr.AnswerTime.Format(cfgCdrFld.Layout)
}
case utils.Destination:
cdrVal, err = cdr.FieldAsString(rsrFld)
if err != nil {
@@ -356,10 +364,6 @@ func (cdr *CDR) exportFieldValue(cfgCdrFld *config.FCTemplate, filterS *FilterS)
func (cdr *CDR) formatField(cfgFld *config.FCTemplate, httpSkipTlsCheck bool,
groupedCDRs []*CDR, filterS *FilterS) (outVal string, err error) {
layout := cfgFld.Layout
if layout == "" {
layout = time.RFC3339
}
switch cfgFld.Type {
case utils.META_FILLER:
outVal, err = cfgFld.Value.ParseValue(utils.EmptyString)
@@ -374,7 +378,11 @@ func (cdr *CDR) formatField(cfgFld *config.FCTemplate, httpSkipTlsCheck bool,
if dtFld, err := utils.ParseTimeDetectLayout(rawVal, cfgFld.Timezone); err != nil { // Only one rule makes sense here
return "", err
} else {
outVal = dtFld.Format(layout)
if cfgFld.Layout == "" {
outVal = dtFld.Format(time.RFC3339)
} else {
outVal = dtFld.Format(cfgFld.Layout)
}
}
case utils.META_HTTP_POST:
var outValByte []byte

View File

@@ -1032,3 +1032,37 @@ func TestCDRAddDefaults(t *testing.T) {
t.Errorf("Expecting: %+v, received: %+v", eCDR, cdr)
}
}
func TestCDRexportFieldValue(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.DEFAULT_RUNID,
Usage: time.Duration(10) * time.Second,
Cost: 1.01,
ExtraFields: map[string]string{"field_extr1": "val_extr1", "fieldextr2": "valextr2"},
}
cfgCdrFld := &config.FCTemplate{Tag: "SetupTime", Type: utils.META_COMPOSED,
Value: config.NewRSRParsersMustCompile("~SetupTime", true, utils.INFIELD_SEP)}
eVal := "2013-11-07T08:42:20Z"
if val, err := cdr.exportFieldValue(cfgCdrFld, nil); err != nil {
t.Error(err)
} else if val != eVal {
t.Errorf("Expecting: %+v, received: %+v", eVal, val)
}
}