diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go
index 83099acfc..fc1a46bd3 100644
--- a/cmd/cgr-engine/cgr-engine.go
+++ b/cmd/cgr-engine/cgr-engine.go
@@ -19,25 +19,59 @@ along with this program. If not, see
package main
import (
- "fmt"
"log"
"os"
+ "runtime"
+ "sync"
+ "github.com/cgrates/birpc/context"
+ "github.com/cgrates/cgrates/config"
+ "github.com/cgrates/cgrates/engine"
"github.com/cgrates/cgrates/services"
"github.com/cgrates/cgrates/utils"
)
+func RunCGREngine(fs []string) (err error) {
+ flags := services.NewCGREngineFlags()
+ if err = flags.Parse(fs); err != nil {
+ return
+ }
+ var vers string
+ if vers, err = utils.GetCGRVersion(); err != nil {
+ return
+ }
+ if *flags.Version {
+ return
+ }
+ if *flags.PidFile != utils.EmptyString {
+ services.CgrWritePid(*flags.PidFile)
+ }
+ if *flags.Singlecpu {
+ runtime.GOMAXPROCS(1) // Having multiple cpus may slow down computing due to CPU management, to be reviewed in future Go releases
+ }
+
+ // Init config
+ var cfg *config.CGRConfig
+ if cfg, err = services.InitConfigFromPath(*flags.CfgPath, *flags.NodeID, *flags.LogLevel); err != nil || *flags.CheckConfig {
+ return
+ }
+ cgr := services.NewCGREngine(cfg, engine.NewConnManager(cfg), new(sync.WaitGroup))
+ defer cgr.Stop(*flags.MemPrfDir, *flags.PidFile)
+ ctx, cancel := context.WithCancel(context.Background())
+
+ if err = cgr.Init(ctx, cancel, flags, vers); err != nil {
+ return
+ }
+
+ if err = cgr.StartServices(ctx, cancel, *flags.Preload); err != nil {
+ return
+ }
+ <-ctx.Done()
+ return
+}
+
func main() {
- defer func() {
- val := recover()
- if val == nil {
- return
- }
- utils.Logger.Crit(fmt.Sprintf("%s", val))
- panic(val)
- }()
- if err := services.RunCGREngine(os.Args[1:]); err != nil {
+ if err := RunCGREngine(os.Args[1:]); err != nil {
log.Fatal(err)
- utils.Logger.Crit(fmt.Sprintf("%s", err))
}
}
diff --git a/services/cgr-engine.go b/services/cgr-engine.go
index ae089d302..0d756c61d 100644
--- a/services/cgr-engine.go
+++ b/services/cgr-engine.go
@@ -39,12 +39,15 @@ import (
"github.com/cgrates/rpcclient"
)
-func NewCGREngine(cfg *config.CGRConfig) (cgr *CGREngine) {
- cgr = &CGREngine{
- cfg: cfg,
- cM: engine.NewConnManager(cfg),
- caps: engine.NewCaps(cfg.CoreSCfg().Caps, cfg.CoreSCfg().CapsStrategy),
- shdWg: new(sync.WaitGroup),
+func NewCGREngine(cfg *config.CGRConfig, cM *engine.ConnManager, shdWg *sync.WaitGroup) *CGREngine {
+ cps := engine.NewCaps(cfg.CoreSCfg().Caps, cfg.CoreSCfg().CapsStrategy)
+ return &CGREngine{
+ cfg: cfg,
+ cM: cM,
+ caps: cps,
+ shdWg: shdWg,
+ srvManager: servmanager.NewServiceManager(cfg, shdWg, cM),
+ server: cores.NewServer(cps), // Rpc/http server
srvDep: map[string]*sync.WaitGroup{
utils.AnalyzerS: new(sync.WaitGroup),
utils.AdminS: new(sync.WaitGroup),
@@ -80,9 +83,6 @@ func NewCGREngine(cfg *config.CGRConfig) (cgr *CGREngine) {
},
iFilterSCh: make(chan *engine.FilterS, 1),
}
- cgr.srvManager = servmanager.NewServiceManager(cgr.cfg, cgr.shdWg, cgr.cM)
- cgr.server = cores.NewServer(cgr.caps) // Rpc/http server
- return
}
type CGREngine struct {
@@ -381,48 +381,3 @@ func (cgr *CGREngine) Stop(memPrfDir, pidFile string) {
}
utils.Logger.Info(" stopped all components. CGRateS shutdown!")
}
-
-func RunCGREngine(fs []string) (err error) {
- flags := NewCGREngineFlags()
- if err = flags.Parse(fs); err != nil {
- return
- }
- var vers string
- if vers, err = utils.GetCGRVersion(); err != nil {
- return
- }
- if *flags.Version {
- return
- }
- if *flags.PidFile != utils.EmptyString {
- cgrWritePid(*flags.PidFile)
- }
- if *flags.Singlecpu {
- runtime.GOMAXPROCS(1) // Having multiple cpus may slow down computing due to CPU management, to be reviewed in future Go releases
- }
-
- // Init config
- var cfg *config.CGRConfig
- if cfg, err = InitConfigFromPath(*flags.CfgPath, *flags.NodeID, *flags.LogLevel); err != nil || *flags.CheckConfig {
- return
- }
- cgr := NewCGREngine(cfg)
- defer cgr.Stop(*flags.MemPrfDir, *flags.PidFile)
- ctx, cancel := context.WithCancel(context.Background())
-
- if err = cgr.Init(ctx, cancel, flags, vers); err != nil {
- return
- }
-
- // cgr-manager
- // iConn := make(chan birpc.ClientConnector)
- // cgrM := NewCGRManager(cfg, cgr.cM, iConn, cgr.srvDep)
- // cgr.AddService(cgrM, utils.ConcatenatedKey(utils.MetaInternal, "CgrManager"), "CgrmanagerSv1", iConn)
- //
-
- if err = cgr.StartServices(ctx, cancel, *flags.Preload); err != nil {
- return
- }
- <-ctx.Done()
- return
-}
diff --git a/services/cgr-manager.go b/services/cgr-manager.go
deleted file mode 100644
index a5969d0e5..000000000
--- a/services/cgr-manager.go
+++ /dev/null
@@ -1,79 +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 services
-
-import (
- "sync"
-
- "github.com/cgrates/birpc"
- "github.com/cgrates/birpc/context"
- "github.com/cgrates/cgrates/config"
- "github.com/cgrates/cgrates/engine"
- "github.com/cgrates/cgrates/servmanager"
-)
-
-// NewCGRManager .
-func NewCGRManager(cfg *config.CGRConfig, cM *engine.ConnManager,
- iConnCh chan birpc.ClientConnector,
- srvDep map[string]*sync.WaitGroup) servmanager.Service {
- return &CGRManager{
- cfg: cfg,
- srvDep: srvDep,
- cM: cM,
- iConnCh: iConnCh,
- }
-}
-
-// CGRManager implements Agent interface
-type CGRManager struct {
- cfg *config.CGRConfig
- srvDep map[string]*sync.WaitGroup
- cM *engine.ConnManager
- iConnCh chan birpc.ClientConnector
-}
-
-// Start should handle the sercive start
-func (gv *CGRManager) Start(*context.Context, context.CancelFunc) error {
- return nil
-}
-
-// Reload handles the change of config
-func (gv *CGRManager) Reload(*context.Context, context.CancelFunc) error {
- return nil
-}
-
-// Shutdown stops the service
-func (gv *CGRManager) Shutdown() error {
- return nil
-}
-
-// IsRunning returns if the service is running
-func (gv *CGRManager) IsRunning() bool {
- return true
-}
-
-// ServiceName returns the service name
-func (gv *CGRManager) ServiceName() string {
- return "CGRManager"
-}
-
-// ShouldRun returns if the service should be running
-func (gv *CGRManager) ShouldRun() bool {
- return true
-}
diff --git a/services/libcgr-engine.go b/services/libcgr-engine.go
index a36b90372..d38a89d58 100644
--- a/services/libcgr-engine.go
+++ b/services/libcgr-engine.go
@@ -112,7 +112,7 @@ func cgrSingnalHandler(ctx *context.Context, shutdown context.CancelFunc,
}
}
-func cgrWritePid(pidFile string) (err error) {
+func CgrWritePid(pidFile string) (err error) {
var f *os.File
if f, err = os.Create(pidFile); err != nil {
err = fmt.Errorf("could not create pid file: %s", err)