diff --git a/apier/v1/accounts.go b/apier/v1/accounts.go
index fe9079c82..b571dad59 100644
--- a/apier/v1/accounts.go
+++ b/apier/v1/accounts.go
@@ -155,7 +155,7 @@ func (self *ApierV1) RemoveActionTiming(attrs AttrRemoveActionTiming, reply *str
return utils.NewErrServerError(err)
}
if attrs.ReloadScheduler {
- sched := self.ServManager.GetScheduler()
+ sched := self.Scheduler.GetScheduler()
if sched == nil {
return errors.New(utils.SchedulerNotRunningCaps)
}
@@ -277,7 +277,7 @@ func (self *ApierV1) SetAccount(attr utils.AttrSetAccount, reply *string) (err e
return utils.NewErrServerError(err)
}
if attr.ReloadScheduler && len(dirtyActionPlans) != 0 {
- sched := self.ServManager.GetScheduler()
+ sched := self.Scheduler.GetScheduler()
if sched == nil {
return errors.New(utils.SchedulerNotRunningCaps)
}
diff --git a/apier/v1/apier.go b/apier/v1/apier.go
index b65995882..99ff2381b 100644
--- a/apier/v1/apier.go
+++ b/apier/v1/apier.go
@@ -31,11 +31,16 @@ import (
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/guardian"
- "github.com/cgrates/cgrates/servmanager"
+ "github.com/cgrates/cgrates/scheduler"
"github.com/cgrates/cgrates/utils"
"github.com/cgrates/rpcclient"
)
+// SchedulerGeter used to avoid ciclic dependency
+type SchedulerGeter interface {
+ GetScheduler() *scheduler.Scheduler
+}
+
type ApierV1 struct {
StorDb engine.LoadStorage
DataManager *engine.DataManager
@@ -43,12 +48,13 @@ type ApierV1 struct {
Config *config.CGRConfig
Responder *engine.Responder
CDRs rpcclient.RpcClientConnection // FixMe: populate it from cgr-engine
- ServManager *servmanager.ServiceManager // Need to have them capitalize so we can export in V2
- HTTPPoster *engine.HTTPPoster
- FilterS *engine.FilterS //Used for CDR Exporter
- CacheS rpcclient.RpcClientConnection
- SchedulerS rpcclient.RpcClientConnection
- AttributeS rpcclient.RpcClientConnection
+ Scheduler SchedulerGeter
+ // ServManager *servmanager.ServiceManager // Need to have them capitalize so we can export in V2
+ HTTPPoster *engine.HTTPPoster
+ FilterS *engine.FilterS //Used for CDR Exporter
+ CacheS rpcclient.RpcClientConnection
+ SchedulerS rpcclient.RpcClientConnection
+ AttributeS rpcclient.RpcClientConnection
}
// Call implements rpcclient.RpcClientConnection interface for internal RPC
@@ -659,7 +665,7 @@ func (self *ApierV1) SetActionPlan(attrs AttrSetActionPlan, reply *string) (err
return err
}
if attrs.ReloadScheduler {
- sched := self.ServManager.GetScheduler()
+ sched := self.Scheduler.GetScheduler()
if sched == nil {
return errors.New(utils.SchedulerNotRunningCaps)
}
@@ -771,7 +777,7 @@ func (self *ApierV1) LoadAccountActions(attrs utils.TPAccountActions, reply *str
}
// ToDo: Get the action keys loaded by dbReader so we reload only these in cache
// Need to do it before scheduler otherwise actions to run will be unknown
- sched := self.ServManager.GetScheduler()
+ sched := self.Scheduler.GetScheduler()
if sched != nil {
sched.Reload()
}
diff --git a/apier/v1/scheduler.go b/apier/v1/scheduler.go
index 4c2731847..e1cb49f43 100644
--- a/apier/v1/scheduler.go
+++ b/apier/v1/scheduler.go
@@ -101,7 +101,7 @@ import (
*/
func (self *ApierV1) GetScheduledActions(args scheduler.ArgsGetScheduledActions, reply *[]*scheduler.ScheduledAction) error {
- sched := self.ServManager.GetScheduler()
+ sched := self.Scheduler.GetScheduler()
if sched == nil {
return errors.New(utils.SchedulerNotRunningCaps)
}
diff --git a/apier/v1/schedulers.go b/apier/v1/schedulers.go
index 88e92f2c8..f31cf3b34 100644
--- a/apier/v1/schedulers.go
+++ b/apier/v1/schedulers.go
@@ -19,24 +19,28 @@ along with this program. If not, see
package v1
import (
- "github.com/cgrates/cgrates/servmanager"
+ "github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/utils"
)
-func NewSchedulerSv1(schdS *servmanager.SchedulerS) *SchedulerSv1 {
- return &SchedulerSv1{schdS: schdS}
+// NewSchedulerSv1 retuns the API for SchedulerS
+func NewSchedulerSv1(cgrcfg *config.CGRConfig) *SchedulerSv1 {
+ return &SchedulerSv1{cgrcfg: cgrcfg}
}
// SchedulerSv1 is the RPC object implementing scheduler APIs
type SchedulerSv1 struct {
- schdS *servmanager.SchedulerS
+ cgrcfg *config.CGRConfig
}
// Reload reloads scheduler instructions
func (schdSv1 *SchedulerSv1) Reload(arg *utils.CGREventWithArgDispatcher, reply *string) error {
- return schdSv1.schdS.V1Reload(arg, reply)
+ schdSv1.cgrcfg.GetReloadChan(config.SCHEDULER_JSN) <- struct{}{}
+ *reply = utils.OK
+ return nil
}
+// Ping returns Pong
func (schdSv1 *SchedulerSv1) Ping(ign *utils.CGREventWithArgDispatcher, reply *string) error {
*reply = utils.Pong
return nil
diff --git a/apier/v2/accounts.go b/apier/v2/accounts.go
index 00987983f..67e91fb0c 100644
--- a/apier/v2/accounts.go
+++ b/apier/v2/accounts.go
@@ -237,7 +237,7 @@ func (self *ApierV2) SetAccount(attr AttrSetAccount, reply *string) error {
return utils.NewErrServerError(err)
}
if attr.ReloadScheduler && schedNeedsReload {
- sched := self.ServManager.GetScheduler()
+ sched := self.Scheduler.GetScheduler()
if sched == nil {
return errors.New(utils.SchedulerNotRunningCaps)
}
diff --git a/apier/v2/apier.go b/apier/v2/apier.go
index 623c3b408..b1755d538 100644
--- a/apier/v2/apier.go
+++ b/apier/v2/apier.go
@@ -85,7 +85,7 @@ func (self *ApierV2) LoadAccountActions(attrs AttrLoadAccountActions, reply *str
}, config.CgrConfig().GeneralCfg().LockingTimeout, attrs.AccountActionsId); err != nil {
return utils.NewErrServerError(err)
}
- sched := self.ServManager.GetScheduler()
+ sched := self.Scheduler.GetScheduler()
if sched != nil {
sched.Reload()
}
diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go
index 3c75a3ebd..a0b536c58 100644
--- a/cmd/cgr-engine/cgr-engine.go
+++ b/cmd/cgr-engine/cgr-engine.go
@@ -41,7 +41,6 @@ import (
"github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/ers"
"github.com/cgrates/cgrates/loaders"
- "github.com/cgrates/cgrates/scheduler"
"github.com/cgrates/cgrates/services"
"github.com/cgrates/cgrates/servmanager"
"github.com/cgrates/cgrates/sessions"
@@ -786,18 +785,6 @@ func startCDRS(internalCdrSChan, internalRaterChan, internalAttributeSChan, inte
internalCdrSChan <- cdrServer // Signal that cdrS is operational
}
-func startScheduler(internalSchedulerChan chan *scheduler.Scheduler, cacheDoneChan chan struct{}, dm *engine.DataManager, exitChan chan bool) {
- // Wait for cache to load data before starting
- cacheDone := <-cacheDoneChan
- cacheDoneChan <- cacheDone
- utils.Logger.Info("Starting CGRateS Scheduler.")
- sched := scheduler.NewScheduler(dm)
- internalSchedulerChan <- sched
-
- sched.Loop()
- exitChan <- true // Should not get out of loop though
-}
-
// startFilterService fires up the FilterS
func startFilterService(filterSChan chan *engine.FilterS, cacheS *engine.CacheS,
internalStatSChan, internalResourceSChan, internalRalSChan chan rpcclient.RpcClientConnection, cfg *config.CGRConfig,
@@ -978,15 +965,6 @@ func initCoreSv1(internalCoreSv1Chan chan rpcclient.RpcClientConnection, server
internalCoreSv1Chan <- cSv1
}
-func initSchedulerS(internalSchedSChan chan rpcclient.RpcClientConnection,
- srvMngr *servmanager.ServiceManager, server *utils.Server) {
- schdS := servmanager.NewSchedulerS(srvMngr)
- if !cfg.DispatcherSCfg().Enabled {
- server.RpcRegister(v1.NewSchedulerSv1(schdS))
- }
- internalSchedSChan <- schdS
-}
-
func initServiceManagerV1(internalServiceManagerChan chan rpcclient.RpcClientConnection,
srvMngr *servmanager.ServiceManager, server *utils.Server) {
if !cfg.DispatcherSCfg().Enabled {
@@ -1385,13 +1363,15 @@ func main() {
stS := services.NewStatService()
reS := services.NewResourceService()
supS := services.NewSupplierService()
- srvManager.AddService(attrS, chrS, tS, stS, reS, supS)
+ schS := services.NewSchedulerService()
+ srvManager.AddService(attrS, chrS, tS, stS, reS, supS, schS)
internalAttributeSChan = attrS.GetIntenternalChan()
internalChargerSChan = chrS.GetIntenternalChan()
internalThresholdSChan = tS.GetIntenternalChan()
internalStatSChan = stS.GetIntenternalChan()
internalRsChan = reS.GetIntenternalChan()
internalSupplierSChan = supS.GetIntenternalChan()
+ internalSchedSChan = schS.GetIntenternalChan()
go srvManager.StartServices()
initServiceManagerV1(internalServeManagerChan, srvManager, server)
@@ -1422,22 +1402,14 @@ func main() {
engine.IntRPC.AddInternalRPCClient(utils.RALsV1, internalRALsv1Chan)
}
- // init SchedulerS
- initSchedulerS(internalSchedSChan, srvManager, server)
-
initConfigSv1(internalConfigChan, server)
- // Start Scheduler
- if cfg.SchedulerCfg().Enabled {
- go srvManager.StartScheduler(true)
- }
-
// Start RALs
if cfg.RalsCfg().Enabled {
go startRater(internalRaterChan, internalApierV1Chan, internalApierV2Chan,
internalThresholdSChan, internalStatSChan, internalCacheSChan, internalSchedSChan,
internalAttributeSChan, internalDispatcherSChan, internalRALsv1Chan,
- srvManager, server, dm, loadDb, cdrDb, cacheS, filterSChan, exitChan)
+ /*srvManager*/ schS, server, dm, loadDb, cdrDb, cacheS, filterSChan, exitChan)
}
// Start CDR Server
diff --git a/cmd/cgr-engine/rater.go b/cmd/cgr-engine/rater.go
index 082947e9f..1aa28cd2a 100755
--- a/cmd/cgr-engine/rater.go
+++ b/cmd/cgr-engine/rater.go
@@ -25,7 +25,7 @@ import (
v1 "github.com/cgrates/cgrates/apier/v1"
v2 "github.com/cgrates/cgrates/apier/v2"
"github.com/cgrates/cgrates/engine"
- "github.com/cgrates/cgrates/servmanager"
+ "github.com/cgrates/cgrates/services"
"github.com/cgrates/cgrates/utils"
"github.com/cgrates/rpcclient"
)
@@ -34,7 +34,7 @@ import (
func startRater(internalRaterChan, internalApierv1, internalApierv2, internalThdSChan,
internalStatSChan, internalCacheSChan, internalSchedulerSChan, internalAttributeSChan,
internalDispatcherSChan, internalRALsChan chan rpcclient.RpcClientConnection,
- serviceManager *servmanager.ServiceManager, server *utils.Server,
+ /*serviceManager *servmanager.ServiceManager*/ schS *services.SchedulerService, server *utils.Server,
dm *engine.DataManager, loadDb engine.LoadStorage, cdrDb engine.CdrStorage,
chS *engine.CacheS, // separate from channel for optimization
filterSChan chan *engine.FilterS, exitChan chan bool) {
@@ -158,7 +158,7 @@ func startRater(internalRaterChan, internalApierv1, internalApierv2, internalThd
//create scheduler connection
var attributeSrpc rpcclient.RpcClientConnection
- if len(cfg.ApierCfg().SchedulerConns) != 0 {
+ if len(cfg.ApierCfg().AttributeSConns) != 0 {
attributeSTaskChan := make(chan struct{})
waitTasks = append(waitTasks, attributeSTaskChan)
go func() {
@@ -205,7 +205,8 @@ func startRater(internalRaterChan, internalApierv1, internalApierv2, internalThd
CdrDb: cdrDb,
Config: cfg,
Responder: responder,
- ServManager: serviceManager,
+ // ServManager: serviceManager,
+ Scheduler: schS,
HTTPPoster: engine.NewHTTPPoster(cfg.GeneralCfg().HttpSkipTlsVerify,
cfg.GeneralCfg().ReplyTimeout),
FilterS: filterS,
diff --git a/config/config.go b/config/config.go
index 164fae6c2..e174b1aac 100755
--- a/config/config.go
+++ b/config/config.go
@@ -1227,7 +1227,10 @@ func (cfg *CGRConfig) MigratorCgrCfg() *MigratorCgrCfg {
return cfg.migratorCgrCfg
}
+// SchedulerCfg returns the config for Scheduler
func (cfg *CGRConfig) SchedulerCfg() *SchedulerCfg {
+ cfg.lks[SCHEDULER_JSN].Lock()
+ defer cfg.lks[SCHEDULER_JSN].Unlock()
return cfg.schedulerCfg
}
@@ -1472,6 +1475,7 @@ func (cfg *CGRConfig) reloadSection(section string) (err error) {
}
fallthrough
case SCHEDULER_JSN:
+ cfg.rldChans[SCHEDULER_JSN] <- struct{}{}
if !fall {
break
}
@@ -1481,7 +1485,7 @@ func (cfg *CGRConfig) reloadSection(section string) (err error) {
break
}
fallthrough
- case FILTERS_JSON:
+ case FILTERS_JSON: // no need to reload
if !fall {
break
}
diff --git a/config/config_defaults.go b/config/config_defaults.go
index f5c072551..950a0f3d8 100755
--- a/config/config_defaults.go
+++ b/config/config_defaults.go
@@ -823,9 +823,7 @@ const CGRATES_CFG_JSON = `
"caches_conns":[ // connections to CacheS for reloads
{"address": "*internal"},
],
- "scheduler_conns": [ // connections to SchedulerS for reloads
- {"address": "*internal"}
- ],
+ "scheduler_conns": [], // connections to SchedulerS for reloads
"attributes_conns": [], // connections to AttributeS for CDRExporter
},
diff --git a/config/config_json_test.go b/config/config_json_test.go
index 23ad8d044..992dfbbce 100755
--- a/config/config_json_test.go
+++ b/config/config_json_test.go
@@ -1566,11 +1566,7 @@ func TestDfApierCfg(t *testing.T) {
Address: utils.StringPointer(utils.MetaInternal),
},
},
- Scheduler_conns: &[]*RemoteHostJson{
- {
- Address: utils.StringPointer(utils.MetaInternal),
- },
- },
+ Scheduler_conns: &[]*RemoteHostJson{},
Attributes_conns: &[]*RemoteHostJson{},
}
if cfg, err := dfCgrJsonCfg.ApierCfgJson(); err != nil {
diff --git a/config/config_test.go b/config/config_test.go
index 023b06377..dbe13cf9a 100755
--- a/config/config_test.go
+++ b/config/config_test.go
@@ -1767,11 +1767,7 @@ func TestCgrCfgJSONDefaultApierCfg(t *testing.T) {
Address: utils.MetaInternal,
},
},
- SchedulerConns: []*RemoteHost{
- {
- Address: utils.MetaInternal,
- },
- },
+ SchedulerConns: []*RemoteHost{},
AttributeSConns: []*RemoteHost{},
}
if !reflect.DeepEqual(cgrCfg.apier, aCfg) {
diff --git a/data/conf/cgrates/cgrates.json b/data/conf/cgrates/cgrates.json
index b059ddb7d..77ad138b0 100644
--- a/data/conf/cgrates/cgrates.json
+++ b/data/conf/cgrates/cgrates.json
@@ -76,7 +76,7 @@
// "client_key":"", // path to client key
// "ca_certificate":"", // path to CA certificate (populate for self-signed certificate otherwise let it empty)
// "server_policy":4, // server_policy determines the TLS Client Authentication (0-NoClientCert, 1-RequestClientCert, 2-RequireAnyClientCert, 3-VerifyClientCertIfGiven, 4-RequireAndVerifyClientCert)
-// "server_name":"",
+// "server_name":"",
// },
@@ -138,6 +138,7 @@
// "filters": { // Filters configuration (*new)
// "stats_conns": [], // connections to StatS for <*stats> filters, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
// "resources_conns": [], // connections to ResourceS for <*resources> filters, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
+// "rals_conns": [], // connections to RALs for <*accounts> filters, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
// },
@@ -171,7 +172,7 @@
// "session_cost_retries": 5, // number of queries to session_costs before recalculating CDR
// "chargers_conns": [ // connection to ChargerS for CDR forking, empty to disable billing for CDRs: <""|*internal|x.y.z.y:1234>
// {"address": "*internal"}
-// ],
+// ],
// "rals_conns": [ // connections to RALs for cost calculation: <""|*internal|x.y.z.y:1234>
// {"address": "*internal"}
// ],
@@ -272,6 +273,47 @@
// ],
+// "ers": { // EventReaderService
+// "enabled": false, // starts the EventReader service:
+// "sessions_conns": [ // connections to SessionS: <*internal|127.0.0.1:2012>
+// {"address": "*internal"}
+// ],
+// "readers": [
+// {
+// "id": "*default", // identifier of the EventReader profile
+// "type": "*file_csv", // reader type <*file_csv>
+// "field_separator": ",", // separator used in case of csv files
+// "run_delay": 0, // sleep interval in seconds between consecutive runs, -1 to use automation via inotify or 0 to disable running all together
+// "concurrent_requests": 1024, // maximum simultaneous requests/files to process, 0 for unlimited
+// "source_path": "/var/spool/cgrates/cdrc/in", // read data from this path
+// "processed_path": "/var/spool/cgrates/cdrc/out", // move processed data here
+// "xml_root_path": "", // path towards one event in case of XML CDRs
+// "source_id": "ers_csv", // free form field, tag identifying the source of the CDRs within CDRS database
+// "tenant": "", // tenant used by import
+// "timezone": "", // timezone for timestamps where not specified <""|UTC|Local|$IANA_TZ_DB>
+// "filters": [], // limit parsing based on the filters
+// "flags": [], // flags to influence the event processing
+// "header_fields": [], // template of the import header fields
+// "content_fields":[ // import content_fields template, tag will match internally CDR field, in case of .csv value will be represented by index of the field value
+// {"tag": "TOR", "field_id": "ToR", "type": "*composed", "value": "~*req.2", "mandatory": true},
+// {"tag": "OriginID", "field_id": "OriginID", "type": "*composed", "value": "~*req.3", "mandatory": true},
+// {"tag": "RequestType", "field_id": "RequestType", "type": "*composed", "value": "~*req.4", "mandatory": true},
+// {"tag": "Tenant", "field_id": "Tenant", "type": "*composed", "value": "~*req.6", "mandatory": true},
+// {"tag": "Category", "field_id": "Category", "type": "*composed", "value": "~*req.7", "mandatory": true},
+// {"tag": "Account", "field_id": "Account", "type": "*composed", "value": "~*req.8", "mandatory": true},
+// {"tag": "Subject", "field_id": "Subject", "type": "*composed", "value": "~*req.9", "mandatory": true},
+// {"tag": "Destination", "field_id": "Destination", "type": "*composed", "value": "~*req.10", "mandatory": true},
+// {"tag": "SetupTime", "field_id": "SetupTime", "type": "*composed", "value": "~*req.11", "mandatory": true},
+// {"tag": "AnswerTime", "field_id": "AnswerTime", "type": "*composed", "value": "~*req.12", "mandatory": true},
+// {"tag": "Usage", "field_id": "Usage", "type": "*composed", "value": "~*req.13", "mandatory": true},
+// ],
+// "trailer_fields": [], // template of the import trailer fields
+// "continue": false, // continue to the next template if executed
+// },
+// ],
+// },
+
+
// "sessions": {
// "enabled": false, // starts the session service:
// "listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests
@@ -295,7 +337,7 @@
// "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
+// "terminate_attempts": 5 // attempts to get the session before terminating it
// },
@@ -355,50 +397,50 @@
// "origin_realm": "cgrates.org", // diameter Origin-Realm AVP used in replies
// "vendor_id": 0, // diameter Vendor-Id AVP used in replies
// "product_name": "CGRateS", // diameter Product-Name AVP used in replies
-// "max_active_requests": -1, // limit the number of active requests processed by the server <-1|0-n>
+// "concurrent_requests": -1, // limit the number of active requests processed by the server <-1|0-n>
// "synced_conn_requests": false, // process one request at the time per connection
// "asr_template": "", // enable AbortSession message being sent to client on DisconnectSession
// "templates":{ // default message templates
// "*err": [
-// {"tag": "SessionId", "field_id": "Session-Id", "type": "*composed",
+// {"tag": "SessionId", "field_id": "Session-Id", "type": "*composed",
// "value": "~*req.Session-Id", "mandatory": true},
-// {"tag": "OriginHost", "field_id": "Origin-Host", "type": "*composed",
+// {"tag": "OriginHost", "field_id": "Origin-Host", "type": "*composed",
// "value": "~*vars.OriginHost", "mandatory": true},
-// {"tag": "OriginRealm", "field_id": "Origin-Realm", "type": "*composed",
+// {"tag": "OriginRealm", "field_id": "Origin-Realm", "type": "*composed",
// "value": "~*vars.OriginRealm", "mandatory": true},
// ],
// "*cca": [
-// {"tag": "SessionId", "field_id": "Session-Id", "type": "*composed",
+// {"tag": "SessionId", "field_id": "Session-Id", "type": "*composed",
// "value": "~*req.Session-Id", "mandatory": true},
-// {"tag": "ResultCode", "field_id": "Result-Code", "type": "*constant",
+// {"tag": "ResultCode", "field_id": "Result-Code", "type": "*constant",
// "value": "2001"},
-// {"tag": "OriginHost", "field_id": "Origin-Host", "type": "*composed",
+// {"tag": "OriginHost", "field_id": "Origin-Host", "type": "*composed",
// "value": "~*vars.OriginHost", "mandatory": true},
-// {"tag": "OriginRealm", "field_id": "Origin-Realm", "type": "*composed",
+// {"tag": "OriginRealm", "field_id": "Origin-Realm", "type": "*composed",
// "value": "~*vars.OriginRealm", "mandatory": true},
// {"tag": "AuthApplicationId", "field_id": "Auth-Application-Id", "type": "*composed",
// "value": "~*vars.*appid", "mandatory": true},
-// {"tag": "CCRequestType", "field_id": "CC-Request-Type", "type": "*composed",
+// {"tag": "CCRequestType", "field_id": "CC-Request-Type", "type": "*composed",
// "value": "~*req.CC-Request-Type", "mandatory": true},
-// {"tag": "CCRequestNumber", "field_id": "CC-Request-Number", "type": "*composed",
+// {"tag": "CCRequestNumber", "field_id": "CC-Request-Number", "type": "*composed",
// "value": "~*req.CC-Request-Number", "mandatory": true},
// ],
// "*asr": [
-// {"tag": "SessionId", "field_id": "Session-Id", "type": "*variable",
+// {"tag": "SessionId", "field_id": "Session-Id", "type": "*variable",
// "value": "~*req.Session-Id", "mandatory": true},
-// {"tag": "OriginHost", "field_id": "Origin-Host", "type": "*variable",
+// {"tag": "OriginHost", "field_id": "Origin-Host", "type": "*variable",
// "value": "~*req.Destination-Host", "mandatory": true},
-// {"tag": "OriginRealm", "field_id": "Origin-Realm", "type": "*variable",
+// {"tag": "OriginRealm", "field_id": "Origin-Realm", "type": "*variable",
// "value": "~*req.Destination-Realm", "mandatory": true},
-// {"tag": "DestinationRealm", "field_id": "Destination-Realm", "type": "*variable",
+// {"tag": "DestinationRealm", "field_id": "Destination-Realm", "type": "*variable",
// "value": "~*req.Origin-Realm", "mandatory": true},
-// {"tag": "DestinationHost", "field_id": "Destination-Host", "type": "*variable",
+// {"tag": "DestinationHost", "field_id": "Destination-Host", "type": "*variable",
// "value": "~*req.Origin-Host", "mandatory": true},
// {"tag": "AuthApplicationId", "field_id": "Auth-Application-Id", "type": "*variable",
// "value": "~*vars.*appid", "mandatory": true},
-// {"tag": "UserName", "field_id": "User-Name", "type": "*variable",
+// {"tag": "UserName", "field_id": "User-Name", "type": "*variable",
// "value": "~*req.User-Name", "mandatory": true},
-// {"tag": "OriginStateID", "field_id": "Origin-State-Id", "type": "*constant",
+// {"tag": "OriginStateID", "field_id": "Origin-State-Id", "type": "*constant",
// "value": "1"},
// ]
// },
@@ -499,10 +541,11 @@
// "attributes_conns": [], // connections to AttributeS for altering events before supplier queries: <""|*internal|127.0.0.1:2013>
// "resources_conns": [], // connections to ResourceS for *res sorting, empty to disable functionality: <""|*internal|x.y.z.y:1234>
// "stats_conns": [], // connections to StatS for *stats sorting, empty to disable stats functionality: <""|*internal|x.y.z.y:1234>
+// "default_ratio":1 // default ratio used in case of *load strategy
// },
-// "loaders": [ // LoaderS config
+// "loaders": [ // LoaderS config
// {
// "id": "*default", // identifier of the Loader
// "enabled": false, // starts as service: .
@@ -545,7 +588,7 @@
// {"tag": "FilterFieldValues", "field_id": "FilterFieldValues", "type": "*variable", "value": "~4"},
// {"tag": "ActivationInterval", "field_id": "ActivationInterval", "type": "*variable", "value": "~5"},
// ],
-// },
+// },
// {
// "type": "*resources", // data source type
// "file_name": "Resources.csv", // file name in the tp_in_dir
@@ -655,7 +698,7 @@
// },
// {
// "type": "*dispatcher_hosts", // data source type
-// "file_name": "DispatcherHosts.csv", // file name in the tp_in_dir
+// "file_name": "DispatcherHosts.csv", // file name in the tp_in_dir
// "fields": [
// {"tag": "Tenant", "field_id": "Tenant", "type": "*variable", "value": "~0", "mandatory": true},
// {"tag": "ID", "field_id": "ID", "type": "*variable", "value": "~1", "mandatory": true},
@@ -753,13 +796,11 @@
// },
-// "apier": {
+// "apier": {
// "caches_conns":[ // connections to CacheS for reloads
// {"address": "*internal"},
// ],
-// "scheduler_conns": [ // connections to SchedulerS for reloads
-// {"address": "*internal"}
-// ],
+// "scheduler_conns": [], // connections to SchedulerS for reloads
// "attributes_conns": [], // connections to AttributeS for CDRExporter
// },
diff --git a/data/conf/samples/acc_balance_keep/cgrates.json b/data/conf/samples/acc_balance_keep/cgrates.json
index a667a4864..bac65ab15 100644
--- a/data/conf/samples/acc_balance_keep/cgrates.json
+++ b/data/conf/samples/acc_balance_keep/cgrates.json
@@ -134,4 +134,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/actions/cgradmin.json b/data/conf/samples/actions/cgradmin.json
index 8674f50b0..b2c402a99 100644
--- a/data/conf/samples/actions/cgradmin.json
+++ b/data/conf/samples/actions/cgradmin.json
@@ -51,4 +51,10 @@
"store_interval": "1s",
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/apier/apier.json b/data/conf/samples/apier/apier.json
index 6d6c96f60..8a63f40eb 100644
--- a/data/conf/samples/apier/apier.json
+++ b/data/conf/samples/apier/apier.json
@@ -78,4 +78,10 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/cdrcflatstore/cgrates.json b/data/conf/samples/cdrcflatstore/cgrates.json
index 7f2a23e8c..dc0b66f0c 100644
--- a/data/conf/samples/cdrcflatstore/cgrates.json
+++ b/data/conf/samples/cdrcflatstore/cgrates.json
@@ -68,4 +68,10 @@
},
],
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/cdrcfwv/cgrates.json b/data/conf/samples/cdrcfwv/cgrates.json
index 8b6c49004..00285fe89 100644
--- a/data/conf/samples/cdrcfwv/cgrates.json
+++ b/data/conf/samples/cdrcfwv/cgrates.json
@@ -75,4 +75,10 @@
},
],
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/cdrcfwvwithfilter/cgrates.json b/data/conf/samples/cdrcfwvwithfilter/cgrates.json
index a7c3b4e74..c8afc93f0 100755
--- a/data/conf/samples/cdrcfwvwithfilter/cgrates.json
+++ b/data/conf/samples/cdrcfwvwithfilter/cgrates.json
@@ -119,4 +119,10 @@
},
],
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/cdrewithfilter/cgrates.json b/data/conf/samples/cdrewithfilter/cgrates.json
index 0f2f9fcf6..0db793550 100755
--- a/data/conf/samples/cdrewithfilter/cgrates.json
+++ b/data/conf/samples/cdrewithfilter/cgrates.json
@@ -137,4 +137,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/cdrsv2mongo/cgrates.json b/data/conf/samples/cdrsv2mongo/cgrates.json
index 31c2b485d..33e534f0f 100644
--- a/data/conf/samples/cdrsv2mongo/cgrates.json
+++ b/data/conf/samples/cdrsv2mongo/cgrates.json
@@ -68,4 +68,10 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json b/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json
index 333471b99..364a19179 100644
--- a/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json
+++ b/data/conf/samples/cdrsv2mysql/cdrsv2mysql.json
@@ -68,4 +68,10 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/cdrsv2psql/cdrsv2psql.json b/data/conf/samples/cdrsv2psql/cdrsv2psql.json
index 3188cd121..5f2d56480 100644
--- a/data/conf/samples/cdrsv2psql/cdrsv2psql.json
+++ b/data/conf/samples/cdrsv2psql/cdrsv2psql.json
@@ -68,4 +68,10 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/cgradmin/cgradmin.json b/data/conf/samples/cgradmin/cgradmin.json
index 593043c15..212c3d648 100644
--- a/data/conf/samples/cgradmin/cgradmin.json
+++ b/data/conf/samples/cgradmin/cgradmin.json
@@ -39,4 +39,10 @@
"enabled": true, // starts users service: .
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/cluelrn/cgrates.json b/data/conf/samples/cluelrn/cgrates.json
index 317767370..98295b407 100644
--- a/data/conf/samples/cluelrn/cgrates.json
+++ b/data/conf/samples/cluelrn/cgrates.json
@@ -57,4 +57,10 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/dbinternal/cgrates.json b/data/conf/samples/dbinternal/cgrates.json
index 783af92fb..fa0938a2a 100755
--- a/data/conf/samples/dbinternal/cgrates.json
+++ b/data/conf/samples/dbinternal/cgrates.json
@@ -86,4 +86,10 @@
"out_stordb_type": "internal",
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/diamagent/cgrates.json b/data/conf/samples/diamagent/cgrates.json
index b4b4716dc..88ba19213 100644
--- a/data/conf/samples/diamagent/cgrates.json
+++ b/data/conf/samples/diamagent/cgrates.json
@@ -71,4 +71,10 @@
"asr_template": "*asr",
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/diamagentmaxconn/cgrates.json b/data/conf/samples/diamagentmaxconn/cgrates.json
index b1d677c92..285c8879a 100755
--- a/data/conf/samples/diamagentmaxconn/cgrates.json
+++ b/data/conf/samples/diamagentmaxconn/cgrates.json
@@ -83,4 +83,10 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/diamsctpagent/cgrates.json b/data/conf/samples/diamsctpagent/cgrates.json
index 4a3ac47fb..36ee4182f 100755
--- a/data/conf/samples/diamsctpagent/cgrates.json
+++ b/data/conf/samples/diamsctpagent/cgrates.json
@@ -75,4 +75,10 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/dispatchers/all/cgrates.json b/data/conf/samples/dispatchers/all/cgrates.json
index ddc578545..613d531e3 100644
--- a/data/conf/samples/dispatchers/all/cgrates.json
+++ b/data/conf/samples/dispatchers/all/cgrates.json
@@ -93,7 +93,10 @@
"apier": {
"caches_conns":[ // connections to CacheS for reloads
{"address": "127.0.0.1:6012", "transport": "*json"},
- ],
+ ],
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
},
}
diff --git a/data/conf/samples/dispatchers/all2/cgrates.json b/data/conf/samples/dispatchers/all2/cgrates.json
index 07644a733..f8ec89882 100644
--- a/data/conf/samples/dispatchers/all2/cgrates.json
+++ b/data/conf/samples/dispatchers/all2/cgrates.json
@@ -93,7 +93,11 @@
"apier": {
"caches_conns":[ // connections to CacheS for reloads
{"address": "127.0.0.1:7012", "transport": "*json"},
- ],
+ ],
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
},
+
}
diff --git a/data/conf/samples/dispatchers/diamagent/cgrates.json b/data/conf/samples/dispatchers/diamagent/cgrates.json
index d685a7043..1d8ee4ae1 100644
--- a/data/conf/samples/dispatchers/diamagent/cgrates.json
+++ b/data/conf/samples/dispatchers/diamagent/cgrates.json
@@ -54,4 +54,9 @@
"asr_template": "*asr",
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
diff --git a/data/conf/samples/dispatchers/dispatchers/cgrates.json b/data/conf/samples/dispatchers/dispatchers/cgrates.json
index 45186d5b9..6169446f5 100755
--- a/data/conf/samples/dispatchers/dispatchers/cgrates.json
+++ b/data/conf/samples/dispatchers/dispatchers/cgrates.json
@@ -64,4 +64,9 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
\ No newline at end of file
diff --git a/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json b/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json
index ea4874c4a..c2c0d04a8 100644
--- a/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json
+++ b/data/conf/samples/dispatchers/dispatchers_mongo/cgrates.json
@@ -72,4 +72,9 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
\ No newline at end of file
diff --git a/data/conf/samples/dispatchers/dispatchers_no_attributes/cgrates.json b/data/conf/samples/dispatchers/dispatchers_no_attributes/cgrates.json
index 27f0f2181..fa27b5126 100755
--- a/data/conf/samples/dispatchers/dispatchers_no_attributes/cgrates.json
+++ b/data/conf/samples/dispatchers/dispatchers_no_attributes/cgrates.json
@@ -44,4 +44,9 @@
"enabled": true,
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
\ No newline at end of file
diff --git a/data/conf/samples/dispatchers/radagent/cgrates.json b/data/conf/samples/dispatchers/radagent/cgrates.json
index 7a7cda5e7..9c7587016 100644
--- a/data/conf/samples/dispatchers/radagent/cgrates.json
+++ b/data/conf/samples/dispatchers/radagent/cgrates.json
@@ -139,4 +139,9 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
diff --git a/data/conf/samples/dnsagent/cgrates.json b/data/conf/samples/dnsagent/cgrates.json
index 0db8fe045..9be97eb78 100644
--- a/data/conf/samples/dnsagent/cgrates.json
+++ b/data/conf/samples/dnsagent/cgrates.json
@@ -82,4 +82,9 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
\ No newline at end of file
diff --git a/data/conf/samples/ers/cgrates.json b/data/conf/samples/ers/cgrates.json
index ff581a0e9..35ac07e3f 100644
--- a/data/conf/samples/ers/cgrates.json
+++ b/data/conf/samples/ers/cgrates.json
@@ -213,4 +213,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/ers_example/cgrates.json b/data/conf/samples/ers_example/cgrates.json
index 6def9bb9a..dfc31e548 100644
--- a/data/conf/samples/ers_example/cgrates.json
+++ b/data/conf/samples/ers_example/cgrates.json
@@ -111,4 +111,9 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
diff --git a/data/conf/samples/ers_reload/disabled/cgrates.json b/data/conf/samples/ers_reload/disabled/cgrates.json
index a2368be8c..0f88e2596 100644
--- a/data/conf/samples/ers_reload/disabled/cgrates.json
+++ b/data/conf/samples/ers_reload/disabled/cgrates.json
@@ -80,4 +80,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/ers_reload/first_reload/cgrates.json b/data/conf/samples/ers_reload/first_reload/cgrates.json
index 6aa44f4b5..40d8e5849 100644
--- a/data/conf/samples/ers_reload/first_reload/cgrates.json
+++ b/data/conf/samples/ers_reload/first_reload/cgrates.json
@@ -124,4 +124,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/ers_reload/second_reload/cgrates.json b/data/conf/samples/ers_reload/second_reload/cgrates.json
index ff581a0e9..35ac07e3f 100644
--- a/data/conf/samples/ers_reload/second_reload/cgrates.json
+++ b/data/conf/samples/ers_reload/second_reload/cgrates.json
@@ -213,4 +213,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/filters/cgrates.json b/data/conf/samples/filters/cgrates.json
index e7acbcb79..a7df763df 100644
--- a/data/conf/samples/filters/cgrates.json
+++ b/data/conf/samples/filters/cgrates.json
@@ -75,7 +75,11 @@
"apier": {
"caches_conns":[ // connections to CacheS for reloads
{"address": "127.0.0.1:2012", "transport": "*json"},
- ],
+ ],
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
},
+
}
diff --git a/data/conf/samples/fscsv/cgrates.json b/data/conf/samples/fscsv/cgrates.json
index 317d21199..c1f433448 100644
--- a/data/conf/samples/fscsv/cgrates.json
+++ b/data/conf/samples/fscsv/cgrates.json
@@ -18,4 +18,10 @@
"enabled": true, // start the CDR Server service:
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/hapool/cgrrater1/cgr.json b/data/conf/samples/hapool/cgrrater1/cgr.json
index 883e43e94..eeaef7bdd 100644
--- a/data/conf/samples/hapool/cgrrater1/cgr.json
+++ b/data/conf/samples/hapool/cgrrater1/cgr.json
@@ -18,4 +18,10 @@
"indexes": ["SubscriberId"],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/hapool/cgrrater2/cgr.json b/data/conf/samples/hapool/cgrrater2/cgr.json
index 7f848d66a..7e01b98f1 100644
--- a/data/conf/samples/hapool/cgrrater2/cgr.json
+++ b/data/conf/samples/hapool/cgrrater2/cgr.json
@@ -19,4 +19,10 @@
"indexes": ["SubscriberId"],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/httpagent/cgrates.json b/data/conf/samples/httpagent/cgrates.json
index b24995005..e2a7ee27c 100644
--- a/data/conf/samples/httpagent/cgrates.json
+++ b/data/conf/samples/httpagent/cgrates.json
@@ -65,4 +65,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/httpagenttls/cgrates.json b/data/conf/samples/httpagenttls/cgrates.json
index 467c40387..46c265683 100755
--- a/data/conf/samples/httpagenttls/cgrates.json
+++ b/data/conf/samples/httpagenttls/cgrates.json
@@ -78,4 +78,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/loaders/tutmongo/cgrates.json b/data/conf/samples/loaders/tutmongo/cgrates.json
index fb5b2a6a2..6dfbdefa3 100644
--- a/data/conf/samples/loaders/tutmongo/cgrates.json
+++ b/data/conf/samples/loaders/tutmongo/cgrates.json
@@ -179,4 +179,9 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
diff --git a/data/conf/samples/loaders/tutmysql/cgrates.json b/data/conf/samples/loaders/tutmysql/cgrates.json
index 5bd21ea47..7a432da2e 100644
--- a/data/conf/samples/loaders/tutmysql/cgrates.json
+++ b/data/conf/samples/loaders/tutmysql/cgrates.json
@@ -185,4 +185,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/mongoatlas/cgrates.json b/data/conf/samples/mongoatlas/cgrates.json
index 0261fe015..f345b37f5 100755
--- a/data/conf/samples/mongoatlas/cgrates.json
+++ b/data/conf/samples/mongoatlas/cgrates.json
@@ -165,4 +165,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/mongoreplica/cgrates.json b/data/conf/samples/mongoreplica/cgrates.json
index 65ebe9793..5789a6ea5 100755
--- a/data/conf/samples/mongoreplica/cgrates.json
+++ b/data/conf/samples/mongoreplica/cgrates.json
@@ -120,4 +120,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/multiplecdrc/multiplecdrc_fwexport.json b/data/conf/samples/multiplecdrc/multiplecdrc_fwexport.json
index 18be6267d..3788dbf7e 100644
--- a/data/conf/samples/multiplecdrc/multiplecdrc_fwexport.json
+++ b/data/conf/samples/multiplecdrc/multiplecdrc_fwexport.json
@@ -128,4 +128,12 @@
}
},
+
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/osips_training/cgrates.json b/data/conf/samples/osips_training/cgrates.json
index 6364f2ab7..f211e6b57 100644
--- a/data/conf/samples/osips_training/cgrates.json
+++ b/data/conf/samples/osips_training/cgrates.json
@@ -27,4 +27,12 @@
"enabled": true, // start the CDR Server service:
},
+
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/precache/tutmongo/cgrates.json b/data/conf/samples/precache/tutmongo/cgrates.json
index 0d90b55ce..8c6fcb2b4 100644
--- a/data/conf/samples/precache/tutmongo/cgrates.json
+++ b/data/conf/samples/precache/tutmongo/cgrates.json
@@ -81,4 +81,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/precache/tutmysql/cgrates.json b/data/conf/samples/precache/tutmysql/cgrates.json
index 9f7de4283..a6ee35a4a 100644
--- a/data/conf/samples/precache/tutmysql/cgrates.json
+++ b/data/conf/samples/precache/tutmysql/cgrates.json
@@ -72,4 +72,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/radagent/cgrates.json b/data/conf/samples/radagent/cgrates.json
index f3808fd29..167f89b7d 100644
--- a/data/conf/samples/radagent/cgrates.json
+++ b/data/conf/samples/radagent/cgrates.json
@@ -163,10 +163,17 @@
{"tag": "RemoteAddr" , "field_id": "RemoteAddr", "type": "*remote_host"},
],
"reply_fields":[],
- },
-
+ },
],
-
},
+
+
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/rpccaching/cgrates.json b/data/conf/samples/rpccaching/cgrates.json
index 381dc3500..d8cc34075 100644
--- a/data/conf/samples/rpccaching/cgrates.json
+++ b/data/conf/samples/rpccaching/cgrates.json
@@ -72,4 +72,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
\ No newline at end of file
diff --git a/data/conf/samples/sessions/cgrates.json b/data/conf/samples/sessions/cgrates.json
index 6fa064345..0faba60c7 100644
--- a/data/conf/samples/sessions/cgrates.json
+++ b/data/conf/samples/sessions/cgrates.json
@@ -107,4 +107,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/smg/cgrates.json b/data/conf/samples/smg/cgrates.json
index e2cb1ccbf..4617807d7 100644
--- a/data/conf/samples/smg/cgrates.json
+++ b/data/conf/samples/smg/cgrates.json
@@ -69,4 +69,12 @@
],
},
+
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/smg_automatic_debits/cgrates.json b/data/conf/samples/smg_automatic_debits/cgrates.json
index 004e30981..48a335635 100644
--- a/data/conf/samples/smg_automatic_debits/cgrates.json
+++ b/data/conf/samples/smg_automatic_debits/cgrates.json
@@ -48,4 +48,12 @@
],
},
+
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/smgeneric/cgrates.json b/data/conf/samples/smgeneric/cgrates.json
index 8186f6b74..c70011763 100644
--- a/data/conf/samples/smgeneric/cgrates.json
+++ b/data/conf/samples/smgeneric/cgrates.json
@@ -67,7 +67,10 @@
"apier": {
"caches_conns":[ // connections to CacheS for reloads
{"address": "127.0.0.1:3012", "transport": "*json"},
- ],
+ ],
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
},
diff --git a/data/conf/samples/smgreplcmaster/cgrates.json b/data/conf/samples/smgreplcmaster/cgrates.json
index 7b6c81a29..1e023e1b6 100644
--- a/data/conf/samples/smgreplcmaster/cgrates.json
+++ b/data/conf/samples/smgreplcmaster/cgrates.json
@@ -56,4 +56,10 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/smgreplcslave/cgrates.json b/data/conf/samples/smgreplcslave/cgrates.json
index 54579bf1f..192168c71 100644
--- a/data/conf/samples/smgreplcslave/cgrates.json
+++ b/data/conf/samples/smgreplcslave/cgrates.json
@@ -57,4 +57,10 @@
],
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
}
diff --git a/data/conf/samples/tutmongo/cgrates.json b/data/conf/samples/tutmongo/cgrates.json
index 491f0376b..4548b093d 100644
--- a/data/conf/samples/tutmongo/cgrates.json
+++ b/data/conf/samples/tutmongo/cgrates.json
@@ -144,4 +144,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/tutmongo2/cgrates.json b/data/conf/samples/tutmongo2/cgrates.json
index 01188ca52..172103467 100644
--- a/data/conf/samples/tutmongo2/cgrates.json
+++ b/data/conf/samples/tutmongo2/cgrates.json
@@ -172,4 +172,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/tutmongonew/cgrates.json b/data/conf/samples/tutmongonew/cgrates.json
index a2b079dcd..92fbda60d 100644
--- a/data/conf/samples/tutmongonew/cgrates.json
+++ b/data/conf/samples/tutmongonew/cgrates.json
@@ -139,4 +139,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/tutmysql/cgrates.json b/data/conf/samples/tutmysql/cgrates.json
index d6acd82f0..7095eac89 100644
--- a/data/conf/samples/tutmysql/cgrates.json
+++ b/data/conf/samples/tutmysql/cgrates.json
@@ -147,4 +147,10 @@
},
+
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
diff --git a/data/conf/samples/tutmysql2/cgrates.json b/data/conf/samples/tutmysql2/cgrates.json
index 6cfe84a59..2e683020c 100644
--- a/data/conf/samples/tutmysql2/cgrates.json
+++ b/data/conf/samples/tutmysql2/cgrates.json
@@ -137,4 +137,10 @@
},
+
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
diff --git a/data/conf/samples/tutmysql_internal/cgrates.json b/data/conf/samples/tutmysql_internal/cgrates.json
index 2c12c8f3b..96711acfc 100644
--- a/data/conf/samples/tutmysql_internal/cgrates.json
+++ b/data/conf/samples/tutmysql_internal/cgrates.json
@@ -264,4 +264,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/conf/samples/tutpostgres/cgrates.json b/data/conf/samples/tutpostgres/cgrates.json
index 788267f3c..4fce0417a 100644
--- a/data/conf/samples/tutpostgres/cgrates.json
+++ b/data/conf/samples/tutpostgres/cgrates.json
@@ -107,4 +107,9 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
diff --git a/data/tutorial_tests/asterisk_ari/cgrates/etc/cgrates/cgrates.json b/data/tutorial_tests/asterisk_ari/cgrates/etc/cgrates/cgrates.json
index f6c8c3c59..f16f67d05 100644
--- a/data/tutorial_tests/asterisk_ari/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorial_tests/asterisk_ari/cgrates/etc/cgrates/cgrates.json
@@ -139,4 +139,9 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
}
diff --git a/data/tutorial_tests/fs_evsock/cgrates/etc/cgrates/cgrates.json b/data/tutorial_tests/fs_evsock/cgrates/etc/cgrates/cgrates.json
index ce7eab8c6..0a395d21f 100644
--- a/data/tutorial_tests/fs_evsock/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorial_tests/fs_evsock/cgrates/etc/cgrates/cgrates.json
@@ -136,4 +136,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/tutorial_tests/kamevapi/cgrates/etc/cgrates/cgrates.json b/data/tutorial_tests/kamevapi/cgrates/etc/cgrates/cgrates.json
index ff868a184..1b188e04f 100644
--- a/data/tutorial_tests/kamevapi/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorial_tests/kamevapi/cgrates/etc/cgrates/cgrates.json
@@ -135,4 +135,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/tutorial_tests/osips/cgrates/etc/cgrates/cgrates.json b/data/tutorial_tests/osips/cgrates/etc/cgrates/cgrates.json
index d539ffbac..ca69cd59c 100644
--- a/data/tutorial_tests/osips/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorial_tests/osips/cgrates/etc/cgrates/cgrates.json
@@ -133,4 +133,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/tutorials/asterisk_ari/cgrates/etc/cgrates/cgrates.json b/data/tutorials/asterisk_ari/cgrates/etc/cgrates/cgrates.json
index f6c8c3c59..4075ad43f 100644
--- a/data/tutorials/asterisk_ari/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorials/asterisk_ari/cgrates/etc/cgrates/cgrates.json
@@ -139,4 +139,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json b/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json
index ce7eab8c6..0a395d21f 100644
--- a/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json
@@ -136,4 +136,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/tutorials/kamevapi/cgrates/etc/cgrates/cgrates.json b/data/tutorials/kamevapi/cgrates/etc/cgrates/cgrates.json
index e0875a738..679100fca 100644
--- a/data/tutorials/kamevapi/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorials/kamevapi/cgrates/etc/cgrates/cgrates.json
@@ -135,4 +135,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/tutorials/osips/cgrates/etc/cgrates/cgrates.json b/data/tutorials/osips/cgrates/etc/cgrates/cgrates.json
index b7719ecd5..079dd1b89 100644
--- a/data/tutorials/osips/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorials/osips/cgrates/etc/cgrates/cgrates.json
@@ -133,4 +133,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json b/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json
index 0aa8fdbbc..3a5a9ea2a 100644
--- a/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json
+++ b/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json
@@ -134,4 +134,11 @@
},
+"apier": {
+ "scheduler_conns": [ // connections to SchedulerS for reloads
+ {"address": "*internal"},
+ ],
+},
+
+
}
diff --git a/services/schedulers.go b/services/schedulers.go
new file mode 100644
index 000000000..26764c64e
--- /dev/null
+++ b/services/schedulers.go
@@ -0,0 +1,114 @@
+/*
+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 services
+
+import (
+ "fmt"
+ "sync"
+
+ v1 "github.com/cgrates/cgrates/apier/v1"
+ "github.com/cgrates/cgrates/scheduler"
+ "github.com/cgrates/cgrates/servmanager"
+ "github.com/cgrates/cgrates/utils"
+ "github.com/cgrates/rpcclient"
+)
+
+// NewSchedulerService returns the Scheduler Service
+func NewSchedulerService() *SchedulerService {
+ return &SchedulerService{
+ connChan: make(chan rpcclient.RpcClientConnection, 1),
+ }
+}
+
+// SchedulerService implements Service interface
+type SchedulerService struct {
+ sync.RWMutex
+ schS *scheduler.Scheduler
+ rpc *v1.SchedulerSv1
+ connChan chan rpcclient.RpcClientConnection
+}
+
+// Start should handle the sercive start
+func (schS *SchedulerService) Start(sp servmanager.ServiceProvider, waitCache bool) (err error) {
+ if schS.IsRunning() {
+ return fmt.Errorf("service aleady running")
+ }
+
+ schS.Lock()
+
+ if !waitCache { // Wait for cache to load data before starting
+ <-sp.GetCacheS().GetPrecacheChannel(utils.CacheActionPlans) // wait for ActionPlans to be cached
+ }
+ utils.Logger.Info(" Starting CGRateS Scheduler.")
+ schS.schS = scheduler.NewScheduler(sp.GetDM())
+ schS.Unlock()
+ go schS.schS.Loop()
+
+ schS.rpc = v1.NewSchedulerSv1(sp.GetConfig())
+ if !sp.GetConfig().DispatcherSCfg().Enabled {
+ sp.GetServer().RpcRegister(schS.rpc)
+ }
+ schS.connChan <- schS.rpc
+
+ return
+}
+
+// GetIntenternalChan returns the internal connection chanel
+func (schS *SchedulerService) GetIntenternalChan() (conn chan rpcclient.RpcClientConnection) {
+ return schS.connChan
+}
+
+// Reload handles the change of config
+func (schS *SchedulerService) Reload(sp servmanager.ServiceProvider) (err error) {
+ schS.schS.Reload()
+ return
+}
+
+// Shutdown stops the service
+func (schS *SchedulerService) Shutdown() (err error) {
+ schS.schS.Shutdown()
+ schS.Lock()
+ schS.schS = nil
+ schS.rpc = nil
+ schS.Unlock()
+ <-schS.connChan
+ return
+}
+
+// GetRPCInterface returns the interface to register for server
+func (schS *SchedulerService) GetRPCInterface() interface{} {
+ return schS.rpc
+}
+
+// IsRunning returns if the service is running
+func (schS *SchedulerService) IsRunning() bool {
+ return schS != nil && schS.schS != nil
+}
+
+// ServiceName returns the service name
+func (schS *SchedulerService) ServiceName() string {
+ return utils.SchedulerS
+}
+
+// GetScheduler returns the Scheduler
+func (schS *SchedulerService) GetScheduler() *scheduler.Scheduler {
+ schS.RLock()
+ defer schS.RUnlock()
+ return schS.schS
+}
diff --git a/servmanager/schedulers.go b/servmanager/schedulers.go
deleted file mode 100644
index 3f48e57c3..000000000
--- a/servmanager/schedulers.go
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-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 servmanager
-
-import (
- "errors"
-
- "github.com/cgrates/cgrates/utils"
-)
-
-func NewSchedulerS(srvMngr *ServiceManager) *SchedulerS {
- return &SchedulerS{srvMngr: srvMngr}
-}
-
-type SchedulerS struct {
- srvMngr *ServiceManager // access scheduler from servmanager so we can dynamically start/stop
-}
-
-// Call gives the ability of SchedulerS to be passed as internal RPC
-func (schdS *SchedulerS) Call(serviceMethod string, args interface{}, reply interface{}) error {
- return utils.RPCCall(schdS, serviceMethod, args, reply)
-}
-
-// V1ReloadScheduler reloads the scheduler tasks
-func (schdS *SchedulerS) V1Reload(_ *utils.CGREventWithArgDispatcher, reply *string) (err error) {
- sched := schdS.srvMngr.GetScheduler()
- if sched == nil {
- return errors.New(utils.SchedulerNotRunningCaps)
- }
- sched.Reload()
- *reply = utils.OK
- return nil
-}
diff --git a/servmanager/servmanager.go b/servmanager/servmanager.go
index a208662e8..f550199bb 100644
--- a/servmanager/servmanager.go
+++ b/servmanager/servmanager.go
@@ -27,7 +27,6 @@ import (
"github.com/cgrates/cgrates/config"
"github.com/cgrates/cgrates/engine"
- "github.com/cgrates/cgrates/scheduler"
"github.com/cgrates/cgrates/utils"
"github.com/cgrates/rpcclient"
)
@@ -61,7 +60,6 @@ type ServiceManager struct {
dm *engine.DataManager
engineShutdown chan bool
cacheS *engine.CacheS
- sched *scheduler.Scheduler
cdrStorage engine.CdrStorage
loadStorage engine.LoadStorage
@@ -72,62 +70,6 @@ type ServiceManager struct {
dispatcherSChan chan rpcclient.RpcClientConnection
}
-func (srvMngr *ServiceManager) StartScheduler(waitCache bool) error {
- srvMngr.RLock()
- schedRunning := srvMngr.sched != nil
- srvMngr.RUnlock()
- if schedRunning {
- return utils.NewCGRError(utils.ServiceManager,
- utils.CapitalizedMessage(utils.ServiceAlreadyRunning),
- utils.ServiceAlreadyRunning,
- "the scheduler is already running")
- }
- if waitCache { // Wait for cache to load data before starting
- <-srvMngr.cacheS.GetPrecacheChannel(utils.CacheActionPlans) // wait for ActionPlans to be cached
- }
- utils.Logger.Info(" Starting CGRateS Scheduler.")
- sched := scheduler.NewScheduler(srvMngr.dm)
- srvMngr.Lock()
- srvMngr.sched = sched
- srvMngr.Unlock()
- go func() {
- sched.Loop()
- srvMngr.Lock()
- srvMngr.sched = nil // if we are after loop, the service is down
- srvMngr.Unlock()
- if srvMngr.cfg.SchedulerCfg().Enabled {
- srvMngr.engineShutdown <- true // shutdown engine since this service should be running
- }
- }()
- return nil
-}
-
-func (srvMngr *ServiceManager) StopScheduler() error {
- var sched *scheduler.Scheduler
- srvMngr.Lock()
- if srvMngr.sched != nil {
- sched = srvMngr.sched
- srvMngr.sched = nil // optimize the lock and release here
- }
- srvMngr.Unlock()
- if sched == nil {
- return utils.NewCGRError(utils.ServiceManager,
- utils.CapitalizedMessage(utils.ServiceNotRunning),
- utils.ServiceNotRunning,
- "the scheduler is not running")
- }
- utils.Logger.Info(" Stoping CGRateS Scheduler.")
- srvMngr.cfg.SchedulerCfg().Enabled = false
- sched.Shutdown()
- return nil
-}
-
-func (srvMngr *ServiceManager) GetScheduler() *scheduler.Scheduler {
- srvMngr.RLock()
- defer srvMngr.RUnlock()
- return srvMngr.sched
-}
-
func (srvMngr *ServiceManager) Call(serviceMethod string, args interface{}, reply interface{}) error {
parts := strings.Split(serviceMethod, ".")
if len(parts) != 2 {
@@ -162,8 +104,6 @@ type ArgStartService struct {
// ShutdownService shuts-down a service with ID
func (srvMngr *ServiceManager) V1StartService(args ArgStartService, reply *string) (err error) {
switch args.ServiceID {
- case utils.MetaScheduler:
- err = srvMngr.StartScheduler(false)
default:
err = errors.New(utils.UnsupportedServiceIDCaps)
}
@@ -177,8 +117,6 @@ func (srvMngr *ServiceManager) V1StartService(args ArgStartService, reply *strin
// ShutdownService shuts-down a service with ID
func (srvMngr *ServiceManager) V1StopService(args ArgStartService, reply *string) (err error) {
switch args.ServiceID {
- case utils.MetaScheduler:
- err = srvMngr.StopScheduler()
default:
err = errors.New(utils.UnsupportedServiceIDCaps)
}
@@ -195,8 +133,6 @@ func (srvMngr *ServiceManager) V1ServiceStatus(args ArgStartService, reply *stri
defer srvMngr.RUnlock()
var running bool
switch args.ServiceID {
- case utils.MetaScheduler:
- running = srvMngr.sched != nil
default:
return errors.New(utils.UnsupportedServiceIDCaps)
}
@@ -269,6 +205,8 @@ func (srvMngr *ServiceManager) GetConnection(subsystem string, conns []*config.R
if len(conns) == 0 {
return nil, nil
}
+ // srvMngr.RLock()
+ // defer srvMngr.RUnlock()
internalChan := srvMngr.subsystems[subsystem].GetIntenternalChan()
if srvMngr.GetConfig().DispatcherSCfg().Enabled {
internalChan = srvMngr.dispatcherSChan
@@ -350,6 +288,18 @@ func (srvMngr *ServiceManager) StartServices() (err error) {
}
}()
}
+ fmt.Println(srvMngr.cfg.SchedulerCfg().Enabled)
+ if srvMngr.cfg.SchedulerCfg().Enabled {
+ go func() {
+ if supS, has := srvMngr.subsystems[utils.SchedulerS]; !has {
+ utils.Logger.Err(fmt.Sprintf("<%s> Failed to start <%s>", utils.ServiceManager, utils.SchedulerS))
+ srvMngr.engineShutdown <- true
+ } else if err = supS.Start(srvMngr, true); err != nil {
+ utils.Logger.Err(fmt.Sprintf("<%s> Failed to start %s because: %s", utils.ServiceManager, utils.SchedulerS, err))
+ srvMngr.engineShutdown <- true
+ }
+ }()
+ }
// startServer()
return
}
@@ -431,6 +381,16 @@ func (srvMngr *ServiceManager) handleReload() {
if err = srvMngr.reloadService(srv, srvMngr.cfg.SupplierSCfg().Enabled); err != nil {
return
}
+ case <-srvMngr.cfg.GetReloadChan(config.SCHEDULER_JSN):
+ srv, has := srvMngr.subsystems[utils.SchedulerS]
+ if !has {
+ utils.Logger.Err(fmt.Sprintf("<%s> Failed to start <%s>", utils.ServiceManager, utils.SchedulerS))
+ srvMngr.engineShutdown <- true
+ return // stop if we encounter an error
+ }
+ if err = srvMngr.reloadService(srv, srvMngr.cfg.SchedulerCfg().Enabled); err != nil {
+ return
+ }
}
// handle RPC server
}