From fbe425f144ef265c788ee8e4ed2bec32a25c6429 Mon Sep 17 00:00:00 2001 From: porosnicuadrian Date: Thu, 24 Sep 2020 10:25:24 +0300 Subject: [PATCH] Updated sessions and loaders AsMapInterface method --- config/loaderscfg.go | 76 ++++---- config/loaderscfg_test.go | 3 +- config/sessionscfg.go | 356 +++++++++++++++++++------------------ config/sessionscfg_test.go | 277 +++++++++++++---------------- utils/consts.go | 1 + 5 files changed, 346 insertions(+), 367 deletions(-) diff --git a/config/loaderscfg.go b/config/loaderscfg.go index d422d6179..3df06dd46 100644 --- a/config/loaderscfg.go +++ b/config/loaderscfg.go @@ -200,54 +200,60 @@ func (self *LoaderSCfg) Clone() *LoaderSCfg { return clnLoader } -func (lData *LoaderDataType) AsMapInterface(separator string) map[string]interface{} { +func (lData *LoaderDataType) AsMapInterface(separator string) (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.TypeCf: lData.Type, + utils.FilenameCfg: lData.Filename, + } + fields := make([]map[string]interface{}, len(lData.Fields)) for i, item := range lData.Fields { fields[i] = item.AsMapInterface(separator) } + initialMP[utils.FieldsCfg] = fields - return map[string]interface{}{ - utils.TypeCf: lData.Type, - utils.FilenameCfg: lData.Filename, - utils.FieldsCfg: fields, - } + return } -func (l *LoaderSCfg) AsMapInterface(separator string) map[string]interface{} { - tenant := make([]string, len(l.Tenant)) - for i, item := range l.Tenant { - tenant[i] = item.Rules - } - strings.Join(tenant, utils.EmptyString) - - data := make([]map[string]interface{}, len(l.Data)) - for i, item := range l.Data { - data[i] = item.AsMapInterface(separator) - } - var runDelay string = "0" - if l.RunDelay != 0 { - runDelay = l.RunDelay.String() - } - cacheSConns := make([]string, len(l.CacheSConns)) - for i, item := range l.CacheSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches) - if item == buf { - cacheSConns[i] = strings.ReplaceAll(item, ":*caches", utils.EmptyString) - } else { - cacheSConns[i] = item - } - } - return map[string]interface{}{ +func (l *LoaderSCfg) AsMapInterface(separator string) (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ utils.IdCfg: l.Id, utils.EnabledCfg: l.Enabled, - utils.TenantCfg: strings.Join(tenant, utils.EmptyString), utils.DryRunCfg: l.DryRun, - utils.RunDelayCfg: runDelay, utils.LockFileNameCfg: l.LockFileName, - utils.CacheSConnsCfg: cacheSConns, utils.FieldSeparatorCfg: l.FieldSeparator, utils.TpInDirCfg: l.TpInDir, utils.TpOutDirCfg: l.TpOutDir, - utils.DataCfg: data, } + if l.Tenant != nil { + tenant := make([]string, len(l.Tenant)) + for i, item := range l.Tenant { + tenant[i] = item.Rules + } + initialMP[utils.TenantCfg] = strings.Join(tenant, utils.EmptyString) + } + if l.Data != nil { + data := make([]map[string]interface{}, len(l.Data)) + for i, item := range l.Data { + data[i] = item.AsMapInterface(separator) + } + initialMP[utils.DataCfg] = data + } + if l.RunDelay != 0 { + initialMP[utils.RunDelayCfg] = l.RunDelay.String() + } else { + initialMP[utils.RunDelayCfg] = "0" + } + if l.CacheSConns != nil { + cacheSConns := make([]string, len(l.CacheSConns)) + for i, item := range l.CacheSConns { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches) { + cacheSConns[i] = strings.ReplaceAll(item, ":*caches", utils.EmptyString) + } else { + cacheSConns[i] = item + } + } + initialMP[utils.CachesConnsCfg] = cacheSConns + } + return } diff --git a/config/loaderscfg_test.go b/config/loaderscfg_test.go index 3cd2f6904..ac3ca2204 100644 --- a/config/loaderscfg_test.go +++ b/config/loaderscfg_test.go @@ -132,8 +132,7 @@ func TestLoaderCfgAsMapInterface(t *testing.T) { }, ], }, - ], - + ], }` eMap := []map[string]interface{}{ { diff --git a/config/sessionscfg.go b/config/sessionscfg.go index d35f93bc7..2e10cef20 100644 --- a/config/sessionscfg.go +++ b/config/sessionscfg.go @@ -299,160 +299,165 @@ func (scfg *SessionSCfg) loadFromJsonCfg(jsnCfg *SessionSJsonCfg) (err error) { return scfg.STIRCfg.loadFromJSONCfg(jsnCfg.Stir) } -func (scfg *SessionSCfg) AsMapInterface() map[string]interface{} { - var debitInterval string = "0" +func (scfg *SessionSCfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.EnabledCfg: scfg.Enabled, + utils.ListenBijsonCfg: scfg.ListenBijson, + utils.ReplicationConnsCfg: scfg.ReplicationConns, + utils.StoreSCostsCfg: scfg.StoreSCosts, + utils.SessionIndexesCfg: scfg.SessionIndexes.Slice(), + utils.ClientProtocolCfg: scfg.ClientProtocol, + utils.TerminateAttemptsCfg: scfg.TerminateAttempts, + utils.AlterableFieldsCfg: scfg.AlterableFields.AsSlice(), + utils.STIRCfg: scfg.STIRCfg.AsMapInterface(), + } if scfg.DebitInterval != 0 { - debitInterval = scfg.DebitInterval.String() + initialMP[utils.DebitIntervalCfg] = scfg.DebitInterval.String() + } else if scfg.DebitInterval == 0 { + initialMP[utils.DebitIntervalCfg] = "0" } - var minCallDuration string = "0" if scfg.MinCallDuration != 0 { - minCallDuration = scfg.MinCallDuration.String() + initialMP[utils.MinCallDurationCfg] = scfg.MinCallDuration.String() + } else if scfg.MinCallDuration == 0 { + initialMP[utils.MinCallDurationCfg] = "0" } - var maxCallDuration string = "0" if scfg.MaxCallDuration != 0 { - maxCallDuration = scfg.MaxCallDuration.String() + initialMP[utils.MaxCallDurationCfg] = scfg.MaxCallDuration.String() + } else if scfg.MaxCallDuration == 0 { + initialMP[utils.MaxCallDurationCfg] = "0" } - var sessionTTL string = "0" if scfg.SessionTTL != 0 { - sessionTTL = scfg.SessionTTL.String() + initialMP[utils.SessionTTLCfg] = scfg.SessionTTL.String() + } else if scfg.SessionTTL == 0 { + initialMP[utils.SessionTTLCfg] = "0" } - var sessionTTLMaxDelay string = "0" if scfg.SessionTTLMaxDelay != nil { - sessionTTLMaxDelay = scfg.SessionTTLMaxDelay.String() + initialMP[utils.SessionTTLMaxDelayCfg] = scfg.SessionTTLMaxDelay.String() } - var sessionTTLLastUsed string = "0" if scfg.SessionTTLLastUsed != nil { - sessionTTLLastUsed = scfg.SessionTTLLastUsed.String() + initialMP[utils.SessionTTLLastUsedCfg] = scfg.SessionTTLLastUsed.String() } - var sessionTTLUsage string = "0" if scfg.SessionTTLUsage != nil { - sessionTTLUsage = scfg.SessionTTLUsage.String() + initialMP[utils.SessionTTLUsageCfg] = scfg.SessionTTLUsage.String() } - var sessionTTLLastUsage string = "0" if scfg.SessionTTLLastUsage != nil { - sessionTTLLastUsage = scfg.SessionTTLLastUsage.String() + initialMP[utils.SessionTTLLastUsageCfg] = scfg.SessionTTLLastUsage.String() } - var channelSyncInterval string = "0" if scfg.ChannelSyncInterval != 0 { - channelSyncInterval = scfg.ChannelSyncInterval.String() + initialMP[utils.ChannelSyncIntervalCfg] = scfg.ChannelSyncInterval.String() + } else if scfg.ChannelSyncInterval == 0 { + initialMP[utils.ChannelSyncIntervalCfg] = "0" } - var minDurLowBalance string = "0" if scfg.MinDurLowBalance != 0 { - minDurLowBalance = scfg.MinDurLowBalance.String() + initialMP[utils.MinDurLowBalanceCfg] = scfg.MinDurLowBalance.String() } - - chargerSConns := make([]string, len(scfg.ChargerSConns)) - for i, item := range scfg.ChargerSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers) - if item == buf { - chargerSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaChargers, utils.EmptyString) - } else { - chargerSConns[i] = item + if scfg.ChargerSConns != nil { + chargerSConns := make([]string, len(scfg.ChargerSConns)) + for i, item := range scfg.ChargerSConns { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers) { + chargerSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaChargers, utils.EmptyString) + } else { + chargerSConns[i] = item + } } + initialMP[utils.ChargerSConnsCfg] = chargerSConns } - RALsConns := make([]string, len(scfg.RALsConns)) - for i, item := range scfg.RALsConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder) - - if item == buf { - RALsConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResponder, utils.EmptyString) - } else { - RALsConns[i] = item + if scfg.RALsConns != nil { + RALsConns := make([]string, len(scfg.RALsConns)) + for i, item := range scfg.RALsConns { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder) { + RALsConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResponder, utils.EmptyString) + } else { + RALsConns[i] = item + } } + initialMP[utils.RALsConnsCfg] = RALsConns } - resSConns := make([]string, len(scfg.ResSConns)) - for i, item := range scfg.ResSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources) - if item == buf { - resSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResources, utils.EmptyString) - } else { - resSConns[i] = item + if scfg.ResSConns != nil { + resSConns := make([]string, len(scfg.ResSConns)) + for i, item := range scfg.ResSConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources) + if item == buf { + resSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaResources, utils.EmptyString) + } else { + resSConns[i] = item + } } + initialMP[utils.ResourceSConnsCfg] = resSConns } - threshSConns := make([]string, len(scfg.ThreshSConns)) - for i, item := range scfg.ThreshSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) - if item == buf { - threshSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds, utils.EmptyString) - } else { - threshSConns[i] = item + if scfg.ThreshSConns != nil { + threshSConns := make([]string, len(scfg.ThreshSConns)) + for i, item := range scfg.ThreshSConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds) + if item == buf { + threshSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaThresholds, utils.EmptyString) + } else { + threshSConns[i] = item + } } + initialMP[utils.ThresholdSConnsCfg] = threshSConns } - statSConns := make([]string, len(scfg.StatSConns)) - for i, item := range scfg.StatSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) - if item == buf { - statSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaStatS, utils.EmptyString) - } else { - statSConns[i] = item + if scfg.StatSConns != nil { + statSConns := make([]string, len(scfg.StatSConns)) + for i, item := range scfg.StatSConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS) + if item == buf { + statSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaStatS, utils.EmptyString) + } else { + statSConns[i] = item + } } + initialMP[utils.StatSConnsCfg] = statSConns } - routesConns := make([]string, len(scfg.RouteSConns)) - for i, item := range scfg.RouteSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRoutes) - if item == buf { - routesConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaRoutes, utils.EmptyString) - } else { - routesConns[i] = item + if scfg.RouteSConns != nil { + routesConns := make([]string, len(scfg.RouteSConns)) + for i, item := range scfg.RouteSConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRoutes) + if item == buf { + routesConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaRoutes, utils.EmptyString) + } else { + routesConns[i] = item + } } + initialMP[utils.RouteSConnsCfg] = routesConns } - attrSConns := make([]string, len(scfg.AttrSConns)) - for i, item := range scfg.AttrSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) - if item == buf { - attrSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString) - } else { - attrSConns[i] = item + if scfg.AttrSConns != nil { + attrSConns := make([]string, len(scfg.AttrSConns)) + for i, item := range scfg.AttrSConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes) + if item == buf { + attrSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaAttributes, utils.EmptyString) + } else { + attrSConns[i] = item + } } + initialMP[utils.AttributeSConnsCfg] = attrSConns } - CDRsConns := make([]string, len(scfg.CDRsConns)) - for i, item := range scfg.CDRsConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs) - if item == buf { - CDRsConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaCDRs, utils.EmptyString) - } else { - CDRsConns[i] = item + if scfg.CDRsConns != nil { + CDRsConns := make([]string, len(scfg.CDRsConns)) + for i, item := range scfg.CDRsConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs) + if item == buf { + CDRsConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaCDRs, utils.EmptyString) + } else { + CDRsConns[i] = item + } } + initialMP[utils.CDRsConnsCfg] = CDRsConns } - schedulerConns := make([]string, len(scfg.SchedulerConns)) - for i, item := range scfg.SchedulerConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaScheduler) - if item == buf { - schedulerConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaScheduler, utils.EmptyString) - } else { - schedulerConns[i] = item + if scfg.SchedulerConns != nil { + schedulerConns := make([]string, len(scfg.SchedulerConns)) + for i, item := range scfg.SchedulerConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaScheduler) + if item == buf { + schedulerConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaScheduler, utils.EmptyString) + } else { + schedulerConns[i] = item + } } + initialMP[utils.SchedulerConnsCfg] = schedulerConns } - return map[string]interface{}{ - utils.EnabledCfg: scfg.Enabled, - utils.ListenBijsonCfg: scfg.ListenBijson, - utils.ChargerSConnsCfg: chargerSConns, - utils.RALsConnsCfg: RALsConns, - utils.ResSConnsCfg: resSConns, - utils.ThreshSConnsCfg: threshSConns, - utils.StatSConnsCfg: statSConns, - utils.RouteSConnsCfg: routesConns, - utils.AttrSConnsCfg: attrSConns, - utils.CDRsConnsCfg: CDRsConns, - utils.ReplicationConnsCfg: scfg.ReplicationConns, - utils.DebitIntervalCfg: debitInterval, - utils.StoreSCostsCfg: scfg.StoreSCosts, - utils.MinCallDurationCfg: minCallDuration, - utils.MaxCallDurationCfg: maxCallDuration, - utils.SessionTTLCfg: sessionTTL, - utils.SessionTTLMaxDelayCfg: sessionTTLMaxDelay, - utils.SessionTTLLastUsedCfg: sessionTTLLastUsed, - utils.SessionTTLUsageCfg: sessionTTLUsage, - utils.SessionTTLLastUsageCfg: sessionTTLLastUsage, - utils.SessionIndexesCfg: scfg.SessionIndexes.Slice(), - utils.ClientProtocolCfg: scfg.ClientProtocol, - utils.ChannelSyncIntervalCfg: channelSyncInterval, - utils.TerminateAttemptsCfg: scfg.TerminateAttempts, - utils.AlterableFieldsCfg: scfg.AlterableFields.AsSlice(), - utils.MinDurLowBalanceCfg: minDurLowBalance, - utils.SchedulerConnsCfg: schedulerConns, - utils.STIRCfg: scfg.STIRCfg.AsMapInterface(), - } + return } type FsAgentCfg struct { @@ -523,48 +528,48 @@ func (fscfg *FsAgentCfg) loadFromJsonCfg(jsnCfg *FreeswitchAgentJsonCfg) error { return nil } -func (fscfg *FsAgentCfg) AsMapInterface(separator string) map[string]interface{} { - sessionSConns := make([]string, len(fscfg.SessionSConns)) - for i, item := range fscfg.SessionSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS) - if item == buf { - sessionSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaSessionS, utils.EmptyString) - } else { - sessionSConns[i] = item - } +func (fscfg *FsAgentCfg) AsMapInterface(separator string) (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.EnabledCfg: fscfg.Enabled, + utils.SubscribeParkCfg: fscfg.SubscribePark, + utils.CreateCdrCfg: fscfg.CreateCdr, + utils.LowBalanceAnnFileCfg: fscfg.LowBalanceAnnFile, + utils.EmptyBalanceContextCfg: fscfg.EmptyBalanceContext, + utils.EmptyBalanceAnnFileCfg: fscfg.EmptyBalanceAnnFile, + } + if fscfg.SessionSConns != nil { + sessionSConns := make([]string, len(fscfg.SessionSConns)) + for i, item := range fscfg.SessionSConns { + buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS) + if item == buf { + sessionSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaSessionS, utils.EmptyString) + } else { + sessionSConns[i] = item + } + } + initialMP[utils.SessionSConnsCfg] = sessionSConns } - - var extraFields string if fscfg.ExtraFields != nil { values := make([]string, len(fscfg.ExtraFields)) for i, item := range fscfg.ExtraFields { values[i] = item.Rules } - extraFields = strings.Join(values, separator) + initialMP[utils.ExtraFieldsCfg] = strings.Join(values, separator) } - var maxWaitConnection string = "" if fscfg.MaxWaitConnection != 0 { - maxWaitConnection = fscfg.MaxWaitConnection.String() + initialMP[utils.MaxWaitConnectionCfg] = fscfg.MaxWaitConnection.String() + } else { + initialMP[utils.MaxWaitConnectionCfg] = utils.EmptyString } - - eventSocketConns := make([]map[string]interface{}, len(fscfg.EventSocketConns)) - for key, item := range fscfg.EventSocketConns { - eventSocketConns[key] = item.AsMapInterface() - } - - return map[string]interface{}{ - utils.EnabledCfg: fscfg.Enabled, - utils.SessionSConnsCfg: sessionSConns, - utils.SubscribeParkCfg: fscfg.SubscribePark, - utils.CreateCdrCfg: fscfg.CreateCdr, - utils.ExtraFieldsCfg: extraFields, - utils.LowBalanceAnnFileCfg: fscfg.LowBalanceAnnFile, - utils.EmptyBalanceContextCfg: fscfg.EmptyBalanceContext, - utils.EmptyBalanceAnnFileCfg: fscfg.EmptyBalanceAnnFile, - utils.MaxWaitConnectionCfg: maxWaitConnection, - utils.EventSocketConnsCfg: eventSocketConns, + if fscfg.EventSocketConns != nil { + eventSocketConns := make([]map[string]interface{}, len(fscfg.EventSocketConns)) + for key, item := range fscfg.EventSocketConns { + eventSocketConns[key] = item.AsMapInterface() + } + initialMP[utils.EventSocketConnsCfg] = eventSocketConns } + return } // Returns the first cached default value for a FreeSWITCHAgent connection @@ -682,28 +687,29 @@ func (aCfg *AsteriskAgentCfg) loadFromJsonCfg(jsnCfg *AsteriskAgentJsonCfg) (err return nil } -func (aCfg *AsteriskAgentCfg) AsMapInterface() map[string]interface{} { - conns := make([]map[string]interface{}, len(aCfg.AsteriskConns)) - for i, item := range aCfg.AsteriskConns { - conns[i] = item.AsMapInterface() +func (aCfg *AsteriskAgentCfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.EnabledCfg: aCfg.Enabled, + utils.CreateCDRCfg: aCfg.CreateCDR, + } + if aCfg.AsteriskConns != nil { + conns := make([]map[string]interface{}, len(aCfg.AsteriskConns)) + for i, item := range aCfg.AsteriskConns { + conns[i] = item.AsMapInterface() + } + initialMP[utils.AsteriskConnsCfg] = conns } sessionSConns := make([]string, len(aCfg.SessionSConns)) for i, item := range aCfg.SessionSConns { - buf := utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS) - if item == buf { + if item == utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS) { sessionSConns[i] = strings.ReplaceAll(item, utils.CONCATENATED_KEY_SEP+utils.MetaSessionS, utils.EmptyString) } else { sessionSConns[i] = item } } - - return map[string]interface{}{ - utils.EnabledCfg: aCfg.Enabled, - utils.SessionSConnsCfg: sessionSConns, - utils.CreateCDRCfg: aCfg.CreateCDR, - utils.AsteriskConnsCfg: conns, - } + initialMP[utils.SessionSConnsCfg] = sessionSConns + return } // STIRcfg the confuguration structure for STIR @@ -739,21 +745,21 @@ func (stirCfg *STIRcfg) loadFromJSONCfg(jsnCfg *STIRJsonCfg) (err error) { return nil } -func (stirCfg *STIRcfg) AsMapInterface() map[string]interface{} { - var payloadMaxduration string = "0" - if stirCfg.PayloadMaxduration == 0 { - payloadMaxduration = "0" - } else if stirCfg.PayloadMaxduration == -1 { - payloadMaxduration = "-1" - } else { +func (stirCfg *STIRcfg) AsMapInterface() (initialMP map[string]interface{}) { + initialMP = map[string]interface{}{ + utils.DefaultAttestCfg: stirCfg.DefaultAttest, + utils.PublicKeyPathCfg: stirCfg.PublicKeyPath, + utils.PrivateKeyPathCfg: stirCfg.PrivateKeyPath, + utils.AllowedAtestCfg: stirCfg.AllowedAttest.AsSlice(), + } + var payloadMaxduration string + if stirCfg.PayloadMaxduration > 0 { payloadMaxduration = stirCfg.PayloadMaxduration.String() + } else if stirCfg.PayloadMaxduration == 0 { + payloadMaxduration = "0" + } else { + payloadMaxduration = "-1" } - - return map[string]interface{}{ - utils.DefaultAttestCfg: stirCfg.DefaultAttest, - utils.PublicKeyPathCfg: stirCfg.PublicKeyPath, - utils.PrivateKeyPathCfg: stirCfg.PrivateKeyPath, - utils.AllowedAtestCfg: stirCfg.AllowedAttest.AsSlice(), - utils.PayloadMaxdurationCfg: payloadMaxduration, - } + initialMP[utils.PayloadMaxdurationCfg] = payloadMaxduration + return } diff --git a/config/sessionscfg_test.go b/config/sessionscfg_test.go index 00c01d8a9..87870f324 100644 --- a/config/sessionscfg_test.go +++ b/config/sessionscfg_test.go @@ -124,90 +124,80 @@ func TestSessionSCfgloadFromJsonCfg(t *testing.T) { } func TestSessionSCfgAsMapInterface(t *testing.T) { - var sescfg SessionSCfg - sescfg.STIRCfg = new(STIRcfg) cfgJSONStr := `{ "sessions": { - "enabled": false, - "listen_bijson": "127.0.0.1:2014", - "chargers_conns": [], - "rals_conns": [], - "cdrs_conns": [], - "resources_conns": [], - "thresholds_conns": [], - "stats_conns": [], - "suppliers_conns": [], - "attributes_conns": [], - "replication_conns": [], - "debit_interval": "0s", - "store_session_costs": false, - "min_call_duration": "0s", - "max_call_duration": "3h", - "session_ttl": "0s", - "session_indexes": [], - "client_protocol": 1.0, - "channel_sync_interval": "0", - "terminate_attempts": 5, - "alterable_fields": [], - "stir": { - "allowed_attest": ["*any"], - "payload_maxduration": "-1", - "default_attest": "A", - "publickey_path": "", - "privatekey_path": "", - }, - "scheduler_conns": [], + "enabled": false, // starts the session service: + "listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests + "chargers_conns": [], // connections to ChargerS for session forking <""|*internal|$rpc_conns_id> + "rals_conns": [], // connections to RALs for rating/accounting <""|*internal|$rpc_conns_id> + "cdrs_conns": [], // connections to CDRs for CDR posting <""|*internal|$rpc_conns_id> + "resources_conns": [], // connections to ResourceS for resources monitoring <""|*internal|$rpc_conns_id> + "thresholds_conns": [], // connections to ThresholdS for reporting session events <""|*internal|$rpc_conns_id> + "stats_conns": [], // connections to StatS for reporting session events <""|*internal|$rpc_conns_id> + "routes_conns": [], // connections to RouteS for querying routes for event <""|*internal|$rpc_conns_id> + "attributes_conns": [], // connections to AttributeS for altering event fields <""|*internal|$rpc_conns_id> + "replication_conns": [], // replicate sessions towards these session services + "debit_interval": "0s", // interval to perform debits on. + "store_session_costs": false, // enable storing of the session costs within CDRs + "min_call_duration": "0s", // only authorize calls with allowed duration higher than this + "max_call_duration": "3h", // maximum call duration a prepaid call can last + "session_ttl": "0s", // time after a session with no updates is terminated, not defined by default + "session_indexes": [], // index sessions based on these fields for GetActiveSessions API + "client_protocol": 1.0, // version of protocol to use when acting as JSON-PRC client <"0","1.0"> + "channel_sync_interval": "0", // sync channels to detect stale sessions (0 to disable) + "terminate_attempts": 5, // attempts to get the session before terminating it + "alterable_fields": [], // the session fields that can be updated + "stir": { + "allowed_attest": ["*any"], // the default attest for stir/shaken authentication <*any|A|B|C> + "payload_maxduration": "-1", // the duration that stir header is valid after it was created + "default_attest": "A", // the default attest level if not mentioned in API + "publickey_path": "", // the path to the public key + "privatekey_path": "", // the path to the private key }, + "scheduler_conns": [],}, }` eMap := map[string]interface{}{ - "enabled": false, - "listen_bijson": "127.0.0.1:2014", - "chargers_conns": []string{}, - "rals_conns": []string{}, - "cdrs_conns": []string{}, - "resources_conns": []string{}, - "thresholds_conns": []string{}, - "stats_conns": []string{}, - "routes_conns": []string{}, - "attributes_conns": []string{}, - "replication_conns": []string{}, - "debit_interval": "0", - "store_session_costs": false, - "min_call_duration": "0", - "max_call_duration": "3h0m0s", - "min_dur_low_balance": "0", - "session_ttl": "0", - "session_indexes": []string{}, - "client_protocol": 1.0, - "channel_sync_interval": "0", - "terminate_attempts": 5, - "alterable_fields": []string{}, - "session_ttl_last_used": "0", - "session_ttl_max_delay": "0", - "session_ttl_usage": "0", - "session_ttl_last_usage": "0", - "stir": map[string]interface{}{ - "allowed_attest": []string{"*any"}, - "payload_maxduration": "-1", - "default_attest": "A", - "publickey_path": "", - "privatekey_path": "", + utils.EnabledCfg: false, + utils.ListenBijsonCfg: "127.0.0.1:2014", + utils.ChargerSConnsCfg: []string{}, + utils.RALsConnsCfg: []string{}, + utils.CDRsConnsCfg: []string{}, + utils.ResourceSConnsCfg: []string{}, + utils.ThresholdSConnsCfg: []string{}, + utils.StatSConnsCfg: []string{}, + utils.RouteSConnsCfg: []string{}, + utils.AttributeSConnsCfg: []string{}, + utils.ReplicationConnsCfg: []string{}, + utils.DebitIntervalCfg: "0", + utils.StoreSCostsCfg: false, + utils.MinCallDurationCfg: "0", + utils.MaxCallDurationCfg: "3h0m0s", + utils.SessionTTLCfg: "0", + utils.SessionIndexesCfg: []string{}, + utils.ClientProtocolCfg: 1.0, + utils.ChannelSyncIntervalCfg: "0", + utils.TerminateAttemptsCfg: 5, + utils.AlterableFieldsCfg: []string{}, + utils.STIRCfg: map[string]interface{}{ + utils.AllowedAtestCfg: []string{"*any"}, + utils.PayloadMaxdurationCfg: "-1", + utils.DefaultAttestCfg: "A", + utils.PublicKeyPathCfg: "", + utils.PrivateKeyPathCfg: "", }, - "scheduler_conns": []string{}, + utils.SchedulerConnsCfg: []string{}, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnSesCfg, err := jsnCfg.SessionSJsonCfg(); err != nil { - t.Error(err) - } else if err = sescfg.loadFromJsonCfg(jsnSesCfg); err != nil { - t.Error(err) - } else if rcv := sescfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } else if rcv := cgrCfg.sessionSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } - cfgJSONStr = `{ +} +func TestSessionSCfgAsMapInterface1(t *testing.T) { + cfgJSONStr := `{ "sessions": { - "enabled": false, - "listen_bijson": "127.0.0.1:2014", + "enabled": true, + "listen_bijson": "127.0.0.1:2018", "chargers_conns": ["*internal"], "rals_conns": ["*internal"], "cdrs_conns": ["*internal"], @@ -217,70 +207,58 @@ func TestSessionSCfgAsMapInterface(t *testing.T) { "routes_conns": ["*internal"], "attributes_conns": ["*internal"], "replication_conns": ["*localhost"], - "debit_interval": "0s", - "store_session_costs": false, - "min_call_duration": "0s", - "max_call_duration": "3h", - "session_ttl": "0s", - "session_indexes": [], - "client_protocol": 1.0, - "channel_sync_interval": "0", - "terminate_attempts": 5, - "alterable_fields": [], + "debit_interval": "8s", + "store_session_costs": true, + "min_call_duration": "1s", + "max_call_duration": "1h", + "session_ttl": "1s", + "client_protocol": 2.0, + "terminate_attempts": 10, "stir": { - "allowed_attest": ["*any"], + "allowed_attest": ["*any1","*any2"], "payload_maxduration": "-1", - "default_attest": "A", + "default_attest": "B", "publickey_path": "", "privatekey_path": "", }, "scheduler_conns": ["*internal"], }, }` - eMap = map[string]interface{}{ - "enabled": false, - "listen_bijson": "127.0.0.1:2014", - "chargers_conns": []string{"*internal"}, - "rals_conns": []string{"*internal"}, - "cdrs_conns": []string{"*internal"}, - "resources_conns": []string{"*internal"}, - "thresholds_conns": []string{"*internal"}, - "stats_conns": []string{"*internal"}, - "routes_conns": []string{"*internal"}, - "attributes_conns": []string{"*internal"}, - "replication_conns": []string{"*localhost"}, - "debit_interval": "0", - "store_session_costs": false, - "min_call_duration": "0", - "max_call_duration": "3h0m0s", - "min_dur_low_balance": "0", - "session_ttl": "0", - "session_indexes": []string{}, - "client_protocol": 1.0, - "channel_sync_interval": "0", - "terminate_attempts": 5, - "alterable_fields": []string{}, - "session_ttl_last_used": "0", - "session_ttl_max_delay": "0", - "session_ttl_usage": "0", - "session_ttl_last_usage": "0", - "stir": map[string]interface{}{ - "allowed_attest": []string{"*any"}, - "payload_maxduration": "-1", - "default_attest": "A", - "publickey_path": "", - "privatekey_path": "", + eMap := map[string]interface{}{ + utils.EnabledCfg: true, + utils.ListenBijsonCfg: "127.0.0.1:2018", + utils.ChargerSConnsCfg: []string{"*internal"}, + utils.RALsConnsCfg: []string{"*internal"}, + utils.CDRsConnsCfg: []string{"*internal"}, + utils.ResourceSConnsCfg: []string{"*internal"}, + utils.ThresholdSConnsCfg: []string{"*internal"}, + utils.StatSConnsCfg: []string{"*internal"}, + utils.RouteSConnsCfg: []string{"*internal"}, + utils.AttributeSConnsCfg: []string{"*internal"}, + utils.ReplicationConnsCfg: []string{"*localhost"}, + utils.DebitIntervalCfg: "8s", + utils.StoreSCostsCfg: true, + utils.MinCallDurationCfg: "1s", + utils.MaxCallDurationCfg: "1h0m0s", + utils.SessionTTLCfg: "1s", + utils.SessionIndexesCfg: []string{}, + utils.ClientProtocolCfg: 2.0, + utils.ChannelSyncIntervalCfg: "0", + utils.TerminateAttemptsCfg: 10, + utils.AlterableFieldsCfg: []string{}, + utils.STIRCfg: map[string]interface{}{ + utils.AllowedAtestCfg: []string{"*any1", "*any2"}, + utils.PayloadMaxdurationCfg: "-1", + utils.DefaultAttestCfg: "B", + utils.PublicKeyPathCfg: "", + utils.PrivateKeyPathCfg: "", }, - "scheduler_conns": []string{"*internal"}, + utils.SchedulerConnsCfg: []string{"*internal"}, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnSesCfg, err := jsnCfg.SessionSJsonCfg(); err != nil { - t.Error(err) - } else if err = sescfg.loadFromJsonCfg(jsnSesCfg); err != nil { - t.Error(err) - } else if rcv := sescfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nRecived: %+v", eMap, rcv) + } else if rcv := cgrCfg.sessionSCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("Expected %+v \n, received %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -337,7 +315,6 @@ func TestFsAgentCfgloadFromJsonCfg2(t *testing.T) { } func TestFsAgentCfgAsMapInterface(t *testing.T) { - var fsagcfg FsAgentCfg cfgJSONStr := `{ "freeswitch_agent": { "enabled": false, @@ -345,8 +322,7 @@ func TestFsAgentCfgAsMapInterface(t *testing.T) { "subscribe_park": true, "create_cdr": false, "extra_fields": [], - //"min_dur_low_balance": "5s", - //"low_balance_ann_file": "", + "low_balance_ann_file": "", "empty_balance_context": "", "empty_balance_ann_file": "", "max_wait_connection": "2s", @@ -356,27 +332,23 @@ func TestFsAgentCfgAsMapInterface(t *testing.T) { }, }` eMap := map[string]interface{}{ - "enabled": false, - "sessions_conns": []string{"*internal"}, - "subscribe_park": true, - "create_cdr": false, - "extra_fields": "", - "low_balance_ann_file": "", - "empty_balance_context": "", - "empty_balance_ann_file": "", - "max_wait_connection": "2s", - "event_socket_conns": []map[string]interface{}{ - {"address": "127.0.0.1:8021", "password": "ClueCon", "reconnects": 5, "alias": "127.0.0.1:8021"}, + utils.EnabledCfg: false, + utils.SessionSConnsCfg: []string{"*internal"}, + utils.SubscribeParkCfg: true, + utils.CreateCdrCfg: false, + utils.ExtraFieldsCfg: "", + utils.LowBalanceAnnFileCfg: "", + utils.EmptyBalanceContextCfg: "", + utils.EmptyBalanceAnnFileCfg: "", + utils.MaxWaitConnectionCfg: "2s", + utils.EventSocketConnsCfg: []map[string]interface{}{ + {utils.AddressCfg: "127.0.0.1:8021", utils.Password: "ClueCon", utils.ReconnectsCfg: 5, utils.AliasCfg: "127.0.0.1:8021"}, }, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnFsAgCfg, err := jsnCfg.FreeswitchAgentJsonCfg(); err != nil { - t.Error(err) - } else if err = fsagcfg.loadFromJsonCfg(jsnFsAgCfg); err != nil { - t.Error(err) - } else if rcv := fsagcfg.AsMapInterface(""); !reflect.DeepEqual(eMap, rcv) { - t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } else if rcv := cgrCfg.fsAgentCfg.AsMapInterface(cgrCfg.generalCfg.RSRSep); !reflect.DeepEqual(rcv, eMap) { + t.Errorf("Expected %+v \n, recevied %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } @@ -482,7 +454,6 @@ func TestAsteriskAgentCfgloadFromJsonCfg(t *testing.T) { } func TestAsteriskAgentCfgAsMapInterface(t *testing.T) { - var asagcfg AsteriskAgentCfg cfgJSONStr := `{ "asterisk_agent": { "enabled": true, @@ -501,13 +472,9 @@ func TestAsteriskAgentCfgAsMapInterface(t *testing.T) { {"alias": "", "address": "127.0.0.1:8088", "user": "cgrates", "password": "CGRateS.org", "connect_attempts": 3, "reconnects": 5}, }, } - if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + if cgrCfg, err := NewCGRConfigFromJsonStringWithDefaults(cfgJSONStr); err != nil { t.Error(err) - } else if jsnAsAgCfg, err := jsnCfg.AsteriskAgentJsonCfg(); err != nil { - t.Error(err) - } else if err = asagcfg.loadFromJsonCfg(jsnAsAgCfg); err != nil { - t.Error(err) - } else if rcv := asagcfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + } else if rcv := cgrCfg.asteriskAgentCfg.AsMapInterface(); !reflect.DeepEqual(rcv, eMap) { t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) } } diff --git a/utils/consts.go b/utils/consts.go index 2ef35afc9..1b2438f34 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -2036,6 +2036,7 @@ const ( EmptyBalanceAnnFileCfg = "empty_balance_ann_file" MaxWaitConnectionCfg = "max_wait_connection" EventSocketConnsCfg = "event_socket_conns" + EmptyBalanceContext = "empty_balance_context" ) // From Config