This commit is contained in:
Edwardro22
2017-08-03 01:47:21 +03:00
19 changed files with 309 additions and 46 deletions

View File

@@ -39,6 +39,7 @@ import (
"github.com/cgrates/cgrates/scheduler"
"github.com/cgrates/cgrates/servmanager"
"github.com/cgrates/cgrates/sessionmanager"
"github.com/cgrates/cgrates/stats"
"github.com/cgrates/cgrates/utils"
"github.com/cgrates/rpcclient"
)
@@ -545,9 +546,32 @@ func startResourceLimiterService(internalRLSChan, internalCdrStatSChan chan rpcc
internalRLSChan <- rlsV1
}
// startStatService fires up the StatS
func startStatService(internalStatSChan chan rpcclient.RpcClientConnection, cfg *config.CGRConfig,
dataDB engine.DataDB, ms engine.Marshaler, server *utils.Server, exitChan chan bool) {
sts, err := stats.NewStatService(dataDB, ms, cfg.StatSCfg().StoreInterval)
if err != nil {
utils.Logger.Crit(fmt.Sprintf("<StatS> Could not init, error: %s", err.Error()))
exitChan <- true
return
}
utils.Logger.Info(fmt.Sprintf("Starting Stat service"))
go func() {
if err := sts.ListenAndServe(exitChan); err != nil {
utils.Logger.Crit(fmt.Sprintf("<StatS> Error: %s listening for packets", err.Error()))
}
sts.Shutdown()
exitChan <- true
return
}()
stsV1 := v1.NewStatSV1(sts)
server.RpcRegister(stsV1)
internalStatSChan <- stsV1
}
func startRpc(server *utils.Server, internalRaterChan,
internalCdrSChan, internalCdrStatSChan, internalHistorySChan, internalPubSubSChan, internalUserSChan,
internalAliaseSChan, internalRLsChan chan rpcclient.RpcClientConnection, internalSMGChan chan *sessionmanager.SMGeneric) {
internalAliaseSChan, internalRLsChan, internalStatSChan chan rpcclient.RpcClientConnection, internalSMGChan chan *sessionmanager.SMGeneric) {
select { // Any of the rpc methods will unlock listening to rpc requests
case resp := <-internalRaterChan:
internalRaterChan <- resp
@@ -567,6 +591,8 @@ func startRpc(server *utils.Server, internalRaterChan,
internalSMGChan <- smg
case rls := <-internalRLsChan:
internalRLsChan <- rls
case statS := <-internalStatSChan:
internalStatSChan <- statS
}
go server.ServeJSON(cfg.RPCJSONListen)
go server.ServeGOB(cfg.RPCGOBListen)
@@ -656,6 +682,17 @@ func main() {
// Init cache
cache.NewCache(cfg.CacheConfig)
var ms engine.Marshaler
if ms, err = engine.NewMarshaler(cfg.DBDataEncoding); err != nil {
log.Fatalf("error initializing marshaler: ", err)
return
}
if err != nil {
utils.Logger.Crit(fmt.Sprintf("<StatS> Could not start, error: %s", err.Error()))
exitChan <- true
return
}
var dataDB engine.DataDB
var loadDb engine.LoadStorage
var cdrDb engine.CdrStorage
@@ -709,6 +746,7 @@ func main() {
internalAliaseSChan := make(chan rpcclient.RpcClientConnection, 1)
internalSMGChan := make(chan *sessionmanager.SMGeneric, 1)
internalRLSChan := make(chan rpcclient.RpcClientConnection, 1)
internalStatSChan := make(chan rpcclient.RpcClientConnection, 1)
// Start ServiceManager
srvManager := servmanager.NewServiceManager(cfg, dataDB, exitChan, cacheDoneChan)
@@ -802,9 +840,13 @@ func main() {
go startResourceLimiterService(internalRLSChan, internalCdrStatSChan, cfg, dataDB, server, exitChan)
}
if cfg.StatSCfg().Enabled {
go startStatService(internalStatSChan, cfg, dataDB, ms, server, exitChan)
}
// Serve rpc connections
go startRpc(server, internalRaterChan, internalCdrSChan, internalCdrStatSChan, internalHistorySChan,
internalPubSubSChan, internalUserSChan, internalAliaseSChan, internalRLSChan, internalSMGChan)
internalPubSubSChan, internalUserSChan, internalAliaseSChan, internalRLSChan, internalStatSChan, internalSMGChan)
<-exitChan
if *pidFile != "" {