mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
CDRC/CDRE templates cdr_field_id renamed to field_id so we can use it in diameter also
This commit is contained in:
@@ -352,10 +352,10 @@ func (self *CCR) AsSMGenericEvent(tpl []*config.CfgCdrField) (sessionmanager.SMG
|
||||
outVal += avpValAsString(matchingAvps[0])
|
||||
}
|
||||
}
|
||||
if _, hasKey := outMap[fldTpl.CdrFieldId]; !hasKey {
|
||||
outMap[fldTpl.CdrFieldId] = outVal
|
||||
if _, hasKey := outMap[fldTpl.FieldId]; !hasKey {
|
||||
outMap[fldTpl.FieldId] = outVal
|
||||
} else { // If already there, postpend
|
||||
outMap[fldTpl.CdrFieldId] += outVal
|
||||
outMap[fldTpl.FieldId] += outVal
|
||||
}
|
||||
}
|
||||
return sessionmanager.SMGenericEvent(utils.ConvertMapValStrIf(outMap)), nil
|
||||
|
||||
@@ -283,7 +283,7 @@ func (self *CsvRecordsProcessor) recordToStoredCdr(record []string, cdrcId strin
|
||||
var lazyHttpFields []*config.CfgCdrField
|
||||
for _, cdrFldCfg := range self.cdrcCfgs[cdrcId].ContentFields {
|
||||
if utils.IsSliceMember([]string{utils.KAM_FLATSTORE, utils.OSIPS_FLATSTORE}, self.dfltCdrcCfg.CdrFormat) { // Hardcode some values in case of flatstore
|
||||
switch cdrFldCfg.CdrFieldId {
|
||||
switch cdrFldCfg.FieldId {
|
||||
case utils.ACCID:
|
||||
cdrFldCfg.Value = utils.ParseRSRFieldsMustCompile("3;1;2", utils.INFIELD_SEP) // in case of flatstore, accounting id is made up out of callid, from_tag and to_tag
|
||||
case utils.USAGE:
|
||||
@@ -309,7 +309,7 @@ func (self *CsvRecordsProcessor) recordToStoredCdr(record []string, cdrcId strin
|
||||
} else {
|
||||
return nil, fmt.Errorf("Unsupported field type: %s", cdrFldCfg.Type)
|
||||
}
|
||||
if err := storedCdr.ParseFieldValue(cdrFldCfg.CdrFieldId, fieldVal, self.timezone); err != nil {
|
||||
if err := storedCdr.ParseFieldValue(cdrFldCfg.FieldId, fieldVal, self.timezone); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -330,7 +330,7 @@ func (self *CsvRecordsProcessor) recordToStoredCdr(record []string, cdrcId strin
|
||||
if len(fieldVal) == 0 && httpFieldCfg.Mandatory {
|
||||
return nil, fmt.Errorf("MandatoryIeMissing: Empty result for http_post field: %s", httpFieldCfg.Tag)
|
||||
}
|
||||
if err := storedCdr.ParseFieldValue(httpFieldCfg.CdrFieldId, fieldVal, self.timezone); err != nil {
|
||||
if err := storedCdr.ParseFieldValue(httpFieldCfg.FieldId, fieldVal, self.timezone); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ func (self *FwvRecordsProcessor) recordToStoredCdr(record string, cfgKey string)
|
||||
//return nil, fmt.Errorf("Unsupported field type: %s", cdrFldCfg.Type)
|
||||
continue // Don't do anything for unsupported fields
|
||||
}
|
||||
if err := storedCdr.ParseFieldValue(cdrFldCfg.CdrFieldId, fieldVal, self.timezone); err != nil {
|
||||
if err := storedCdr.ParseFieldValue(cdrFldCfg.FieldId, fieldVal, self.timezone); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -221,7 +221,7 @@ func (self *FwvRecordsProcessor) recordToStoredCdr(record string, cfgKey string)
|
||||
if len(fieldVal) == 0 && httpFieldCfg.Mandatory {
|
||||
return nil, fmt.Errorf("MandatoryIeMissing: Empty result for http_post field: %s", httpFieldCfg.Tag)
|
||||
}
|
||||
if err := storedCdr.ParseFieldValue(httpFieldCfg.CdrFieldId, fieldVal, self.timezone); err != nil {
|
||||
if err := storedCdr.ParseFieldValue(httpFieldCfg.FieldId, fieldVal, self.timezone); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,13 +29,13 @@ func TestCdreCfgClone(t *testing.T) {
|
||||
emptyFields := []*CfgCdrField{}
|
||||
initContentFlds := []*CfgCdrField{
|
||||
&CfgCdrField{Tag: "CgrId",
|
||||
Type: "cdrfield",
|
||||
CdrFieldId: "cgrid",
|
||||
Value: cgrIdRsrs},
|
||||
Type: "cdrfield",
|
||||
FieldId: "cgrid",
|
||||
Value: cgrIdRsrs},
|
||||
&CfgCdrField{Tag: "RunId",
|
||||
Type: "cdrfield",
|
||||
CdrFieldId: "mediation_runid",
|
||||
Value: runIdRsrs},
|
||||
Type: "cdrfield",
|
||||
FieldId: "mediation_runid",
|
||||
Value: runIdRsrs},
|
||||
}
|
||||
initCdreCfg := &CdreConfig{
|
||||
CdrFormat: "csv",
|
||||
@@ -51,13 +51,13 @@ func TestCdreCfgClone(t *testing.T) {
|
||||
}
|
||||
eClnContentFlds := []*CfgCdrField{
|
||||
&CfgCdrField{Tag: "CgrId",
|
||||
Type: "cdrfield",
|
||||
CdrFieldId: "cgrid",
|
||||
Value: cgrIdRsrs},
|
||||
Type: "cdrfield",
|
||||
FieldId: "cgrid",
|
||||
Value: cgrIdRsrs},
|
||||
&CfgCdrField{Tag: "RunId",
|
||||
Type: "cdrfield",
|
||||
CdrFieldId: "mediation_runid",
|
||||
Value: runIdRsrs},
|
||||
Type: "cdrfield",
|
||||
FieldId: "mediation_runid",
|
||||
Value: runIdRsrs},
|
||||
}
|
||||
eClnCdreCfg := &CdreConfig{
|
||||
CdrFormat: "csv",
|
||||
@@ -89,9 +89,9 @@ func TestCdreCfgClone(t *testing.T) {
|
||||
if initCdreCfg.CostShiftDigits != 0 {
|
||||
t.Error("Unexpected CostShiftDigits: ", initCdreCfg.CostShiftDigits)
|
||||
}
|
||||
clnCdreCfg.ContentFields[0].CdrFieldId = "destination"
|
||||
if initCdreCfg.ContentFields[0].CdrFieldId != "cgrid" {
|
||||
t.Error("Unexpected change of CdrFieldId: ", initCdreCfg.ContentFields[0].CdrFieldId)
|
||||
clnCdreCfg.ContentFields[0].FieldId = "destination"
|
||||
if initCdreCfg.ContentFields[0].FieldId != "cgrid" {
|
||||
t.Error("Unexpected change of FieldId: ", initCdreCfg.ContentFields[0].FieldId)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,9 +33,9 @@
|
||||
"run_delay": 1,
|
||||
"cdr_source_id": "csv2", // free form field, tag identifying the source of the CDRs within CDRS database
|
||||
"content_fields":[ // import template, tag will match internally CDR field, in case of .csv value will be represented by index of the field value
|
||||
{"cdr_field_id": "TOR", "value": "~7:s/^(voice|data|sms|generic)$/*$1/"},
|
||||
{"cdr_field_id": "AnswerTime", "value": "1"},
|
||||
{"cdr_field_id": "Usage", "value": "~9:s/^(\\d+)$/${1}s/"},
|
||||
{"field_id": "TOR", "value": "~7:s/^(voice|data|sms|generic)$/*$1/"},
|
||||
{"field_id": "AnswerTime", "value": "1"},
|
||||
{"field_id": "Usage", "value": "~9:s/^(\\d+)$/${1}s/"},
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
"data_usage_multiply_factor": 0.000976563,
|
||||
"cdr_source_id": "csv2", // free form field, tag identifying the source of the CDRs within CDRS database
|
||||
"content_fields":[ // import template, tag will match internally CDR field, in case of .csv value will be represented by index of the field value
|
||||
{"cdr_field_id": "TOR", "value": "~7:s/^(voice|data|sms|generic)$/*$1/"},
|
||||
{"cdr_field_id": "AnswerTime", "value": "2"},
|
||||
{"field_id": "TOR", "value": "~7:s/^(voice|data|sms|generic)$/*$1/"},
|
||||
{"field_id": "AnswerTime", "value": "2"},
|
||||
],
|
||||
},
|
||||
"CDRC-CSV3": {
|
||||
|
||||
@@ -31,8 +31,8 @@ func NewCfgCdrFieldFromCdrFieldJsonCfg(jsnCfgFld *CdrFieldJsonCfg) (*CfgCdrField
|
||||
if jsnCfgFld.Type != nil {
|
||||
cfgFld.Type = *jsnCfgFld.Type
|
||||
}
|
||||
if jsnCfgFld.Cdr_field_id != nil {
|
||||
cfgFld.CdrFieldId = *jsnCfgFld.Cdr_field_id
|
||||
if jsnCfgFld.Field_id != nil {
|
||||
cfgFld.FieldId = *jsnCfgFld.Field_id
|
||||
}
|
||||
if jsnCfgFld.Metatag_id != nil {
|
||||
cfgFld.MetatagId = *jsnCfgFld.Metatag_id
|
||||
@@ -68,7 +68,7 @@ func NewCfgCdrFieldFromCdrFieldJsonCfg(jsnCfgFld *CdrFieldJsonCfg) (*CfgCdrField
|
||||
type CfgCdrField struct {
|
||||
Tag string // Identifier for the administrator
|
||||
Type string // Type of field
|
||||
CdrFieldId string // StoredCdr field name
|
||||
FieldId string // Field identifier
|
||||
MetatagId string
|
||||
Value utils.RSRFields
|
||||
FieldFilter utils.RSRFields
|
||||
|
||||
@@ -140,21 +140,21 @@ const CGRATES_CFG_JSON = `
|
||||
"export_dir": "/var/log/cgrates/cdre", // path where the exported CDRs will be placed
|
||||
"header_fields": [], // template of the exported header fields
|
||||
"content_fields": [ // template of the exported content fields
|
||||
{"tag": "CgrId", "cdr_field_id": "CgrId", "type": "cdrfield", "value": "CgrId"},
|
||||
{"tag":"RunId", "cdr_field_id": "MediationRunId", "type": "cdrfield", "value": "MediationRunId"},
|
||||
{"tag":"Tor", "cdr_field_id": "TOR", "type": "cdrfield", "value": "TOR"},
|
||||
{"tag":"AccId", "cdr_field_id": "AccId", "type": "cdrfield", "value": "AccId"},
|
||||
{"tag":"ReqType", "cdr_field_id": "ReqType", "type": "cdrfield", "value": "ReqType"},
|
||||
{"tag":"Direction", "cdr_field_id": "Direction", "type": "cdrfield", "value": "Direction"},
|
||||
{"tag":"Tenant", "cdr_field_id": "Tenant", "type": "cdrfield", "value": "Tenant"},
|
||||
{"tag":"Category", "cdr_field_id": "Category", "type": "cdrfield", "value": "Category"},
|
||||
{"tag":"Account", "cdr_field_id": "Account", "type": "cdrfield", "value": "Account"},
|
||||
{"tag":"Subject", "cdr_field_id": "Subject", "type": "cdrfield", "value": "Subject"},
|
||||
{"tag":"Destination", "cdr_field_id": "Destination", "type": "cdrfield", "value": "Destination"},
|
||||
{"tag":"SetupTime", "cdr_field_id": "SetupTime", "type": "cdrfield", "value": "SetupTime", "layout": "2006-01-02T15:04:05Z07:00"},
|
||||
{"tag":"AnswerTime", "cdr_field_id": "AnswerTime", "type": "cdrfield", "value": "AnswerTime", "layout": "2006-01-02T15:04:05Z07:00"},
|
||||
{"tag":"Usage", "cdr_field_id": "Usage", "type": "cdrfield", "value": "Usage"},
|
||||
{"tag":"Cost", "cdr_field_id": "Cost", "type": "cdrfield", "value": "Cost"},
|
||||
{"tag": "CgrId", "field_id": "CgrId", "type": "cdrfield", "value": "CgrId"},
|
||||
{"tag":"RunId", "field_id": "MediationRunId", "type": "cdrfield", "value": "MediationRunId"},
|
||||
{"tag":"Tor", "field_id": "TOR", "type": "cdrfield", "value": "TOR"},
|
||||
{"tag":"AccId", "field_id": "AccId", "type": "cdrfield", "value": "AccId"},
|
||||
{"tag":"ReqType", "field_id": "ReqType", "type": "cdrfield", "value": "ReqType"},
|
||||
{"tag":"Direction", "field_id": "Direction", "type": "cdrfield", "value": "Direction"},
|
||||
{"tag":"Tenant", "field_id": "Tenant", "type": "cdrfield", "value": "Tenant"},
|
||||
{"tag":"Category", "field_id": "Category", "type": "cdrfield", "value": "Category"},
|
||||
{"tag":"Account", "field_id": "Account", "type": "cdrfield", "value": "Account"},
|
||||
{"tag":"Subject", "field_id": "Subject", "type": "cdrfield", "value": "Subject"},
|
||||
{"tag":"Destination", "field_id": "Destination", "type": "cdrfield", "value": "Destination"},
|
||||
{"tag":"SetupTime", "field_id": "SetupTime", "type": "cdrfield", "value": "SetupTime", "layout": "2006-01-02T15:04:05Z07:00"},
|
||||
{"tag":"AnswerTime", "field_id": "AnswerTime", "type": "cdrfield", "value": "AnswerTime", "layout": "2006-01-02T15:04:05Z07:00"},
|
||||
{"tag":"Usage", "field_id": "Usage", "type": "cdrfield", "value": "Usage"},
|
||||
{"tag":"Cost", "field_id": "Cost", "type": "cdrfield", "value": "Cost"},
|
||||
],
|
||||
"trailer_fields": [], // template of the exported trailer fields
|
||||
}
|
||||
@@ -181,18 +181,18 @@ const CGRATES_CFG_JSON = `
|
||||
"partial_record_cache": "10s", // duration to cache partial records when not pairing
|
||||
"header_fields": [], // template of the import header fields
|
||||
"content_fields":[ // import content_fields template, tag will match internally CDR field, in case of .csv value will be represented by index of the field value
|
||||
{"tag": "tor", "cdr_field_id": "TOR", "type": "cdrfield", "value": "2", "mandatory": true},
|
||||
{"tag": "accid", "cdr_field_id": "AccId", "type": "cdrfield", "value": "3", "mandatory": true},
|
||||
{"tag": "reqtype", "cdr_field_id": "ReqType", "type": "cdrfield", "value": "4", "mandatory": true},
|
||||
{"tag": "direction", "cdr_field_id": "Direction", "type": "cdrfield", "value": "5", "mandatory": true},
|
||||
{"tag": "tenant", "cdr_field_id": "Tenant", "type": "cdrfield", "value": "6", "mandatory": true},
|
||||
{"tag": "category", "cdr_field_id": "Category", "type": "cdrfield", "value": "7", "mandatory": true},
|
||||
{"tag": "account", "cdr_field_id": "Account", "type": "cdrfield", "value": "8", "mandatory": true},
|
||||
{"tag": "subject", "cdr_field_id": "Subject", "type": "cdrfield", "value": "9", "mandatory": true},
|
||||
{"tag": "destination", "cdr_field_id": "Destination", "type": "cdrfield", "value": "10", "mandatory": true},
|
||||
{"tag": "setup_time", "cdr_field_id": "SetupTime", "type": "cdrfield", "value": "11", "mandatory": true},
|
||||
{"tag": "answer_time", "cdr_field_id": "AnswerTime", "type": "cdrfield", "value": "12", "mandatory": true},
|
||||
{"tag": "usage", "cdr_field_id": "Usage", "type": "cdrfield", "value": "13", "mandatory": true},
|
||||
{"tag": "tor", "field_id": "TOR", "type": "cdrfield", "value": "2", "mandatory": true},
|
||||
{"tag": "accid", "field_id": "AccId", "type": "cdrfield", "value": "3", "mandatory": true},
|
||||
{"tag": "reqtype", "field_id": "ReqType", "type": "cdrfield", "value": "4", "mandatory": true},
|
||||
{"tag": "direction", "field_id": "Direction", "type": "cdrfield", "value": "5", "mandatory": true},
|
||||
{"tag": "tenant", "field_id": "Tenant", "type": "cdrfield", "value": "6", "mandatory": true},
|
||||
{"tag": "category", "field_id": "Category", "type": "cdrfield", "value": "7", "mandatory": true},
|
||||
{"tag": "account", "field_id": "Account", "type": "cdrfield", "value": "8", "mandatory": true},
|
||||
{"tag": "subject", "field_id": "Subject", "type": "cdrfield", "value": "9", "mandatory": true},
|
||||
{"tag": "destination", "field_id": "Destination", "type": "cdrfield", "value": "10", "mandatory": true},
|
||||
{"tag": "setup_time", "field_id": "SetupTime", "type": "cdrfield", "value": "11", "mandatory": true},
|
||||
{"tag": "answer_time", "field_id": "AnswerTime", "type": "cdrfield", "value": "12", "mandatory": true},
|
||||
{"tag": "usage", "field_id": "Usage", "type": "cdrfield", "value": "13", "mandatory": true},
|
||||
],
|
||||
"trailer_fields": [], // template of the import trailer fields
|
||||
}
|
||||
@@ -276,19 +276,19 @@ const CGRATES_CFG_JSON = `
|
||||
"request_filter": "Subscription-Id>Subscription-Type(0)", // filter requests processed by this processor
|
||||
"continue_on_success": false, // continue to the next template if executed
|
||||
"content_fields":[ // import content_fields template, tag will match internally CDR field, in case of .csv value will be represented by index of the field value
|
||||
{"tag": "tor", "cdr_field_id": "TOR", "type": "cdrfield", "value": "^*voice", "mandatory": true},
|
||||
{"tag": "accid", "cdr_field_id": "AccId", "type": "cdrfield", "value": "Session-Id", "mandatory": true},
|
||||
{"tag": "reqtype", "cdr_field_id": "ReqType", "type": "cdrfield", "value": "^*users", "mandatory": true},
|
||||
{"tag": "direction", "cdr_field_id": "Direction", "type": "cdrfield", "value": "^*out", "mandatory": true},
|
||||
{"tag": "tenant", "cdr_field_id": "Tenant", "type": "cdrfield", "value": "^*users", "mandatory": true},
|
||||
{"tag": "category", "cdr_field_id": "Category", "type": "cdrfield", "value": "^call_;~Service-Information>IN-Information>Calling-Vlr-Number:s/^$/33000/;~Service-Information>IN-Information>Calling-Vlr-Number:s/^(\\d{5})/${1}/", "mandatory": true},
|
||||
{"tag": "account", "cdr_field_id": "Account", "type": "cdrfield", "value": "^*users", "mandatory": true},
|
||||
{"tag": "subject", "cdr_field_id": "Subject", "type": "cdrfield", "value": "^*users", "mandatory": true},
|
||||
{"tag": "destination", "cdr_field_id": "Destination", "type": "cdrfield", "value": "Service-Information>IN-Information>Real-Called-Number", "mandatory": true},
|
||||
{"tag": "setup_time", "cdr_field_id": "SetupTime", "type": "cdrfield", "value": "Event-Timestamp", "mandatory": true},
|
||||
{"tag": "answer_time", "cdr_field_id": "AnswerTime", "type": "cdrfield", "value": "Event-Timestamp", "mandatory": true},
|
||||
{"tag": "usage", "cdr_field_id": "Usage", "type": "cdrfield", "value": "Requested-Service-Unit>CC-Time", "mandatory": true},
|
||||
{"tag": "subscriber_id", "cdr_field_id": "SubscriberId", "type": "cdrfield", "value": "Subscription-Id>Subscription-Id-Data", "mandatory": true},
|
||||
{"tag": "tor", "field_id": "TOR", "type": "cdrfield", "value": "^*voice", "mandatory": true},
|
||||
{"tag": "accid", "field_id": "AccId", "type": "cdrfield", "value": "Session-Id", "mandatory": true},
|
||||
{"tag": "reqtype", "field_id": "ReqType", "type": "cdrfield", "value": "^*users", "mandatory": true},
|
||||
{"tag": "direction", "field_id": "Direction", "type": "cdrfield", "value": "^*out", "mandatory": true},
|
||||
{"tag": "tenant", "field_id": "Tenant", "type": "cdrfield", "value": "^*users", "mandatory": true},
|
||||
{"tag": "category", "field_id": "Category", "type": "cdrfield", "value": "^call_;~Service-Information>IN-Information>Calling-Vlr-Number:s/^$/33000/;~Service-Information>IN-Information>Calling-Vlr-Number:s/^(\\d{5})/${1}/", "mandatory": true},
|
||||
{"tag": "account", "field_id": "Account", "type": "cdrfield", "value": "^*users", "mandatory": true},
|
||||
{"tag": "subject", "field_id": "Subject", "type": "cdrfield", "value": "^*users", "mandatory": true},
|
||||
{"tag": "destination", "field_id": "Destination", "type": "cdrfield", "value": "Service-Information>IN-Information>Real-Called-Number", "mandatory": true},
|
||||
{"tag": "setup_time", "field_id": "SetupTime", "type": "cdrfield", "value": "Event-Timestamp", "mandatory": true},
|
||||
{"tag": "answer_time", "field_id": "AnswerTime", "type": "cdrfield", "value": "Event-Timestamp", "mandatory": true},
|
||||
{"tag": "usage", "field_id": "Usage", "type": "cdrfield", "value": "Requested-Service-Unit>CC-Time", "mandatory": true},
|
||||
{"tag": "subscriber_id", "field_id": "SubscriberId", "type": "cdrfield", "value": "Subscription-Id>Subscription-Id-Data", "mandatory": true},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
@@ -179,67 +179,67 @@ func TestDfCdreJsonCfgs(t *testing.T) {
|
||||
eFields := []*CdrFieldJsonCfg{}
|
||||
eContentFlds := []*CdrFieldJsonCfg{
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("CgrId"),
|
||||
Cdr_field_id: utils.StringPointer(utils.CGRID),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.CGRID)},
|
||||
Field_id: utils.StringPointer(utils.CGRID),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.CGRID)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("RunId"),
|
||||
Cdr_field_id: utils.StringPointer(utils.MEDI_RUNID),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.MEDI_RUNID)},
|
||||
Field_id: utils.StringPointer(utils.MEDI_RUNID),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.MEDI_RUNID)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Tor"),
|
||||
Cdr_field_id: utils.StringPointer(utils.TOR),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.TOR)},
|
||||
Field_id: utils.StringPointer(utils.TOR),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.TOR)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("AccId"),
|
||||
Cdr_field_id: utils.StringPointer(utils.ACCID),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.ACCID)},
|
||||
Field_id: utils.StringPointer(utils.ACCID),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.ACCID)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("ReqType"),
|
||||
Cdr_field_id: utils.StringPointer(utils.REQTYPE),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.REQTYPE)},
|
||||
Field_id: utils.StringPointer(utils.REQTYPE),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.REQTYPE)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Direction"),
|
||||
Cdr_field_id: utils.StringPointer(utils.DIRECTION),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.DIRECTION)},
|
||||
Field_id: utils.StringPointer(utils.DIRECTION),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.DIRECTION)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Tenant"),
|
||||
Cdr_field_id: utils.StringPointer(utils.TENANT),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.TENANT)},
|
||||
Field_id: utils.StringPointer(utils.TENANT),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.TENANT)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Category"),
|
||||
Cdr_field_id: utils.StringPointer(utils.CATEGORY),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.CATEGORY)},
|
||||
Field_id: utils.StringPointer(utils.CATEGORY),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.CATEGORY)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Account"),
|
||||
Cdr_field_id: utils.StringPointer(utils.ACCOUNT),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.ACCOUNT)},
|
||||
Field_id: utils.StringPointer(utils.ACCOUNT),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.ACCOUNT)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Subject"),
|
||||
Cdr_field_id: utils.StringPointer(utils.SUBJECT),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.SUBJECT)},
|
||||
Field_id: utils.StringPointer(utils.SUBJECT),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.SUBJECT)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Destination"),
|
||||
Cdr_field_id: utils.StringPointer(utils.DESTINATION),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.DESTINATION)},
|
||||
Field_id: utils.StringPointer(utils.DESTINATION),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.DESTINATION)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("SetupTime"),
|
||||
Cdr_field_id: utils.StringPointer(utils.SETUP_TIME),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.SETUP_TIME),
|
||||
Layout: utils.StringPointer("2006-01-02T15:04:05Z07:00")},
|
||||
Field_id: utils.StringPointer(utils.SETUP_TIME),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.SETUP_TIME),
|
||||
Layout: utils.StringPointer("2006-01-02T15:04:05Z07:00")},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("AnswerTime"),
|
||||
Cdr_field_id: utils.StringPointer(utils.ANSWER_TIME),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.ANSWER_TIME),
|
||||
Layout: utils.StringPointer("2006-01-02T15:04:05Z07:00")},
|
||||
Field_id: utils.StringPointer(utils.ANSWER_TIME),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.ANSWER_TIME),
|
||||
Layout: utils.StringPointer("2006-01-02T15:04:05Z07:00")},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Usage"),
|
||||
Cdr_field_id: utils.StringPointer(utils.USAGE),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.USAGE)},
|
||||
Field_id: utils.StringPointer(utils.USAGE),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.USAGE)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("Cost"),
|
||||
Cdr_field_id: utils.StringPointer(utils.COST),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.COST)},
|
||||
Field_id: utils.StringPointer(utils.COST),
|
||||
Type: utils.StringPointer("cdrfield"),
|
||||
Value: utils.StringPointer(utils.COST)},
|
||||
}
|
||||
eCfg := map[string]*CdreJsonCfg{
|
||||
utils.META_DEFAULT: &CdreJsonCfg{
|
||||
@@ -269,29 +269,29 @@ func TestDfCdreJsonCfgs(t *testing.T) {
|
||||
func TestDfCdrcJsonCfg(t *testing.T) {
|
||||
eFields := []*CdrFieldJsonCfg{}
|
||||
cdrFields := []*CdrFieldJsonCfg{
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("tor"), Cdr_field_id: utils.StringPointer(utils.TOR), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("tor"), Field_id: utils.StringPointer(utils.TOR), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("2"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("accid"), Cdr_field_id: utils.StringPointer(utils.ACCID), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("accid"), Field_id: utils.StringPointer(utils.ACCID), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("3"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("reqtype"), Cdr_field_id: utils.StringPointer(utils.REQTYPE), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("reqtype"), Field_id: utils.StringPointer(utils.REQTYPE), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("4"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("direction"), Cdr_field_id: utils.StringPointer(utils.DIRECTION), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("direction"), Field_id: utils.StringPointer(utils.DIRECTION), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("5"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("tenant"), Cdr_field_id: utils.StringPointer(utils.TENANT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("tenant"), Field_id: utils.StringPointer(utils.TENANT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("6"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("category"), Cdr_field_id: utils.StringPointer(utils.CATEGORY), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("category"), Field_id: utils.StringPointer(utils.CATEGORY), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("7"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("account"), Cdr_field_id: utils.StringPointer(utils.ACCOUNT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("account"), Field_id: utils.StringPointer(utils.ACCOUNT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("8"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("subject"), Cdr_field_id: utils.StringPointer(utils.SUBJECT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("subject"), Field_id: utils.StringPointer(utils.SUBJECT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("9"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("destination"), Cdr_field_id: utils.StringPointer(utils.DESTINATION), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("destination"), Field_id: utils.StringPointer(utils.DESTINATION), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("10"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("setup_time"), Cdr_field_id: utils.StringPointer(utils.SETUP_TIME), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("setup_time"), Field_id: utils.StringPointer(utils.SETUP_TIME), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("11"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("answer_time"), Cdr_field_id: utils.StringPointer(utils.ANSWER_TIME), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("answer_time"), Field_id: utils.StringPointer(utils.ANSWER_TIME), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("12"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("usage"), Cdr_field_id: utils.StringPointer(utils.USAGE), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("usage"), Field_id: utils.StringPointer(utils.USAGE), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("13"), Mandatory: utils.BoolPointer(true)},
|
||||
}
|
||||
eCfg := map[string]*CdrcJsonCfg{
|
||||
@@ -432,31 +432,31 @@ func TestDiameterAgentJsonCfg(t *testing.T) {
|
||||
Request_filter: utils.StringPointer("Subscription-Id>Subscription-Type(0)"),
|
||||
Continue_on_success: utils.BoolPointer(false),
|
||||
Content_fields: &[]*CdrFieldJsonCfg{
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("tor"), Cdr_field_id: utils.StringPointer(utils.TOR), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("tor"), Field_id: utils.StringPointer(utils.TOR), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("^*voice"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("accid"), Cdr_field_id: utils.StringPointer(utils.ACCID), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("accid"), Field_id: utils.StringPointer(utils.ACCID), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("Session-Id"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("reqtype"), Cdr_field_id: utils.StringPointer(utils.REQTYPE), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("reqtype"), Field_id: utils.StringPointer(utils.REQTYPE), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("^*users"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("direction"), Cdr_field_id: utils.StringPointer(utils.DIRECTION), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("direction"), Field_id: utils.StringPointer(utils.DIRECTION), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("^*out"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("tenant"), Cdr_field_id: utils.StringPointer(utils.TENANT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("tenant"), Field_id: utils.StringPointer(utils.TENANT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("^*users"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("category"), Cdr_field_id: utils.StringPointer(utils.CATEGORY), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("category"), Field_id: utils.StringPointer(utils.CATEGORY), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("^call_;~Service-Information>IN-Information>Calling-Vlr-Number:s/^$/33000/;~Service-Information>IN-Information>Calling-Vlr-Number:s/^(\\d{5})/${1}/"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("account"), Cdr_field_id: utils.StringPointer(utils.ACCOUNT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("account"), Field_id: utils.StringPointer(utils.ACCOUNT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("^*users"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("subject"), Cdr_field_id: utils.StringPointer(utils.SUBJECT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("subject"), Field_id: utils.StringPointer(utils.SUBJECT), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("^*users"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("destination"), Cdr_field_id: utils.StringPointer(utils.DESTINATION), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("destination"), Field_id: utils.StringPointer(utils.DESTINATION), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("Service-Information>IN-Information>Real-Called-Number"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("setup_time"), Cdr_field_id: utils.StringPointer(utils.SETUP_TIME), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("setup_time"), Field_id: utils.StringPointer(utils.SETUP_TIME), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("Event-Timestamp"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("answer_time"), Cdr_field_id: utils.StringPointer(utils.ANSWER_TIME), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("answer_time"), Field_id: utils.StringPointer(utils.ANSWER_TIME), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("Event-Timestamp"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("usage"), Cdr_field_id: utils.StringPointer(utils.USAGE), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("usage"), Field_id: utils.StringPointer(utils.USAGE), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("Requested-Service-Unit>CC-Time"), Mandatory: utils.BoolPointer(true)},
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("subscriber_id"), Cdr_field_id: utils.StringPointer("SubscriberId"), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
&CdrFieldJsonCfg{Tag: utils.StringPointer("subscriber_id"), Field_id: utils.StringPointer("SubscriberId"), Type: utils.StringPointer(utils.CDRFIELD),
|
||||
Value: utils.StringPointer("Subscription-Id>Subscription-Id-Data"), Mandatory: utils.BoolPointer(true)},
|
||||
},
|
||||
},
|
||||
@@ -578,9 +578,9 @@ func TestNewCgrJsonCfgFromFile(t *testing.T) {
|
||||
t.Error("Received: ", gCfg)
|
||||
}
|
||||
cdrFields := []*CdrFieldJsonCfg{
|
||||
&CdrFieldJsonCfg{Cdr_field_id: utils.StringPointer(utils.TOR), Value: utils.StringPointer("~7:s/^(voice|data|sms|generic)$/*$1/")},
|
||||
&CdrFieldJsonCfg{Cdr_field_id: utils.StringPointer(utils.ANSWER_TIME), Value: utils.StringPointer("1")},
|
||||
&CdrFieldJsonCfg{Cdr_field_id: utils.StringPointer(utils.USAGE), Value: utils.StringPointer(`~9:s/^(\d+)$/${1}s/`)},
|
||||
&CdrFieldJsonCfg{Field_id: utils.StringPointer(utils.TOR), Value: utils.StringPointer("~7:s/^(voice|data|sms|generic)$/*$1/")},
|
||||
&CdrFieldJsonCfg{Field_id: utils.StringPointer(utils.ANSWER_TIME), Value: utils.StringPointer("1")},
|
||||
&CdrFieldJsonCfg{Field_id: utils.StringPointer(utils.USAGE), Value: utils.StringPointer(`~9:s/^(\d+)$/${1}s/`)},
|
||||
}
|
||||
eCfgCdrc := map[string]*CdrcJsonCfg{
|
||||
"CDRC-CSV1": &CdrcJsonCfg{
|
||||
|
||||
@@ -51,29 +51,29 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) {
|
||||
PartialRecordCache: time.Duration(10) * time.Second,
|
||||
HeaderFields: make([]*CfgCdrField, 0),
|
||||
ContentFields: []*CfgCdrField{
|
||||
&CfgCdrField{Tag: "tor", Type: "cdrfield", CdrFieldId: utils.TOR, Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "tor", Type: "cdrfield", FieldId: utils.TOR, Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "accid", Type: "cdrfield", CdrFieldId: utils.ACCID, Value: utils.ParseRSRFieldsMustCompile("3", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "accid", Type: "cdrfield", FieldId: utils.ACCID, Value: utils.ParseRSRFieldsMustCompile("3", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "reqtype", Type: "cdrfield", CdrFieldId: utils.REQTYPE, Value: utils.ParseRSRFieldsMustCompile("4", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "reqtype", Type: "cdrfield", FieldId: utils.REQTYPE, Value: utils.ParseRSRFieldsMustCompile("4", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "direction", Type: "cdrfield", CdrFieldId: utils.DIRECTION, Value: utils.ParseRSRFieldsMustCompile("5", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "direction", Type: "cdrfield", FieldId: utils.DIRECTION, Value: utils.ParseRSRFieldsMustCompile("5", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "tenant", Type: "cdrfield", CdrFieldId: utils.TENANT, Value: utils.ParseRSRFieldsMustCompile("6", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "tenant", Type: "cdrfield", FieldId: utils.TENANT, Value: utils.ParseRSRFieldsMustCompile("6", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "category", Type: "cdrfield", CdrFieldId: utils.CATEGORY, Value: utils.ParseRSRFieldsMustCompile("7", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "category", Type: "cdrfield", FieldId: utils.CATEGORY, Value: utils.ParseRSRFieldsMustCompile("7", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "account", Type: "cdrfield", CdrFieldId: utils.ACCOUNT, Value: utils.ParseRSRFieldsMustCompile("8", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "account", Type: "cdrfield", FieldId: utils.ACCOUNT, Value: utils.ParseRSRFieldsMustCompile("8", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "subject", Type: "cdrfield", CdrFieldId: utils.SUBJECT, Value: utils.ParseRSRFieldsMustCompile("9", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "subject", Type: "cdrfield", FieldId: utils.SUBJECT, Value: utils.ParseRSRFieldsMustCompile("9", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "destination", Type: "cdrfield", CdrFieldId: utils.DESTINATION, Value: utils.ParseRSRFieldsMustCompile("10", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "destination", Type: "cdrfield", FieldId: utils.DESTINATION, Value: utils.ParseRSRFieldsMustCompile("10", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "setup_time", Type: "cdrfield", CdrFieldId: utils.SETUP_TIME, Value: utils.ParseRSRFieldsMustCompile("11", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "setup_time", Type: "cdrfield", FieldId: utils.SETUP_TIME, Value: utils.ParseRSRFieldsMustCompile("11", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "answer_time", Type: "cdrfield", CdrFieldId: utils.ANSWER_TIME, Value: utils.ParseRSRFieldsMustCompile("12", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "answer_time", Type: "cdrfield", FieldId: utils.ANSWER_TIME, Value: utils.ParseRSRFieldsMustCompile("12", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "usage", Type: "cdrfield", CdrFieldId: utils.USAGE, Value: utils.ParseRSRFieldsMustCompile("13", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "usage", Type: "cdrfield", FieldId: utils.USAGE, Value: utils.ParseRSRFieldsMustCompile("13", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
},
|
||||
TrailerFields: make([]*CfgCdrField, 0),
|
||||
@@ -94,29 +94,29 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) {
|
||||
CdrFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP),
|
||||
HeaderFields: make([]*CfgCdrField, 0),
|
||||
ContentFields: []*CfgCdrField{
|
||||
&CfgCdrField{Tag: "tor", Type: "cdrfield", CdrFieldId: utils.TOR, Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "tor", Type: "cdrfield", FieldId: utils.TOR, Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "accid", Type: "cdrfield", CdrFieldId: utils.ACCID, Value: utils.ParseRSRFieldsMustCompile("3", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "accid", Type: "cdrfield", FieldId: utils.ACCID, Value: utils.ParseRSRFieldsMustCompile("3", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "reqtype", Type: "cdrfield", CdrFieldId: utils.REQTYPE, Value: utils.ParseRSRFieldsMustCompile("4", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "reqtype", Type: "cdrfield", FieldId: utils.REQTYPE, Value: utils.ParseRSRFieldsMustCompile("4", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "direction", Type: "cdrfield", CdrFieldId: utils.DIRECTION, Value: utils.ParseRSRFieldsMustCompile("5", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "direction", Type: "cdrfield", FieldId: utils.DIRECTION, Value: utils.ParseRSRFieldsMustCompile("5", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "tenant", Type: "cdrfield", CdrFieldId: utils.TENANT, Value: utils.ParseRSRFieldsMustCompile("6", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "tenant", Type: "cdrfield", FieldId: utils.TENANT, Value: utils.ParseRSRFieldsMustCompile("6", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "category", Type: "cdrfield", CdrFieldId: utils.CATEGORY, Value: utils.ParseRSRFieldsMustCompile("7", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "category", Type: "cdrfield", FieldId: utils.CATEGORY, Value: utils.ParseRSRFieldsMustCompile("7", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "account", Type: "cdrfield", CdrFieldId: utils.ACCOUNT, Value: utils.ParseRSRFieldsMustCompile("8", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "account", Type: "cdrfield", FieldId: utils.ACCOUNT, Value: utils.ParseRSRFieldsMustCompile("8", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "subject", Type: "cdrfield", CdrFieldId: utils.SUBJECT, Value: utils.ParseRSRFieldsMustCompile("9", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "subject", Type: "cdrfield", FieldId: utils.SUBJECT, Value: utils.ParseRSRFieldsMustCompile("9", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "destination", Type: "cdrfield", CdrFieldId: utils.DESTINATION, Value: utils.ParseRSRFieldsMustCompile("10", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "destination", Type: "cdrfield", FieldId: utils.DESTINATION, Value: utils.ParseRSRFieldsMustCompile("10", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "setup_time", Type: "cdrfield", CdrFieldId: utils.SETUP_TIME, Value: utils.ParseRSRFieldsMustCompile("11", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "setup_time", Type: "cdrfield", FieldId: utils.SETUP_TIME, Value: utils.ParseRSRFieldsMustCompile("11", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "answer_time", Type: "cdrfield", CdrFieldId: utils.ANSWER_TIME, Value: utils.ParseRSRFieldsMustCompile("12", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "answer_time", Type: "cdrfield", FieldId: utils.ANSWER_TIME, Value: utils.ParseRSRFieldsMustCompile("12", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "usage", Type: "cdrfield", CdrFieldId: utils.USAGE, Value: utils.ParseRSRFieldsMustCompile("13", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "usage", Type: "cdrfield", FieldId: utils.USAGE, Value: utils.ParseRSRFieldsMustCompile("13", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
},
|
||||
TrailerFields: make([]*CfgCdrField, 0),
|
||||
@@ -137,9 +137,9 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) {
|
||||
CdrFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP),
|
||||
HeaderFields: make([]*CfgCdrField, 0),
|
||||
ContentFields: []*CfgCdrField{
|
||||
&CfgCdrField{Tag: "", Type: "", CdrFieldId: utils.TOR, Value: utils.ParseRSRFieldsMustCompile("~7:s/^(voice|data|sms|generic)$/*$1/", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "", Type: "", FieldId: utils.TOR, Value: utils.ParseRSRFieldsMustCompile("~7:s/^(voice|data|sms|generic)$/*$1/", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: false},
|
||||
&CfgCdrField{Tag: "", Type: "", CdrFieldId: utils.ANSWER_TIME, Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "", Type: "", FieldId: utils.ANSWER_TIME, Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: false},
|
||||
},
|
||||
TrailerFields: make([]*CfgCdrField, 0),
|
||||
@@ -160,29 +160,29 @@ func TestLoadCdrcConfigMultipleFiles(t *testing.T) {
|
||||
CdrFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP),
|
||||
HeaderFields: make([]*CfgCdrField, 0),
|
||||
ContentFields: []*CfgCdrField{
|
||||
&CfgCdrField{Tag: "tor", Type: "cdrfield", CdrFieldId: utils.TOR, Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "tor", Type: "cdrfield", FieldId: utils.TOR, Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "accid", Type: "cdrfield", CdrFieldId: utils.ACCID, Value: utils.ParseRSRFieldsMustCompile("3", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "accid", Type: "cdrfield", FieldId: utils.ACCID, Value: utils.ParseRSRFieldsMustCompile("3", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "reqtype", Type: "cdrfield", CdrFieldId: utils.REQTYPE, Value: utils.ParseRSRFieldsMustCompile("4", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "reqtype", Type: "cdrfield", FieldId: utils.REQTYPE, Value: utils.ParseRSRFieldsMustCompile("4", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "direction", Type: "cdrfield", CdrFieldId: utils.DIRECTION, Value: utils.ParseRSRFieldsMustCompile("5", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "direction", Type: "cdrfield", FieldId: utils.DIRECTION, Value: utils.ParseRSRFieldsMustCompile("5", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "tenant", Type: "cdrfield", CdrFieldId: utils.TENANT, Value: utils.ParseRSRFieldsMustCompile("6", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "tenant", Type: "cdrfield", FieldId: utils.TENANT, Value: utils.ParseRSRFieldsMustCompile("6", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "category", Type: "cdrfield", CdrFieldId: utils.CATEGORY, Value: utils.ParseRSRFieldsMustCompile("7", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "category", Type: "cdrfield", FieldId: utils.CATEGORY, Value: utils.ParseRSRFieldsMustCompile("7", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "account", Type: "cdrfield", CdrFieldId: utils.ACCOUNT, Value: utils.ParseRSRFieldsMustCompile("8", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "account", Type: "cdrfield", FieldId: utils.ACCOUNT, Value: utils.ParseRSRFieldsMustCompile("8", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "subject", Type: "cdrfield", CdrFieldId: utils.SUBJECT, Value: utils.ParseRSRFieldsMustCompile("9", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "subject", Type: "cdrfield", FieldId: utils.SUBJECT, Value: utils.ParseRSRFieldsMustCompile("9", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "destination", Type: "cdrfield", CdrFieldId: utils.DESTINATION, Value: utils.ParseRSRFieldsMustCompile("10", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "destination", Type: "cdrfield", FieldId: utils.DESTINATION, Value: utils.ParseRSRFieldsMustCompile("10", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "setup_time", Type: "cdrfield", CdrFieldId: utils.SETUP_TIME, Value: utils.ParseRSRFieldsMustCompile("11", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "setup_time", Type: "cdrfield", FieldId: utils.SETUP_TIME, Value: utils.ParseRSRFieldsMustCompile("11", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "answer_time", Type: "cdrfield", CdrFieldId: utils.ANSWER_TIME, Value: utils.ParseRSRFieldsMustCompile("12", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "answer_time", Type: "cdrfield", FieldId: utils.ANSWER_TIME, Value: utils.ParseRSRFieldsMustCompile("12", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
&CfgCdrField{Tag: "usage", Type: "cdrfield", CdrFieldId: utils.USAGE, Value: utils.ParseRSRFieldsMustCompile("13", utils.INFIELD_SEP),
|
||||
&CfgCdrField{Tag: "usage", Type: "cdrfield", FieldId: utils.USAGE, Value: utils.ParseRSRFieldsMustCompile("13", utils.INFIELD_SEP),
|
||||
FieldFilter: utils.ParseRSRFieldsMustCompile("", utils.INFIELD_SEP), Width: 0, Strip: "", Padding: "", Layout: "", Mandatory: true},
|
||||
},
|
||||
TrailerFields: make([]*CfgCdrField, 0),
|
||||
|
||||
@@ -108,7 +108,7 @@ type CdrStatsJsonCfg struct {
|
||||
type CdrFieldJsonCfg struct {
|
||||
Tag *string
|
||||
Type *string
|
||||
Cdr_field_id *string
|
||||
Field_id *string
|
||||
Metatag_id *string
|
||||
Value *string
|
||||
Width *int
|
||||
|
||||
Reference in New Issue
Block a user