mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
added aliases for extra_fields
This commit is contained in:
committed by
Dan Christian Bogos
parent
9dfd36e7f2
commit
fccda430c9
@@ -77,6 +77,7 @@ func (fsCdr FSCdr) getCGRID() string {
|
||||
|
||||
func (fsCdr FSCdr) getExtraFields() map[string]string {
|
||||
extraFields := make(map[string]string, len(fsCdr.cgrCfg.CdrsCfg().ExtraFields))
|
||||
extraFieldsAliases := fsCdr.cgrCfg.CdrsCfg().ExtraFieldsAliases
|
||||
for _, field := range fsCdr.cgrCfg.CdrsCfg().ExtraFields {
|
||||
origFieldVal, foundInVars := fsCdr.vars[field.Id]
|
||||
if strings.HasPrefix(field.Id, utils.STATIC_VALUE_PREFIX) { // Support for static values injected in the CDRS. it will show up as {^value:value}
|
||||
@@ -86,9 +87,12 @@ func (fsCdr FSCdr) getExtraFields() map[string]string {
|
||||
origFieldVal = fsCdr.searchExtraField(field.Id, fsCdr.body)
|
||||
}
|
||||
if parsed, err := field.Parse(origFieldVal); err == nil {
|
||||
if alias, has := extraFieldsAliases[field.Id]; has && alias != utils.EmptyString {
|
||||
extraFields[alias] = parsed
|
||||
continue
|
||||
}
|
||||
extraFields[field.Id] = parsed
|
||||
}
|
||||
|
||||
}
|
||||
return extraFields
|
||||
}
|
||||
|
||||
@@ -548,3 +548,78 @@ func TestFSCdrNewFSCdr(t *testing.T) {
|
||||
t.Error(rcv)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFsCdrExtraFieldsAliases(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
eFieldsCfg string
|
||||
expected map[string]string
|
||||
}{
|
||||
{
|
||||
name: "extra_fields_aliases",
|
||||
eFieldsCfg: `{
|
||||
"cdrs": {
|
||||
"extra_fields":["~sip_user_agent:s/([A-Za-z]*).+/$1/","cgr_notify"],
|
||||
"extra_fields_aliases":{"sip_user_agent":"sip_ua","cgr_notify":"reply_notify"},
|
||||
},}`,
|
||||
expected: map[string]string{
|
||||
"sip_ua": "Jitsi",
|
||||
"reply_notify": "AUTH_OK",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "extra_fields",
|
||||
eFieldsCfg: `{
|
||||
"cdrs": {
|
||||
"extra_fields": ["read_codec","call_timeout","~sip_user_agent:s/([A-Za-z]*).+/$1/"],
|
||||
}}`,
|
||||
expected: map[string]string{
|
||||
"read_codec": "PCMU",
|
||||
"call_timeout": "30",
|
||||
"sip_user_agent": "Jitsi",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "extra_fields_aliases without a value",
|
||||
eFieldsCfg: `{
|
||||
"cdrs": {
|
||||
"extra_fields": ["hangup_cause","read_codec","call_timeout"],
|
||||
"extra_fields_aliases": {"read_codec":"","call_timeout":"timeout"},
|
||||
}}`,
|
||||
expected: map[string]string{
|
||||
"read_codec": "PCMU",
|
||||
"hangup_cause": "NORMAL_CLEARING",
|
||||
"timeout": "30",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "alias key not defined in extra_fields",
|
||||
eFieldsCfg: `{
|
||||
"cdrs": {
|
||||
"extra_fields": ["sip_contact_user"],
|
||||
"extra_fields_aliases": {"sip_contact_user":"user","sip_received_ip":"rec_ip"},
|
||||
}}`,
|
||||
expected: map[string]string{
|
||||
"user": "1001",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
fsCdrCfg, err := config.NewCGRConfigFromJsonStringWithDefaults(tt.eFieldsCfg)
|
||||
if err != nil {
|
||||
t.Error("Could not parse the config", err)
|
||||
}
|
||||
fsCdr, err := NewFSCdr(body, fsCdrCfg)
|
||||
if err != nil {
|
||||
t.Error("Could not parse cdr", err.Error())
|
||||
}
|
||||
extraFields := fsCdr.getExtraFields()
|
||||
if !reflect.DeepEqual(tt.expected, extraFields) {
|
||||
t.Errorf("expected %+v,\nreceived %+v", tt.expected, extraFields)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user