Updated config set

This commit is contained in:
Trial97
2021-05-27 16:58:46 +03:00
committed by Dan Christian Bogos
parent de4101c2dc
commit 32dfcc0a46
7 changed files with 553 additions and 3169 deletions

View File

@@ -30,8 +30,6 @@ import (
"github.com/cgrates/fsock"
)
// ToDo: Introduce support for RSRFields
const (
varPrefix = "variable_"
// Freswitch event proprities names

View File

@@ -253,12 +253,10 @@ func (cfg *CGRConfig) V1SetConfig(ctx *context.Context, args *SetConfigArgs, rep
return
}
var mp map[string]interface{}
var oldCfg *CGRConfig
updateDB := cfg.db != nil
if !args.DryRun && updateDB { // need to update the DB but only parts
if err = cfg.V1GetConfig(ctx, &SectionWithAPIOpts{Sections: sections}, &mp); err != nil {
return
}
oldCfg = cfg.Clone()
}
cfgV := cfg
@@ -283,7 +281,12 @@ func (cfg *CGRConfig) V1SetConfig(ctx *context.Context, args *SetConfigArgs, rep
if !args.DryRun {
cfgV.reloadSections(sections...)
if updateDB { // need to update the DB but only parts
// ToDo: add here the call
dft := NewDefaultCGRConfig()
for _, section := range sections {
if err = storeDiff(ctx, section, cfg.db, dft, oldCfg, cfg); err != nil {
return
}
}
}
}
*reply = utils.OK
@@ -314,12 +317,10 @@ func (cfg *CGRConfig) V1SetConfigFromJSON(ctx *context.Context, args *SetConfigF
*reply = utils.OK
return
}
var mp map[string]interface{}
var oldCfg *CGRConfig
updateDB := cfg.db != nil
if !args.DryRun && updateDB { // need to update the DB but only parts
if err = cfg.V1GetConfig(ctx, &SectionWithAPIOpts{Sections: sortedCfgSections}, &mp); err != nil {
return
}
oldCfg = cfg.Clone()
}
cfgV := cfg
if args.DryRun {
@@ -341,7 +342,12 @@ func (cfg *CGRConfig) V1SetConfigFromJSON(ctx *context.Context, args *SetConfigF
if !args.DryRun {
cfgV.reloadSections(sortedCfgSections...)
if updateDB { // need to update the DB but only parts
// ToDo: add here the call
dft := NewDefaultCGRConfig()
for _, section := range sortedCfgSections {
if err = storeDiff(ctx, section, cfg.db, dft, oldCfg, cfg); err != nil {
return
}
}
}
}
*reply = utils.OK
@@ -411,16 +417,9 @@ func (cfg *CGRConfig) V1StoreCfgInDB(ctx *context.Context, args *SectionWithAPIO
return errors.New("no DB connection for config")
}
if len(args.Sections) != 0 && args.Sections[0] != utils.MetaAll {
dft := NewDefaultCGRConfig()
for _, section := range args.Sections {
var mp interface{}
if mp, err = cfg.getSectionAsMap(section); err != nil {
return
}
var cfgSec interface{}
if cfgSec, err = prepareSectionFromMap(section, mp); err != nil {
return
}
if err = cfg.db.SetSection(ctx, section, cfgSec); err != nil {
if err = storeDiff(ctx, section, cfg.db, dft, nil, cfg); err != nil {
return
}
}
@@ -651,208 +650,530 @@ func (cfg *CGRConfig) V1StoreCfgInDB(ctx *context.Context, args *SectionWithAPIO
return
}
func prepareSectionFromMap(section string, mp interface{}) (cfgSec interface{}, err error) {
var data []byte
if data, err = json.Marshal(mp); err != nil {
return
}
func storeDiff(ctx *context.Context, section string, db ConfigDB, dft, v1, v2 *CGRConfig) (err error) {
switch section {
case GeneralJSON:
cfgSec = new(GeneralJsonCfg)
var jsn *GeneralJsonCfg
if jsn, err = db.GeneralJsonCfg(); err != nil {
return
}
g1 := dft.GeneralCfg()
if v1 != nil {
g1 = v1.GeneralCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffGeneralJsonCfg(jsn, g1, v2.GeneralCfg()))
case RPCConnsJSON:
cfgSec = new(RPCConnsJson)
var jsn RPCConnsJson
if jsn, err = db.RPCConnJsonCfg(); err != nil {
return
}
g1 := dft.RPCConns()
if v1 != nil {
g1 = v1.RPCConns()
} else {
g1.loadFromJSONCfg(jsn)
}
return db.SetSection(ctx, section, diffRPCConnsJson(jsn, g1, v2.RPCConns()))
case CacheJSON:
cfgSec = new(CacheJsonCfg)
var jsn *CacheJsonCfg
if jsn, err = db.CacheJsonCfg(); err != nil {
return
}
g1 := dft.CacheCfg()
if v1 != nil {
g1 = v1.CacheCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffCacheJsonCfg(jsn, g1, v2.CacheCfg()))
case ListenJSON:
cfgSec = new(ListenJsonCfg)
var jsn *ListenJsonCfg
if jsn, err = db.ListenJsonCfg(); err != nil {
return
}
g1 := dft.ListenCfg()
if v1 != nil {
g1 = v1.ListenCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffListenJsonCfg(jsn, g1, v2.ListenCfg()))
case HTTPJSON:
cfgSec = new(HTTPJsonCfg)
var jsn *HTTPJsonCfg
if jsn, err = db.HttpJsonCfg(); err != nil {
return
}
g1 := dft.HTTPCfg()
if v1 != nil {
g1 = v1.HTTPCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffHTTPJsonCfg(jsn, g1, v2.HTTPCfg()))
case StorDBJSON:
cfgSec = new(DbJsonCfg)
var jsn *DbJsonCfg
if jsn, err = db.DbJsonCfg(StorDBJSON); err != nil {
return
}
g1 := dft.StorDbCfg()
if v1 != nil {
g1 = v1.StorDbCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffStorDBDbJsonCfg(jsn, g1, v2.StorDbCfg()))
case DataDBJSON:
cfgSec = new(DbJsonCfg)
var jsn *DbJsonCfg
if jsn, err = db.DbJsonCfg(DataDBJSON); err != nil {
return
}
g1 := dft.DataDbCfg()
if v1 != nil {
g1 = v1.DataDbCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffDataDbJsonCfg(jsn, g1, v2.DataDbCfg()))
case FilterSJSON:
cfgSec = new(FilterSJsonCfg)
var jsn *FilterSJsonCfg
if jsn, err = db.FilterSJsonCfg(); err != nil {
return
}
g1 := dft.FilterSCfg()
if v1 != nil {
g1 = v1.FilterSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffFilterSJsonCfg(jsn, g1, v2.FilterSCfg()))
case CDRsJSON:
cfgSec = new(CdrsJsonCfg)
var jsn *CdrsJsonCfg
if jsn, err = db.CdrsJsonCfg(); err != nil {
return
}
g1 := dft.CdrsCfg()
if v1 != nil {
g1 = v1.CdrsCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffCdrsJsonCfg(jsn, g1, v2.CdrsCfg()))
case ERsJSON:
cfgSec = new(ERsJsonCfg)
var jsn *ERsJsonCfg
if jsn, err = db.ERsJsonCfg(); err != nil {
return
}
g1 := dft.ERsCfg()
if v1 != nil {
g1 = v1.ERsCfg()
} else {
if err = dft.loadTemplateSCfg(db); err != nil {
return
}
if err = g1.loadFromJSONCfg(jsn, dft.TemplatesCfg(), dft.GeneralCfg().RSRSep, dft.dfltEvRdr); err != nil {
return
}
}
return db.SetSection(ctx, section, diffERsJsonCfg(jsn, g1, v2.ERsCfg(), v2.GeneralCfg().RSRSep))
case EEsJSON:
cfgSec = new(EEsJsonCfg)
var jsn *EEsJsonCfg
if jsn, err = db.EEsJsonCfg(); err != nil {
return
}
g1 := dft.EEsCfg()
if v1 != nil {
g1 = v1.EEsCfg()
} else {
if err = dft.loadTemplateSCfg(db); err != nil {
return
}
if err = g1.loadFromJSONCfg(jsn, dft.TemplatesCfg(), dft.GeneralCfg().RSRSep, dft.dfltEvExp); err != nil {
return
}
}
return db.SetSection(ctx, section, diffEEsJsonCfg(jsn, g1, v2.EEsCfg(), v2.GeneralCfg().RSRSep))
case SessionSJSON:
cfgSec = new(SessionSJsonCfg)
var jsn *SessionSJsonCfg
if jsn, err = db.SessionSJsonCfg(); err != nil {
return
}
g1 := dft.SessionSCfg()
if v1 != nil {
g1 = v1.SessionSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffSessionSJsonCfg(jsn, g1, v2.SessionSCfg()))
case FreeSWITCHAgentJSON:
cfgSec = new(FreeswitchAgentJsonCfg)
var jsn *FreeswitchAgentJsonCfg
if jsn, err = db.FreeswitchAgentJsonCfg(); err != nil {
return
}
g1 := dft.FsAgentCfg()
if v1 != nil {
g1 = v1.FsAgentCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffFreeswitchAgentJsonCfg(jsn, g1, v2.FsAgentCfg()))
case KamailioAgentJSON:
cfgSec = new(KamAgentJsonCfg)
var jsn *KamAgentJsonCfg
if jsn, err = db.KamAgentJsonCfg(); err != nil {
return
}
g1 := dft.KamAgentCfg()
if v1 != nil {
g1 = v1.KamAgentCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffKamAgentJsonCfg(jsn, g1, v2.KamAgentCfg()))
case AsteriskAgentJSON:
cfgSec = new(AsteriskAgentJsonCfg)
var jsn *AsteriskAgentJsonCfg
if jsn, err = db.AsteriskAgentJsonCfg(); err != nil {
return
}
g1 := dft.AsteriskAgentCfg()
if v1 != nil {
g1 = v1.AsteriskAgentCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffAsteriskAgentJsonCfg(jsn, g1, v2.AsteriskAgentCfg()))
case DiameterAgentJSON:
cfgSec = new(DiameterAgentJsonCfg)
var jsn *DiameterAgentJsonCfg
if jsn, err = db.DiameterAgentJsonCfg(); err != nil {
return
}
g1 := dft.DiameterAgentCfg()
if v1 != nil {
g1 = v1.DiameterAgentCfg()
} else if err = g1.loadFromJSONCfg(jsn, dft.GeneralCfg().RSRSep); err != nil {
return
}
return db.SetSection(ctx, section, diffDiameterAgentJsonCfg(jsn, g1, v2.DiameterAgentCfg(), v2.GeneralCfg().RSRSep))
case RadiusAgentJSON:
cfgSec = new(RadiusAgentJsonCfg)
var jsn *RadiusAgentJsonCfg
if jsn, err = db.RadiusAgentJsonCfg(); err != nil {
return
}
g1 := dft.RadiusAgentCfg()
if v1 != nil {
g1 = v1.RadiusAgentCfg()
} else if err = g1.loadFromJSONCfg(jsn, dft.GeneralCfg().RSRSep); err != nil {
return
}
return db.SetSection(ctx, section, diffRadiusAgentJsonCfg(jsn, g1, v2.RadiusAgentCfg(), v2.GeneralCfg().RSRSep))
case HTTPAgentJSON:
cfgSec = new([]*HttpAgentJsonCfg)
var jsn *RadiusAgentJsonCfg
if jsn, err = db.RadiusAgentJsonCfg(); err != nil {
return
}
g1 := dft.RadiusAgentCfg()
if v1 != nil {
g1 = v1.RadiusAgentCfg()
} else if err = g1.loadFromJSONCfg(jsn, dft.GeneralCfg().RSRSep); err != nil {
return
}
return db.SetSection(ctx, section, diffRadiusAgentJsonCfg(jsn, g1, v2.RadiusAgentCfg(), v2.GeneralCfg().RSRSep))
case DNSAgentJSON:
cfgSec = new(DNSAgentJsonCfg)
var jsn *DNSAgentJsonCfg
if jsn, err = db.DNSAgentJsonCfg(); err != nil {
return
}
g1 := dft.DNSAgentCfg()
if v1 != nil {
g1 = v1.DNSAgentCfg()
} else if err = g1.loadFromJSONCfg(jsn, dft.GeneralCfg().RSRSep); err != nil {
return
}
return db.SetSection(ctx, section, diffDNSAgentJsonCfg(jsn, g1, v2.DNSAgentCfg(), v2.GeneralCfg().RSRSep))
case AttributeSJSON:
cfgSec = new(AttributeSJsonCfg)
var jsn *AttributeSJsonCfg
if jsn, err = db.AttributeServJsonCfg(); err != nil {
return
}
g1 := dft.AttributeSCfg()
if v1 != nil {
g1 = v1.AttributeSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffAttributeSJsonCfg(jsn, g1, v2.AttributeSCfg()))
case ChargerSJSON:
cfgSec = new(ChargerSJsonCfg)
var jsn *ChargerSJsonCfg
if jsn, err = db.ChargerServJsonCfg(); err != nil {
return
}
g1 := dft.ChargerSCfg()
if v1 != nil {
g1 = v1.ChargerSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffChargerSJsonCfg(jsn, g1, v2.ChargerSCfg()))
case ResourceSJSON:
cfgSec = new(ResourceSJsonCfg)
var jsn *ResourceSJsonCfg
if jsn, err = db.ResourceSJsonCfg(); err != nil {
return
}
g1 := dft.ResourceSCfg()
if v1 != nil {
g1 = v1.ResourceSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffResourceSJsonCfg(jsn, g1, v2.ResourceSCfg()))
case StatSJSON:
cfgSec = new(StatServJsonCfg)
var jsn *StatServJsonCfg
if jsn, err = db.StatSJsonCfg(); err != nil {
return
}
g1 := dft.StatSCfg()
if v1 != nil {
g1 = v1.StatSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffStatServJsonCfg(jsn, g1, v2.StatSCfg()))
case ThresholdSJSON:
cfgSec = new(ThresholdSJsonCfg)
var jsn *ThresholdSJsonCfg
if jsn, err = db.ThresholdSJsonCfg(); err != nil {
return
}
g1 := dft.ThresholdSCfg()
if v1 != nil {
g1 = v1.ThresholdSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffThresholdSJsonCfg(jsn, g1, v2.ThresholdSCfg()))
case RouteSJSON:
cfgSec = new(RouteSJsonCfg)
var jsn *RouteSJsonCfg
if jsn, err = db.RouteSJsonCfg(); err != nil {
return
}
g1 := dft.RouteSCfg()
if v1 != nil {
g1 = v1.RouteSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffRouteSJsonCfg(jsn, g1, v2.RouteSCfg()))
case LoaderSJSON:
cfgSec = make([]*LoaderJsonCfg, 0)
var jsn []*LoaderJsonCfg
if jsn, err = db.LoaderJsonCfg(); err != nil {
return
}
var g1 LoaderSCfgs
if v1 != nil {
g1 = v1.LoaderCfg()
} else {
if err = dft.loadTemplateSCfg(db); err != nil {
return
}
if err = dft.loadLoaderSCfg(db); err != nil {
return
}
g1 = dft.LoaderCfg()
}
return db.SetSection(ctx, section, diffLoadersJsonCfg(jsn, g1, v2.LoaderCfg(), v2.GeneralCfg().RSRSep))
case SureTaxJSON:
cfgSec = new(SureTaxJsonCfg)
var jsn *SureTaxJsonCfg
if jsn, err = db.SureTaxJsonCfg(); err != nil {
return
}
g1 := dft.SureTaxCfg()
if v1 != nil {
g1 = v1.SureTaxCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffSureTaxJsonCfg(jsn, g1, v2.SureTaxCfg(), v2.GeneralCfg().RSRSep))
case DispatcherSJSON:
cfgSec = new(DispatcherSJsonCfg)
var jsn *DispatcherSJsonCfg
if jsn, err = db.DispatcherSJsonCfg(); err != nil {
return
}
g1 := dft.DispatcherSCfg()
if v1 != nil {
g1 = v1.DispatcherSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffDispatcherSJsonCfg(jsn, g1, v2.DispatcherSCfg()))
case RegistrarCJSON:
cfgSec = new(RegistrarCJsonCfgs)
var jsn *RegistrarCJsonCfgs
if jsn, err = db.RegistrarCJsonCfgs(); err != nil {
return
}
g1 := dft.RegistrarCCfg()
if v1 != nil {
g1 = v1.RegistrarCCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffRegistrarCJsonCfgs(jsn, g1, v2.RegistrarCCfg()))
case LoaderJSON:
cfgSec = new(LoaderCfgJson)
var jsn *LoaderCfgJson
if jsn, err = db.LoaderCfgJson(); err != nil {
return
}
g1 := dft.LoaderCgrCfg()
if v1 != nil {
g1 = v1.LoaderCgrCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffLoaderCfgJson(jsn, g1, v2.LoaderCgrCfg()))
case MigratorJSON:
cfgSec = new(MigratorCfgJson)
var jsn *MigratorCfgJson
if jsn, err = db.MigratorCfgJson(); err != nil {
return
}
g1 := dft.MigratorCgrCfg()
if v1 != nil {
g1 = v1.MigratorCgrCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffMigratorCfgJson(jsn, g1, v2.MigratorCgrCfg()))
case TlsJSON:
cfgSec = new(TlsJsonCfg)
var jsn *TlsJsonCfg
if jsn, err = db.TlsCfgJson(); err != nil {
return
}
g1 := dft.TLSCfg()
if v1 != nil {
g1 = v1.TLSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffTlsJsonCfg(jsn, g1, v2.TLSCfg()))
case AnalyzerSJSON:
cfgSec = new(AnalyzerSJsonCfg)
var jsn *AnalyzerSJsonCfg
if jsn, err = db.AnalyzerCfgJson(); err != nil {
return
}
g1 := dft.AnalyzerSCfg()
if v1 != nil {
g1 = v1.AnalyzerSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffAnalyzerSJsonCfg(jsn, g1, v2.AnalyzerSCfg()))
case AdminSJSON:
cfgSec = new(AdminSJsonCfg)
var jsn *AdminSJsonCfg
if jsn, err = db.AdminSCfgJson(); err != nil {
return
}
g1 := dft.AdminSCfg()
if v1 != nil {
g1 = v1.AdminSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffAdminSJsonCfg(jsn, g1, v2.AdminSCfg()))
case RateSJSON:
cfgSec = new(RateSJsonCfg)
var jsn *RateSJsonCfg
if jsn, err = db.RateCfgJson(); err != nil {
return
}
g1 := dft.RateSCfg()
if v1 != nil {
g1 = v1.RateSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffRateSJsonCfg(jsn, g1, v2.RateSCfg()))
case SIPAgentJSON:
cfgSec = new(SIPAgentJsonCfg)
var jsn *SIPAgentJsonCfg
if jsn, err = db.SIPAgentJsonCfg(); err != nil {
return
}
g1 := dft.SIPAgentCfg()
if v1 != nil {
g1 = v1.SIPAgentCfg()
} else if err = g1.loadFromJSONCfg(jsn, dft.GeneralCfg().RSRSep); err != nil {
return
}
return db.SetSection(ctx, section, diffSIPAgentJsonCfg(jsn, g1, v2.SIPAgentCfg(), v2.GeneralCfg().RSRSep))
case TemplatesJSON:
cfgSec = new(FcTemplatesJsonCfg)
var jsn FcTemplatesJsonCfg
if jsn, err = db.TemplateSJsonCfg(); err != nil {
return
}
var g1 FCTemplates
if v1 != nil {
g1 = v1.TemplatesCfg()
} else if err = dft.loadTemplateSCfg(db); err != nil {
return
} else {
g1 = dft.TemplatesCfg()
}
return db.SetSection(ctx, section, diffFcTemplatesJsonCfg(jsn, g1, v2.TemplatesCfg(), v2.GeneralCfg().RSRSep))
case ConfigSJSON:
cfgSec = new(ConfigSCfgJson)
var jsn *ConfigSCfgJson
if jsn, err = db.ConfigSJsonCfg(); err != nil {
return
}
g1 := dft.ConfigSCfg()
if v1 != nil {
g1 = v1.ConfigSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffConfigSCfgJson(jsn, g1, v2.ConfigSCfg()))
case APIBanJSON:
cfgSec = new(APIBanJsonCfg)
var jsn *APIBanJsonCfg
if jsn, err = db.ApiBanCfgJson(); err != nil {
return
}
g1 := dft.APIBanCfg()
if v1 != nil {
g1 = v1.APIBanCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffAPIBanJsonCfg(jsn, g1, v2.APIBanCfg()))
case CoreSJSON:
cfgSec = new(CoreSJsonCfg)
var jsn *CoreSJsonCfg
if jsn, err = db.CoreSJSON(); err != nil {
return
}
g1 := dft.CoreSCfg()
if v1 != nil {
g1 = v1.CoreSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffCoreSJsonCfg(jsn, g1, v2.CoreSCfg()))
case ActionSJSON:
cfgSec = new(ActionSJsonCfg)
var jsn *ActionSJsonCfg
if jsn, err = db.ActionSCfgJson(); err != nil {
return
}
g1 := dft.ActionSCfg()
if v1 != nil {
g1 = v1.ActionSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
return db.SetSection(ctx, section, diffActionSJsonCfg(jsn, g1, v2.ActionSCfg()))
case AccountSJSON:
cfgSec = new(AccountSJsonCfg)
}
err = json.Unmarshal(data, cfgSec)
return
}
func updateSections(ctx *context.Context, db ConfigDB, mp map[string]interface{}) (err error) {
for section, val := range mp {
var sec interface{}
if sec, err = prepareSectionFromDB(section, db); err != nil {
var jsn *AccountSJsonCfg
if jsn, err = db.AccountSCfgJson(); err != nil {
return
}
var data []byte
if data, err = json.Marshal(val); err != nil {
return
}
if err = json.Unmarshal(data, &sec); err != nil {
return
}
if err = db.SetSection(ctx, section, sec); err != nil {
g1 := dft.AccountSCfg()
if v1 != nil {
g1 = v1.AccountSCfg()
} else if err = g1.loadFromJSONCfg(jsn); err != nil {
return
}
}
return
}
func prepareSectionFromDB(section string, db ConfigDB) (cfgSec interface{}, err error) {
switch section {
case GeneralJSON:
cfgSec, err = db.GeneralJsonCfg()
case RPCConnsJSON:
cfgSec, err = db.RPCConnJsonCfg()
case CacheJSON:
cfgSec, err = db.CacheJsonCfg()
case ListenJSON:
cfgSec, err = db.ListenJsonCfg()
case HTTPJSON:
cfgSec, err = db.HttpJsonCfg()
case StorDBJSON:
cfgSec, err = db.DbJsonCfg(StorDBJSON)
case DataDBJSON:
cfgSec, err = db.DbJsonCfg(DataDBJSON)
case FilterSJSON:
cfgSec, err = db.FilterSJsonCfg()
case CDRsJSON:
cfgSec, err = db.CdrsJsonCfg()
case ERsJSON:
cfgSec, err = db.ERsJsonCfg()
case EEsJSON:
cfgSec, err = db.EEsJsonCfg()
case SessionSJSON:
cfgSec, err = db.SessionSJsonCfg()
case FreeSWITCHAgentJSON:
cfgSec, err = db.FreeswitchAgentJsonCfg()
case KamailioAgentJSON:
cfgSec, err = db.KamAgentJsonCfg()
case AsteriskAgentJSON:
cfgSec, err = db.AsteriskAgentJsonCfg()
case DiameterAgentJSON:
cfgSec, err = db.DiameterAgentJsonCfg()
case RadiusAgentJSON:
cfgSec, err = db.RadiusAgentJsonCfg()
case HTTPAgentJSON:
cfgSec, err = db.HttpAgentJsonCfg()
case DNSAgentJSON:
cfgSec, err = db.DNSAgentJsonCfg()
case AttributeSJSON:
cfgSec, err = db.AttributeServJsonCfg()
case ChargerSJSON:
cfgSec, err = db.ChargerServJsonCfg()
case ResourceSJSON:
cfgSec, err = db.ResourceSJsonCfg()
case StatSJSON:
cfgSec, err = db.StatSJsonCfg()
case ThresholdSJSON:
cfgSec, err = db.ThresholdSJsonCfg()
case RouteSJSON:
cfgSec, err = db.RouteSJsonCfg()
case LoaderSJSON:
cfgSec, err = db.LoaderJsonCfg()
case SureTaxJSON:
cfgSec, err = db.SureTaxJsonCfg()
case DispatcherSJSON:
cfgSec, err = db.DispatcherSJsonCfg()
case RegistrarCJSON:
cfgSec, err = db.RegistrarCJsonCfgs()
case LoaderJSON:
cfgSec, err = db.LoaderCfgJson()
case MigratorJSON:
cfgSec, err = db.MigratorCfgJson()
case TlsJSON:
cfgSec, err = db.TlsCfgJson()
case AnalyzerSJSON:
cfgSec, err = db.AnalyzerCfgJson()
case AdminSJSON:
cfgSec, err = db.AdminSCfgJson()
case RateSJSON:
cfgSec, err = db.RateCfgJson()
case SIPAgentJSON:
cfgSec, err = db.SIPAgentJsonCfg()
case TemplatesJSON:
cfgSec, err = db.TemplateSJsonCfg()
case ConfigSJSON:
cfgSec, err = db.ConfigSJsonCfg()
case APIBanJSON:
cfgSec, err = db.ApiBanCfgJson()
case CoreSJSON:
cfgSec, err = db.CoreSJSON()
case ActionSJSON:
cfgSec, err = db.ActionSCfgJson()
case AccountSJSON:
cfgSec, err = db.AccountSCfgJson()
return db.SetSection(ctx, section, diffAccountSJsonCfg(jsn, g1, v2.AccountSCfg()))
}
return
}

File diff suppressed because it is too large Load Diff

View File

@@ -30,8 +30,6 @@ import (
"sync"
"time"
"github.com/cgrates/rpcclient"
"github.com/cgrates/cgrates/utils"
)
@@ -396,41 +394,7 @@ func (cfg *CGRConfig) loadRPCConns(jsnCfg ConfigDB) (err error) {
if jsnRPCConns, err = jsnCfg.RPCConnJsonCfg(); err != nil {
return
}
// hardoded the *internal connection
cfg.rpcConns[utils.MetaInternal] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{{
Address: utils.MetaInternal,
}},
}
cfg.rpcConns[rpcclient.BiRPCInternal] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{{
Address: rpcclient.BiRPCInternal,
}},
}
cfg.rpcConns[utils.MetaLocalHost] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{{
Address: "127.0.0.1:2012",
Transport: utils.MetaJSON,
}},
}
cfg.rpcConns[utils.MetaBiJSONLocalHost] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{{
Address: "127.0.0.1:2014",
Transport: rpcclient.BiRPCJSON,
}},
}
for key, val := range jsnRPCConns {
cfg.rpcConns[key] = NewDfltRPCConn()
cfg.rpcConns[key].loadFromJSONCfg(val)
}
cfg.rpcConns.loadFromJSONCfg(jsnRPCConns)
return
}

View File

@@ -29,8 +29,8 @@ type LoaderCgrCfg struct {
TpID string
DataPath string
DisableReverse bool
FieldSeparator rune // The separator to use when reading csvs
CachesConns []string // ToDoNext: add actions conn
FieldSeparator rune // The separator to use when reading csvs
CachesConns []string
ActionSConns []string
GapiCredentials json.RawMessage
GapiToken json.RawMessage

View File

@@ -39,6 +39,44 @@ func NewDfltRPCConn() *RPCConn {
// RPCConns the config for all rpc pools
type RPCConns map[string]*RPCConn
func (rC RPCConns) loadFromJSONCfg(jsn RPCConnsJson) {
// hardoded the *internal connection
rC[utils.MetaInternal] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{{
Address: utils.MetaInternal,
}},
}
rC[rpcclient.BiRPCInternal] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{{
Address: rpcclient.BiRPCInternal,
}},
}
rC[utils.MetaLocalHost] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{{
Address: "127.0.0.1:2012",
Transport: utils.MetaJSON,
}},
}
rC[utils.MetaBiJSONLocalHost] = &RPCConn{
Strategy: rpcclient.PoolFirst,
PoolSize: 0,
Conns: []*RemoteHost{{
Address: "127.0.0.1:2014",
Transport: rpcclient.BiRPCJSON,
}},
}
for key, val := range jsn {
rC[key] = NewDfltRPCConn()
rC[key].loadFromJSONCfg(val)
}
}
// AsMapInterface returns the config as a map[string]interface{}
func (rC RPCConns) AsMapInterface() (rpcConns map[string]interface{}) {
rpcConns = make(map[string]interface{})

View File

@@ -316,6 +316,13 @@ func (ms *MongoStorage) ensureIndexesForCol(col string) (err error) { // exporte
if err = ms.enusureIndex(col, true, "id"); err != nil {
return
}
//StorDB
case utils.TBLTPStats, utils.TBLTPResources, utils.TBLTPDispatchers,
utils.TBLTPDispatcherHosts, utils.TBLTPChargers,
utils.TBLTPRoutes, utils.TBLTPThresholds:
if err = ms.enusureIndex(col, true, "tpid", "id"); err != nil {
return
}
case utils.CDRsTBL:
if err = ms.enusureIndex(col, true, CGRIDLow, RunIDLow,
OriginIDLow); err != nil {
@@ -363,6 +370,16 @@ func (ms *MongoStorage) EnsureIndexes(cols ...string) (err error) {
}
}
}
if ms.storageType == utils.StorDB {
for _, col := range []string{utils.TBLTPStats, utils.TBLTPResources, utils.TBLTPDispatchers,
utils.TBLTPDispatcherHosts, utils.TBLTPChargers,
utils.TBLTPRoutes, utils.TBLTPThresholds,
utils.CDRsTBL, utils.SessionCostsTBL} {
if err = ms.ensureIndexesForCol(col); err != nil {
return
}
}
}
return
}