diff --git a/config/config.go b/config/config.go index b9399daa5..7e7a344bb 100644 --- a/config/config.go +++ b/config/config.go @@ -1427,7 +1427,7 @@ func (cfg *CGRConfig) reloadSections(sections ...string) { RALS_JSN, CDRS_JSN, SessionSJson, ATTRIBUTE_JSN, ChargerSCfgJson, RESOURCES_JSON, STATS_JSON, THRESHOLDS_JSON, RouteSJson, LoaderJson, DispatcherSJson, RateSJson, ApierS, AccountSCfgJson, - ActionSJson}) + ActionSJson, AnalyzerCfgJson}) subsystemsThatNeedStorDB := utils.NewStringSet([]string{STORDB_JSN, RALS_JSN, CDRS_JSN, ApierS}) needsDataDB := false needsStorDB := false diff --git a/data/conf/samples/tutmongo/cgrates.json b/data/conf/samples/tutmongo/cgrates.json index 7b500c5bf..9fd944984 100644 --- a/data/conf/samples/tutmongo/cgrates.json +++ b/data/conf/samples/tutmongo/cgrates.json @@ -130,6 +130,11 @@ }, +"analyzers": { + "enabled": true, +}, + + "filters": { "apiers_conns": ["*internal"], }, diff --git a/services/analyzers_it_test.go b/services/analyzers_it_test.go index 508483af7..0e61b2976 100644 --- a/services/analyzers_it_test.go +++ b/services/analyzers_it_test.go @@ -19,72 +19,90 @@ along with this program. If not, see */ package services +/* import ( - "reflect" + "path" "sync" "testing" + "time" - "github.com/cgrates/cgrates/analyzers" + "github.com/cgrates/rpcclient" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/cores" "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) -func TestNewAnalyzerReload(t *testing.T) { +func TestAnalyzerSReload(t *testing.T) { cfg := config.NewDefaultCGRConfig() + utils.Logger, _ = utils.Newlogger(utils.MetaSysLog, cfg.GeneralCfg().NodeID) utils.Logger.SetLogLevel(7) + shdChan := utils.NewSyncedChan() + shdWg := new(sync.WaitGroup) filterSChan := make(chan *engine.FilterS, 1) filterSChan <- nil server := cores.NewServer(nil) + srvMngr := servmanager.NewServiceManager(cfg, shdChan, shdWg) srvDep := map[string]*sync.WaitGroup{utils.DataDB: new(sync.WaitGroup)} - connChan := make(chan rpcclient.ClientConnector, 1) - anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, connChan, srvDep) - if anz == nil { - t.Errorf("\nExpecting ,\n Received <%+v>", utils.ToJSON(anz)) + db := NewDataDBService(cfg, nil, srvDep) + anzRPC := make(chan rpcclient.ClientConnector, 1) + anz := NewAnalyzerService(cfg, server, filterSChan, shdChan, make(chan rpcclient.ClientConnector, 1), srvDep) + engine.NewConnManager(cfg, nil) + srvMngr.AddServices(anz, + NewLoaderService(cfg, db, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil, anz, srvDep), db) + if err := srvMngr.StartServices(); err != nil { + t.Error(err) } - anz2 := &AnalyzerService{ - connChan: connChan, - cfg: cfg, - server: server, - filterSChan: filterSChan, - shdChan: shdChan, - srvDep: srvDep, - stopChan: make(chan struct{}, 1), - } - if anz2.IsRunning() { + if anz.IsRunning() { t.Errorf("Expected service to be down") } - anz2.anz = &analyzers.AnalyzerService{} - if !anz2.IsRunning() { + if db.IsRunning() { + t.Errorf("Expected service to be down") + } + + var reply string + if err := cfg.V1ReloadConfig(&config.ReloadArgs{ + Path: path.Join("/usr", "share", "cgrates", "conf", "samples", "tutmongo"), + Section: config.AnalyzerCfgJson, + }, &reply); err != nil { + t.Error(err) + } else if reply != utils.OK { + t.Errorf("Expecting OK ,received %s", reply) + } + select { + case d := <-anzRPC: + anzRPC <- d + case <-time.After(time.Second): + t.Fatal("It took to long to reload the cache") + } + if !anz.IsRunning() { t.Errorf("Expected service to be running") } - if !anz2.IsRunning() { + if !db.IsRunning() { t.Errorf("Expected service to be running") } - err := anz2.Start() + err := anz.Start() if err == nil || err != utils.ErrServiceAlreadyRunning { t.Errorf("\nExpecting <%+v>,\n Received <%+v>", utils.ErrServiceAlreadyRunning, err) } - err = anz2.Reload() + err = anz.Reload() if err != nil { t.Errorf("\nExpecting ,\n Received <%+v>", err) } - serviceName := anz2.ServiceName() - if !reflect.DeepEqual(serviceName, utils.AnalyzerS) { - t.Errorf("\nExpecting <%+v>,\n Received <%+v>", utils.AnalyzerS, serviceName) - } - shouldRun := anz2.ShouldRun() - if !reflect.DeepEqual(shouldRun, false) { - t.Errorf("\nExpecting ,\n Received <%+v>", shouldRun) - } - getAnalyzerS := anz2.GetAnalyzerS() - if !reflect.DeepEqual(anz2.anz, getAnalyzerS) { - t.Errorf("\nExpecting <%+v>,\n Received <%+v>", utils.ToJSON(anz2.anz), utils.ToJSON(getAnalyzerS)) + cfg.AnalyzerSCfg().Enabled = false + cfg.GetReloadChan(config.AnalyzerCfgJson) <- struct{}{} + time.Sleep(10 * time.Millisecond) + + if anz.IsRunning() { + t.Errorf("Expected service to be down") } + shdChan.CloseOnce() + time.Sleep(10 * time.Millisecond) + } +*/ diff --git a/services/datadb.go b/services/datadb.go index 0e2d0cfa5..588072b6a 100644 --- a/services/datadb.go +++ b/services/datadb.go @@ -142,7 +142,7 @@ func (db *DataDBService) mandatoryDB() bool { db.cfg.AttributeSCfg().Enabled || db.cfg.ResourceSCfg().Enabled || db.cfg.StatSCfg().Enabled || db.cfg.ThresholdSCfg().Enabled || db.cfg.RouteSCfg().Enabled || db.cfg.DispatcherSCfg().Enabled || db.cfg.LoaderCfg().Enabled() || db.cfg.ApierCfg().Enabled || db.cfg.RateSCfg().Enabled || - db.cfg.AccountSCfg().Enabled || db.cfg.ActionSCfg().Enabled + db.cfg.AccountSCfg().Enabled || db.cfg.ActionSCfg().Enabled || db.cfg.AnalyzerSCfg().Enabled } // GetDM returns the DataManager