From 18e65788403d9f0331679a7238fdf32d4e3557f3 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Wed, 19 Aug 2020 13:10:00 +0300 Subject: [PATCH] Added the config for the new subsystem: dispatcherh --- config/config.go | 24 +++- config/config_defaults.go | 24 ++-- config/config_json.go | 13 +++ config/config_json_test.go | 13 ++- config/dispatcherhcfg.go | 71 ++++++++++++ config/dispatcherhcfg_test.go | 105 ++++++++++++++++++ .../{dispatchercfg.go => dispatcherscfg.go} | 0 ...chercfg_test.go => dispatcherscfg_test.go} | 0 config/httpcfg.go | 29 +++-- config/httpcfg_test.go | 14 ++- config/libconfig_json.go | 25 +++-- engine/dispatcherprfl_test.go | 4 +- utils/consts.go | 22 +++- 13 files changed, 297 insertions(+), 47 deletions(-) create mode 100755 config/dispatcherhcfg.go create mode 100644 config/dispatcherhcfg_test.go rename config/{dispatchercfg.go => dispatcherscfg.go} (100%) rename config/{dispatchercfg_test.go => dispatcherscfg_test.go} (100%) diff --git a/config/config.go b/config/config.go index 004d0c4b8..e975f0cc4 100755 --- a/config/config.go +++ b/config/config.go @@ -172,6 +172,7 @@ func NewDefaultCGRConfig() (cfg *CGRConfig, err error) { cfg.routeSCfg = new(RouteSCfg) cfg.sureTaxCfg = new(SureTaxCfg) cfg.dispatcherSCfg = new(DispatcherSCfg) + cfg.dispatcherHCfg = new(DispatcherHCfg) cfg.loaderCgrCfg = new(LoaderCgrCfg) cfg.migratorCgrCfg = new(MigratorCgrCfg) cfg.mailerCfg = new(MailerCfg) @@ -292,6 +293,7 @@ type CGRConfig struct { routeSCfg *RouteSCfg // RouteS config sureTaxCfg *SureTaxCfg // SureTax config dispatcherSCfg *DispatcherSCfg // DispatcherS config + dispatcherHCfg *DispatcherHCfg // DispatcherS config loaderCgrCfg *LoaderCgrCfg // LoaderCgr config migratorCgrCfg *MigratorCgrCfg // MigratorCgr config mailerCfg *MailerCfg // Mailer config @@ -366,7 +368,7 @@ func (cfg *CGRConfig) loadFromJsonCfg(jsnCfg *CgrJsonCfg) (err error) { cfg.loadMailerCfg, cfg.loadSureTaxCfg, cfg.loadDispatcherSCfg, cfg.loadLoaderCgrCfg, cfg.loadMigratorCgrCfg, cfg.loadTlsCgrCfg, cfg.loadAnalyzerCgrCfg, cfg.loadApierCfg, cfg.loadErsCfg, cfg.loadEesCfg, - cfg.loadRateSCfg, cfg.loadSIPAgentCfg} { + cfg.loadRateSCfg, cfg.loadSIPAgentCfg, cfg.loadDispatcherHCfg} { if err = loadFunc(jsnCfg); err != nil { return } @@ -661,6 +663,15 @@ func (cfg *CGRConfig) loadDispatcherSCfg(jsnCfg *CgrJsonCfg) (err error) { return cfg.dispatcherSCfg.loadFromJsonCfg(jsnDispatcherSCfg) } +// loadDispatcherHCfg loads the DispatcherS section of the configuration +func (cfg *CGRConfig) loadDispatcherHCfg(jsnCfg *CgrJsonCfg) (err error) { + var jsnDispatcherHCfg *DispatcherHJsonCfg + if jsnDispatcherHCfg, err = jsnCfg.DispatcherHJsonCfg(); err != nil { + return + } + return cfg.dispatcherHCfg.loadFromJsonCfg(jsnDispatcherHCfg) +} + // loadLoaderCgrCfg loads the Loader section of the configuration func (cfg *CGRConfig) loadLoaderCgrCfg(jsnCfg *CgrJsonCfg) (err error) { var jsnLoaderCgrCfg *LoaderCfgJson @@ -882,6 +893,13 @@ func (cfg *CGRConfig) DispatcherSCfg() *DispatcherSCfg { return cfg.dispatcherSCfg } +// DispatcherHCfg returns the config for DispatcherS +func (cfg *CGRConfig) DispatcherHCfg() *DispatcherHCfg { + cfg.lks[DispatcherSJson].Lock() + defer cfg.lks[DispatcherSJson].Unlock() + return cfg.dispatcherHCfg +} + // MigratorCgrCfg returns the config for Migrator func (cfg *CGRConfig) MigratorCgrCfg() *MigratorCgrCfg { cfg.lks[CgrMigratorCfgJson].Lock() @@ -1086,6 +1104,8 @@ func (cfg *CGRConfig) V1GetConfigSection(args *StringWithOpts, reply *map[string jsonString = utils.ToJSON(cfg.SureTaxCfg()) case DispatcherSJson: jsonString = utils.ToJSON(cfg.DispatcherSCfg()) + case DispatcherHJson: + jsonString = utils.ToJSON(cfg.DispatcherHCfg()) case LoaderJson: jsonString = utils.ToJSON(cfg.LoaderCfg()) case CgrLoaderCfgJson: @@ -1222,6 +1242,7 @@ func (cfg *CGRConfig) getLoadFunctions() map[string]func(*CgrJsonCfg) error { CgrLoaderCfgJson: cfg.loadLoaderCgrCfg, CgrMigratorCfgJson: cfg.loadMigratorCgrCfg, DispatcherSJson: cfg.loadDispatcherSCfg, + DispatcherHJson: cfg.loadDispatcherHCfg, AnalyzerCfgJson: cfg.loadAnalyzerCgrCfg, ApierS: cfg.loadApierCfg, RPCConnsJsonName: cfg.loadRPCConns, @@ -1552,6 +1573,7 @@ func (cfg *CGRConfig) AsMapInterface(separator string) map[string]interface{} { utils.RouteSCfg: cfg.routeSCfg.AsMapInterface(), utils.SureTaxCfg: cfg.sureTaxCfg.AsMapInterface(separator), utils.DispatcherSCfg: cfg.dispatcherSCfg.AsMapInterface(), + utils.DispatcherHCfg: cfg.dispatcherHCfg.AsMapInterface(), utils.LoaderCgrCfg: cfg.loaderCgrCfg.AsMapInterface(), utils.MigratorCgrCfg: cfg.migratorCgrCfg.AsMapInterface(), utils.MailerCfg: cfg.mailerCfg.AsMapInterface(), diff --git a/config/config_defaults.go b/config/config_defaults.go index 992c348ff..951d469d3 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -171,13 +171,14 @@ const CGRATES_CFG_JSON = ` }, -"http": { // HTTP server configuration - "json_rpc_url": "/jsonrpc", // JSON RPC relative URL ("" to disable) - "ws_url": "/ws", // WebSockets relative URL ("" to disable) - "freeswitch_cdrs_url": "/freeswitch_json", // Freeswitch CDRS relative URL ("" to disable) - "http_cdrs": "/cdr_http", // CDRS relative URL ("" to disable) - "use_basic_auth": false, // use basic authentication - "auth_users": {}, // basic authentication usernames and base64-encoded passwords (eg: { "username1": "cGFzc3dvcmQ=", "username2": "cGFzc3dvcmQy "}) +"http": { // HTTP server configuration + "json_rpc_url": "/jsonrpc", // JSON RPC relative URL ("" to disable) + "dispatchers_registrar_url": "/dispatchers_registrar", // dispatcherH registrar service relative URL + "ws_url": "/ws", // WebSockets relative URL ("" to disable) + "freeswitch_cdrs_url": "/freeswitch_json", // Freeswitch CDRS relative URL ("" to disable) + "http_cdrs": "/cdr_http", // CDRS relative URL ("" to disable) + "use_basic_auth": false, // use basic authentication + "auth_users": {}, // basic authentication usernames and base64-encoded passwords (eg: { "username1": "cGFzc3dvcmQ=", "username2": "cGFzc3dvcmQy "}) }, @@ -931,6 +932,15 @@ const CGRATES_CFG_JSON = ` }, +"dispatcherh":{ + "enabled": false, + "dispatchers_conns": [], + "host_ids": [], + "register_interval": "5m", + "register_transport": "*json", +}, + + "analyzers":{ // AnalyzerS config "enabled":false // starts AnalyzerS service: . }, diff --git a/config/config_json.go b/config/config_json.go index 9341d7489..d42e93452 100644 --- a/config/config_json.go +++ b/config/config_json.go @@ -49,6 +49,7 @@ const ( MAILER_JSN = "mailer" SURETAX_JSON = "suretax" DispatcherSJson = "dispatchers" + DispatcherHJson = "dispatcherh" CgrLoaderCfgJson = "loader" CgrMigratorCfgJson = "migrator" ChargerSCfgJson = "chargers" @@ -435,6 +436,18 @@ func (self CgrJsonCfg) DispatcherSJsonCfg() (*DispatcherSJsonCfg, error) { return cfg, nil } +func (self CgrJsonCfg) DispatcherHJsonCfg() (*DispatcherHJsonCfg, error) { + rawCfg, hasKey := self[DispatcherHJson] + if !hasKey { + return nil, nil + } + cfg := new(DispatcherHJsonCfg) + if err := json.Unmarshal(*rawCfg, cfg); err != nil { + return nil, err + } + return cfg, nil +} + func (self CgrJsonCfg) LoaderCfgJson() (*LoaderCfgJson, error) { rawCfg, hasKey := self[CgrLoaderCfgJson] if !hasKey { diff --git a/config/config_json_test.go b/config/config_json_test.go index 3c85f0c54..36c3fd93e 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -1690,12 +1690,13 @@ func TestDfSureTaxJsonCfg(t *testing.T) { func TestDfHttpJsonCfg(t *testing.T) { eCfg := &HTTPJsonCfg{ - Json_rpc_url: utils.StringPointer("/jsonrpc"), - Ws_url: utils.StringPointer("/ws"), - Freeswitch_cdrs_url: utils.StringPointer("/freeswitch_json"), - Http_Cdrs: utils.StringPointer("/cdr_http"), - Use_basic_auth: utils.BoolPointer(false), - Auth_users: utils.MapStringStringPointer(map[string]string{}), + Json_rpc_url: utils.StringPointer("/jsonrpc"), + Dispatchers_registrar_url: utils.StringPointer("/dispatchers_registrar"), + Ws_url: utils.StringPointer("/ws"), + Freeswitch_cdrs_url: utils.StringPointer("/freeswitch_json"), + Http_Cdrs: utils.StringPointer("/cdr_http"), + Use_basic_auth: utils.BoolPointer(false), + Auth_users: utils.MapStringStringPointer(map[string]string{}), } if cfg, err := dfCgrJSONCfg.HttpJsonCfg(); err != nil { t.Error(err) diff --git a/config/dispatcherhcfg.go b/config/dispatcherhcfg.go new file mode 100755 index 000000000..fb955bf78 --- /dev/null +++ b/config/dispatcherhcfg.go @@ -0,0 +1,71 @@ +/* +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 +*/ + +package config + +import ( + "time" + + "github.com/cgrates/cgrates/utils" +) + +// DispatcherHCfg is the configuration of dispatcher hosts +type DispatcherHCfg struct { + Enabled bool + DispatchersConns []string + HostIDs []string + RegisterInterval time.Duration + RegisterTransport string +} + +func (dps *DispatcherHCfg) loadFromJsonCfg(jsnCfg *DispatcherHJsonCfg) (err error) { + if jsnCfg == nil { + return nil + } + if jsnCfg.Enabled != nil { + dps.Enabled = *jsnCfg.Enabled + } + if jsnCfg.Dispatchers_conns != nil { + dps.DispatchersConns = make([]string, len(*jsnCfg.Dispatchers_conns)) + copy(dps.DispatchersConns, *jsnCfg.Dispatchers_conns) + } + if jsnCfg.Host_ids != nil { + dps.HostIDs = make([]string, len(*jsnCfg.Host_ids)) + copy(dps.HostIDs, *jsnCfg.Host_ids) + } + if jsnCfg.Register_interval != nil { + if dps.RegisterInterval, err = utils.ParseDurationWithNanosecs(*jsnCfg.Register_interval); err != nil { + return + } + } + if jsnCfg.Register_transport != nil { + dps.RegisterTransport = *jsnCfg.Register_transport + } + return +} + +func (dps *DispatcherHCfg) AsMapInterface() map[string]interface{} { + return map[string]interface{}{ + utils.EnabledCfg: dps.Enabled, + utils.DispatchersConnsCfg: dps.DispatchersConns, + utils.HostIdsCfg: dps.HostIDs, + utils.RegisterIntervalCfg: dps.RegisterInterval, + utils.RegisterTransportCfg: dps.RegisterTransport, + } + +} diff --git a/config/dispatcherhcfg_test.go b/config/dispatcherhcfg_test.go new file mode 100644 index 000000000..c0484206c --- /dev/null +++ b/config/dispatcherhcfg_test.go @@ -0,0 +1,105 @@ +/* +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 +*/ + +package config + +import ( + "reflect" + "testing" + "time" + + "github.com/cgrates/cgrates/utils" +) + +func TestDispatcherHCfgloadFromJsonCfg(t *testing.T) { + var daCfg, expected DispatcherHCfg + if err := daCfg.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(daCfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, daCfg) + } + if err := daCfg.loadFromJsonCfg(new(DispatcherHJsonCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(daCfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, daCfg) + } + cfgJSONStr := `{ + "dispatcherh":{ + "enabled": true, + "dispatchers_conns": ["conn1","conn2"], + "host_ids": ["HOST1","HOST2"], + "register_interval": "5m", + "register_transport": "*json", + }, +}` + expected = DispatcherHCfg{ + Enabled: true, + DispatchersConns: []string{"conn1", "conn2"}, + HostIDs: []string{"HOST1", "HOST2"}, + RegisterInterval: 5 * time.Minute, + RegisterTransport: utils.MetaJSON, + } + if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDaCfg, err := jsnCfg.DispatcherHJsonCfg(); err != nil { + t.Error(err) + } else if err = daCfg.loadFromJsonCfg(jsnDaCfg); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(expected, daCfg) { + t.Errorf("Expected: %+v,\nRecived: %+v", utils.ToJSON(expected), utils.ToJSON(daCfg)) + } +} + +func TestDispatcherHCfgAsMapInterface(t *testing.T) { + var daCfg, expected DispatcherHCfg + if err := daCfg.loadFromJsonCfg(nil); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(daCfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, daCfg) + } + if err := daCfg.loadFromJsonCfg(new(DispatcherHJsonCfg)); err != nil { + t.Error(err) + } else if !reflect.DeepEqual(daCfg, expected) { + t.Errorf("Expected: %+v ,recived: %+v", expected, daCfg) + } + cfgJSONStr := `{ + "dispatcherh":{ + "enabled": true, + "dispatchers_conns": ["conn1","conn2"], + "host_ids": ["HOST1","HOST2"], + "register_interval": "5m", + "register_transport": "*json", + }, +}` + eMap := map[string]interface{}{ + "enabled": true, + "dispatchers_conns": []string{"conn1", "conn2"}, + "host_ids": []string{"HOST1", "HOST2"}, + "register_interval": 5 * time.Minute, + "register_transport": "*json", + } + if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { + t.Error(err) + } else if jsnDaCfg, err := jsnCfg.DispatcherHJsonCfg(); err != nil { + t.Error(err) + } else if err = daCfg.loadFromJsonCfg(jsnDaCfg); err != nil { + t.Error(err) + } else if rcv := daCfg.AsMapInterface(); !reflect.DeepEqual(eMap, rcv) { + t.Errorf("\nExpected: %+v\nRecived: %+v", utils.ToJSON(eMap), utils.ToJSON(rcv)) + } +} diff --git a/config/dispatchercfg.go b/config/dispatcherscfg.go similarity index 100% rename from config/dispatchercfg.go rename to config/dispatcherscfg.go diff --git a/config/dispatchercfg_test.go b/config/dispatcherscfg_test.go similarity index 100% rename from config/dispatchercfg_test.go rename to config/dispatcherscfg_test.go diff --git a/config/httpcfg.go b/config/httpcfg.go index d1e1ff9d3..420dd0ba0 100644 --- a/config/httpcfg.go +++ b/config/httpcfg.go @@ -22,12 +22,13 @@ import "github.com/cgrates/cgrates/utils" // HTTP config section type HTTPCfg struct { - HTTPJsonRPCURL string // JSON RPC relative URL ("" to disable) - HTTPWSURL string // WebSocket relative URL ("" to disable) - HTTPFreeswitchCDRsURL string // Freeswitch CDRS relative URL ("" to disable) - HTTPCDRsURL string // CDRS relative URL ("" to disable) - HTTPUseBasicAuth bool // Use basic auth for HTTP API - HTTPAuthUsers map[string]string // Basic auth user:password map (base64 passwords) + HTTPJsonRPCURL string // JSON RPC relative URL ("" to disable) + DispatchersRegistrarURL string // dispatcherH registrar service relative URL + HTTPWSURL string // WebSocket relative URL ("" to disable) + HTTPFreeswitchCDRsURL string // Freeswitch CDRS relative URL ("" to disable) + HTTPCDRsURL string // CDRS relative URL ("" to disable) + HTTPUseBasicAuth bool // Use basic auth for HTTP API + HTTPAuthUsers map[string]string // Basic auth user:password map (base64 passwords) } //loadFromJsonCfg loads Database config from JsonCfg @@ -38,6 +39,9 @@ func (httpcfg *HTTPCfg) loadFromJsonCfg(jsnHttpCfg *HTTPJsonCfg) (err error) { if jsnHttpCfg.Json_rpc_url != nil { httpcfg.HTTPJsonRPCURL = *jsnHttpCfg.Json_rpc_url } + if jsnHttpCfg.Dispatchers_registrar_url != nil { + httpcfg.DispatchersRegistrarURL = *jsnHttpCfg.Dispatchers_registrar_url + } if jsnHttpCfg.Ws_url != nil { httpcfg.HTTPWSURL = *jsnHttpCfg.Ws_url } @@ -64,11 +68,12 @@ func (httpcfg *HTTPCfg) AsMapInterface() map[string]interface{} { } return map[string]interface{}{ - utils.HTTPJsonRPCURLCfg: httpcfg.HTTPJsonRPCURL, - utils.HTTPWSURLCfg: httpcfg.HTTPWSURL, - utils.HTTPFreeswitchCDRsURLCfg: httpcfg.HTTPFreeswitchCDRsURL, - utils.HTTPCDRsURLCfg: httpcfg.HTTPCDRsURL, - utils.HTTPUseBasicAuthCfg: httpcfg.HTTPUseBasicAuth, - utils.HTTPAuthUsersCfg: httpUsers, + utils.HTTPJsonRPCURLCfg: httpcfg.HTTPJsonRPCURL, + utils.DispatchersRegistrarURLCfg: httpcfg.DispatchersRegistrarURL, + utils.HTTPWSURLCfg: httpcfg.HTTPWSURL, + utils.HTTPFreeswitchCDRsURLCfg: httpcfg.HTTPFreeswitchCDRsURL, + utils.HTTPCDRsURLCfg: httpcfg.HTTPCDRsURL, + utils.HTTPUseBasicAuthCfg: httpcfg.HTTPUseBasicAuth, + utils.HTTPAuthUsersCfg: httpUsers, } } diff --git a/config/httpcfg_test.go b/config/httpcfg_test.go index 071c38c3d..5bcc4d882 100644 --- a/config/httpcfg_test.go +++ b/config/httpcfg_test.go @@ -70,6 +70,7 @@ func TestHTTPCfgAsMapInterface(t *testing.T) { cfgJSONStr := `{ "http": { "json_rpc_url": "/jsonrpc", + "dispatchers_registrar_url": "/dispatchers_registrar", "ws_url": "/ws", "freeswitch_cdrs_url": "/freeswitch_json", "http_cdrs": "/cdr_http", @@ -79,12 +80,13 @@ func TestHTTPCfgAsMapInterface(t *testing.T) { }` eMap := map[string]interface{}{ - "json_rpc_url": "/jsonrpc", - "ws_url": "/ws", - "freeswitch_cdrs_url": "/freeswitch_json", - "http_cdrs": "/cdr_http", - "use_basic_auth": false, - "auth_users": map[string]interface{}{}, + "json_rpc_url": "/jsonrpc", + "dispatchers_registrar_url": "/dispatchers_registrar", + "ws_url": "/ws", + "freeswitch_cdrs_url": "/freeswitch_json", + "http_cdrs": "/cdr_http", + "use_basic_auth": false, + "auth_users": map[string]interface{}{}, } if jsnCfg, err := NewCgrJsonCfgFromBytes([]byte(cfgJSONStr)); err != nil { diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 3bb1d3887..de0055b8c 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -18,7 +18,9 @@ along with this program. If not, see package config -import "encoding/json" +import ( + "encoding/json" +) // General config section type GeneralJsonCfg struct { @@ -62,12 +64,13 @@ type ListenJsonCfg struct { // HTTP config section type HTTPJsonCfg struct { - Json_rpc_url *string - Ws_url *string - Freeswitch_cdrs_url *string - Http_Cdrs *string - Use_basic_auth *bool - Auth_users *map[string]string + Json_rpc_url *string + Dispatchers_registrar_url *string + Ws_url *string + Freeswitch_cdrs_url *string + Http_Cdrs *string + Use_basic_auth *bool + Auth_users *map[string]string } type TlsJsonCfg struct { @@ -539,6 +542,14 @@ type DispatcherSJsonCfg struct { Attributes_conns *[]string } +type DispatcherHJsonCfg struct { + Enabled *bool + Dispatchers_conns *[]string + Host_ids *[]string + Register_interval *string + Register_transport *string +} + type LoaderCfgJson struct { Tpid *string Data_path *string diff --git a/engine/dispatcherprfl_test.go b/engine/dispatcherprfl_test.go index bc383dce1..38772212e 100644 --- a/engine/dispatcherprfl_test.go +++ b/engine/dispatcherprfl_test.go @@ -277,8 +277,8 @@ func TestDispatcherHostIDsProfilesReorderFromIndex(t *testing.T) { } func TestDispatcherHostIDsProfilesShuffle(t *testing.T) { - dConns := DispatcherHostIDs{"DSP_1", "DSP_2", "DSP_3", "DSP_4"} - oConns := DispatcherHostIDs{"DSP_1", "DSP_2", "DSP_3", "DSP_4"} + dConns := DispatcherHostIDs{"DSP_1", "DSP_2", "DSP_3", "DSP_4", "DSP_5", "DSP_6", "DSP_7", "DSP_8"} + oConns := DispatcherHostIDs{"DSP_1", "DSP_2", "DSP_3", "DSP_4", "DSP_5", "DSP_6", "DSP_7", "DSP_8"} if dConns.Shuffle(); reflect.DeepEqual(dConns, oConns) { t.Errorf("received: %s", utils.ToJSON(dConns)) } diff --git a/utils/consts.go b/utils/consts.go index 475466126..014671bb2 100755 --- a/utils/consts.go +++ b/utils/consts.go @@ -1921,12 +1921,13 @@ const ( // HTTPCfg const ( - HTTPJsonRPCURLCfg = "json_rpc_url" - HTTPWSURLCfg = "ws_url" - HTTPFreeswitchCDRsURLCfg = "freeswitch_cdrs_url" - HTTPCDRsURLCfg = "http_cdrs" - HTTPUseBasicAuthCfg = "use_basic_auth" - HTTPAuthUsersCfg = "auth_users" + HTTPJsonRPCURLCfg = "json_rpc_url" + DispatchersRegistrarURLCfg = "dispatchers_registrar_url" + HTTPWSURLCfg = "ws_url" + HTTPFreeswitchCDRsURLCfg = "freeswitch_cdrs_url" + HTTPCDRsURLCfg = "http_cdrs" + HTTPUseBasicAuthCfg = "use_basic_auth" + HTTPAuthUsersCfg = "auth_users" ) // FilterSCfg @@ -2211,6 +2212,14 @@ const ( CacheDumpFieldsCfg = "cache_dump_fields" ) +// DispatcherHCfg +const ( + DispatchersConnsCfg = "dispatchers_conns" + HostIdsCfg = "host_ids" + RegisterIntervalCfg = "register_interval" + RegisterTransportCfg = "register_transport" +) + // CGRConfig const ( LoaderCfg = "loaders" // from JSON @@ -2241,6 +2250,7 @@ const ( RouteSCfg = "routes" // from JSON SureTaxCfg = "suretax" // from JSON DispatcherSCfg = "dispatchers" // from JSON + DispatcherHCfg = "dispatcherh" // from JSON LoaderCgrCfg = "loader" // from JSON MigratorCgrCfg = "migrator" // from JSON MailerCfg = "mailer" // from JSON