Updated sessions and loaders AsMapInterface method

This commit is contained in:
porosnicuadrian
2020-09-24 10:25:24 +03:00
committed by Dan Christian Bogos
parent 5fc810a2d2
commit fbe425f144
5 changed files with 346 additions and 367 deletions

View File

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

View File

@@ -132,8 +132,7 @@ func TestLoaderCfgAsMapInterface(t *testing.T) {
},
],
},
],
],
}`
eMap := []map[string]interface{}{
{

View File

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

View File

@@ -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: <true|false>
"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))
}
}

View File

@@ -2036,6 +2036,7 @@ const (
EmptyBalanceAnnFileCfg = "empty_balance_ann_file"
MaxWaitConnectionCfg = "max_wait_connection"
EventSocketConnsCfg = "event_socket_conns"
EmptyBalanceContext = "empty_balance_context"
)
// From Config