mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-15 21:29:52 +05:00
Added Loaders to config.go
This commit is contained in:
committed by
Dan Christian Bogos
parent
65a1ed19bd
commit
391b904ecc
@@ -42,12 +42,14 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
DBDefaults DbDefaults
|
||||
cgrCfg *CGRConfig // will be shared
|
||||
dfltFsConnConfig *FsConnConfig // Default FreeSWITCH Connection configuration, built out of json default configuration
|
||||
dfltKamConnConfig *KamConnConfig // Default Kamailio Connection configuration
|
||||
dfltHaPoolConfig *HaPoolConfig
|
||||
dfltAstConnCfg *AsteriskConnCfg
|
||||
DBDefaults DbDefaults
|
||||
cgrCfg *CGRConfig // will be shared
|
||||
dfltFsConnConfig *FsConnConfig // Default FreeSWITCH Connection configuration, built out of json default configuration
|
||||
dfltKamConnConfig *KamConnConfig // Default Kamailio Connection configuration
|
||||
dfltHaPoolConfig *HaPoolConfig
|
||||
dfltAstConnCfg *AsteriskConnCfg
|
||||
dfltLoadersConfig *LoaderSConfig
|
||||
dfltLoaderSDataTypeConfig *LoaderSDataType
|
||||
)
|
||||
|
||||
func NewDbDefaults() DbDefaults {
|
||||
@@ -343,6 +345,7 @@ type CGRConfig struct {
|
||||
statsCfg *StatSCfg // Configuration for StatS
|
||||
thresholdSCfg *ThresholdSCfg // configuration for ThresholdS
|
||||
supplierSCfg *SupplierSCfg // configuration for SupplierS
|
||||
LoaderProfiles []*LoaderSConfig // configuration for Loader
|
||||
MailerServer string // The server to use when sending emails out
|
||||
MailerAuthUser string // Authenticate to email server using this user
|
||||
MailerAuthPass string // Authenticate to email server with this password
|
||||
@@ -775,6 +778,11 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
jsnLoaderSCfg, err := jsnCfg.LoaderSJsonCfg()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
jsnMailerCfg, err := jsnCfg.MailerJsonCfg()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -1137,6 +1145,17 @@ func (self *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if jsnLoaderSCfg != nil {
|
||||
if self.LoaderProfiles == nil {
|
||||
self.LoaderProfiles = make([]*LoaderSConfig, len(jsnLoaderSCfg))
|
||||
}
|
||||
for idx, profile := range jsnLoaderSCfg {
|
||||
self.LoaderProfiles[idx] = NewDfltLoadersConfig()
|
||||
self.LoaderProfiles[idx].loadFromJsonCfg(profile)
|
||||
}
|
||||
}
|
||||
|
||||
if jsnCdrcCfg != nil {
|
||||
if self.CdrcProfiles == nil {
|
||||
self.CdrcProfiles = make(map[string][]*CdrcConfig)
|
||||
|
||||
@@ -915,3 +915,75 @@ func TestDbDefaults(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoaderDefaults(t *testing.T) {
|
||||
eCfg := []*LoaderSConfig{
|
||||
&LoaderSConfig{
|
||||
Id: utils.META_DEFAULT,
|
||||
Enabled: false,
|
||||
DryRun: false,
|
||||
CacheSConns: []*HaPoolConfig{
|
||||
&HaPoolConfig{
|
||||
Address: utils.MetaInternal,
|
||||
},
|
||||
},
|
||||
FieldSeparator: ",",
|
||||
MaxOpenFiles: 1024,
|
||||
TpInDir: "/var/spool/cgrates/tploader/in",
|
||||
TpOutDir: "/var/spool/cgrates/tploader/out",
|
||||
Data: []*LoaderSDataType{
|
||||
&LoaderSDataType{
|
||||
Type: utils.MetaAttributes,
|
||||
Filename: utils.AttributesCsv,
|
||||
Fields: []*CfgCdrField{
|
||||
&CfgCdrField{Tag: "TenantID",
|
||||
FieldId: "Tenant",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("0", utils.INFIELD_SEP),
|
||||
Mandatory: true},
|
||||
&CfgCdrField{Tag: "ProfileID",
|
||||
FieldId: "ID",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("1", utils.INFIELD_SEP),
|
||||
Mandatory: true},
|
||||
&CfgCdrField{Tag: "Contexts",
|
||||
FieldId: "Contexts",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("2", utils.INFIELD_SEP)},
|
||||
&CfgCdrField{Tag: "FilterIDs",
|
||||
FieldId: "FilterIDs",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("3", utils.INFIELD_SEP)},
|
||||
&CfgCdrField{Tag: "ActivationInterval",
|
||||
FieldId: "ActivationInterval",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("4", utils.INFIELD_SEP)},
|
||||
&CfgCdrField{Tag: "FieldName",
|
||||
FieldId: "FieldName",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("5", utils.INFIELD_SEP)},
|
||||
&CfgCdrField{Tag: "Initial",
|
||||
FieldId: "Initial",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("6", utils.INFIELD_SEP)},
|
||||
&CfgCdrField{Tag: "Substitute",
|
||||
FieldId: "Substitute",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("7", utils.INFIELD_SEP)},
|
||||
&CfgCdrField{Tag: "Append",
|
||||
FieldId: "Append",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("8", utils.INFIELD_SEP)},
|
||||
&CfgCdrField{Tag: "Weight",
|
||||
FieldId: "Weight",
|
||||
Type: utils.META_COMPOSED,
|
||||
Value: utils.ParseRSRFieldsMustCompile("9", utils.INFIELD_SEP)},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
if !reflect.DeepEqual(eCfg, cgrCfg.LoaderProfiles) {
|
||||
t.Errorf("received: %+v, expecting: %+v", eCfg, cgrCfg.LoaderProfiles)
|
||||
}
|
||||
}
|
||||
|
||||
137
config/loadersconfig.go
Normal file
137
config/loadersconfig.go
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments
|
||||
Copyright (C) ITsysCOM GmbH
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
package config
|
||||
|
||||
func NewDfltLoadersConfig() *LoaderSConfig {
|
||||
if dfltLoadersConfig == nil {
|
||||
return new(LoaderSConfig)
|
||||
}
|
||||
dfltVal := *dfltLoadersConfig
|
||||
return &dfltVal
|
||||
}
|
||||
|
||||
type LoaderSConfig struct {
|
||||
Id string
|
||||
Enabled bool
|
||||
DryRun bool
|
||||
CacheSConns []*HaPoolConfig
|
||||
FieldSeparator string
|
||||
MaxOpenFiles int
|
||||
TpInDir string
|
||||
TpOutDir string
|
||||
Data []*LoaderSDataType
|
||||
}
|
||||
|
||||
func NewDfltLoaderSDataTypeConfig() *LoaderSDataType {
|
||||
if dfltLoaderSDataTypeConfig == nil {
|
||||
return new(LoaderSDataType) // No defaults, most probably we are building the defaults now
|
||||
}
|
||||
dfltVal := *dfltLoaderSDataTypeConfig // Copy the value instead of it's pointer
|
||||
return &dfltVal
|
||||
}
|
||||
|
||||
type LoaderSDataType struct {
|
||||
Type string
|
||||
Filename string
|
||||
Fields []*CfgCdrField
|
||||
}
|
||||
|
||||
func (self *LoaderSDataType) loadFromJsonCfg(jsnCfg *LoaderSJsonDataType) error {
|
||||
if jsnCfg == nil {
|
||||
return nil
|
||||
}
|
||||
var err error
|
||||
if jsnCfg.Type != nil {
|
||||
self.Type = *jsnCfg.Type
|
||||
}
|
||||
if jsnCfg.File_name != nil {
|
||||
self.Filename = *jsnCfg.File_name
|
||||
}
|
||||
if jsnCfg.Fields != nil {
|
||||
if self.Fields, err = CfgCdrFieldsFromCdrFieldsJsonCfg(*jsnCfg.Fields); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *LoaderSConfig) loadFromJsonCfg(jsnCfg *LoaderSJsonCfg) error {
|
||||
if jsnCfg == nil {
|
||||
return nil
|
||||
}
|
||||
if jsnCfg.ID != nil {
|
||||
self.Id = *jsnCfg.ID
|
||||
}
|
||||
if jsnCfg.Enabled != nil {
|
||||
self.Enabled = *jsnCfg.Enabled
|
||||
}
|
||||
if jsnCfg.Dry_run != nil {
|
||||
self.DryRun = *jsnCfg.Dry_run
|
||||
}
|
||||
if jsnCfg.Caches_conns != nil {
|
||||
self.CacheSConns = make([]*HaPoolConfig, len(*jsnCfg.Caches_conns))
|
||||
for idx, jsnHaCfg := range *jsnCfg.Caches_conns {
|
||||
self.CacheSConns[idx] = NewDfltHaPoolConfig()
|
||||
self.CacheSConns[idx].loadFromJsonCfg(jsnHaCfg)
|
||||
}
|
||||
}
|
||||
if jsnCfg.Field_separator != nil {
|
||||
self.FieldSeparator = *jsnCfg.Field_separator
|
||||
}
|
||||
if jsnCfg.Max_open_files != nil {
|
||||
self.MaxOpenFiles = *jsnCfg.Max_open_files
|
||||
}
|
||||
if jsnCfg.Tp_in_dir != nil {
|
||||
self.TpInDir = *jsnCfg.Tp_in_dir
|
||||
}
|
||||
if jsnCfg.Tp_out_dir != nil {
|
||||
self.TpOutDir = *jsnCfg.Tp_out_dir
|
||||
}
|
||||
if jsnCfg.Data != nil {
|
||||
self.Data = make([]*LoaderSDataType, len(*jsnCfg.Data))
|
||||
for idx, jsnLoCfg := range *jsnCfg.Data {
|
||||
self.Data[idx] = NewDfltLoaderSDataTypeConfig()
|
||||
self.Data[idx].loadFromJsonCfg(jsnLoCfg)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Clone itself into a new LoadersConfig
|
||||
func (self *LoaderSConfig) Clone() *LoaderSConfig {
|
||||
clnLoader := new(LoaderSConfig)
|
||||
clnLoader.Id = self.Id
|
||||
clnLoader.Enabled = self.Enabled
|
||||
clnLoader.DryRun = self.DryRun
|
||||
clnLoader.CacheSConns = make([]*HaPoolConfig, len(self.CacheSConns))
|
||||
for idx, cdrConn := range self.CacheSConns {
|
||||
clonedVal := *cdrConn
|
||||
clnLoader.CacheSConns[idx] = &clonedVal
|
||||
}
|
||||
clnLoader.FieldSeparator = self.FieldSeparator
|
||||
clnLoader.MaxOpenFiles = self.MaxOpenFiles
|
||||
clnLoader.TpInDir = self.TpInDir
|
||||
clnLoader.TpOutDir = self.TpOutDir
|
||||
clnLoader.Data = make([]*LoaderSDataType, len(self.Data))
|
||||
for idx, fld := range self.Data {
|
||||
clonedVal := *fld
|
||||
clnLoader.Data[idx] = &clonedVal
|
||||
}
|
||||
return clnLoader
|
||||
}
|
||||
Reference in New Issue
Block a user