added aliases for extra_fields

This commit is contained in:
gezimbll
2024-06-05 11:03:30 -04:00
committed by Dan Christian Bogos
parent 9dfd36e7f2
commit fccda430c9
6 changed files with 109 additions and 11 deletions

View File

@@ -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
}

View File

@@ -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)
}
})
}
}