From 3e8b80fbd5f5b03dc79dcc8fa57e1fe13b864c6d Mon Sep 17 00:00:00 2001 From: TeoV Date: Fri, 15 Feb 2019 14:49:26 +0200 Subject: [PATCH] Add chargerS in tutorials config --- agents/fsagent.go | 24 +++++++++++-------- cmd/cgr-engine/cgr-engine.go | 17 +++++++++---- .../cgrates/etc/cgrates/cgrates.json | 11 ++++++--- .../cgrates/etc/cgrates/cgrates.json | 11 ++++++--- .../kamevapi/cgrates/etc/cgrates/cgrates.json | 11 ++++++--- .../cgrates/etc/cgrates/cgrates.json | 11 ++++++--- general_tests/tutorial_calls_test.go | 6 ++--- sessions/sessions.go | 2 +- 8 files changed, 62 insertions(+), 31 deletions(-) diff --git a/agents/fsagent.go b/agents/fsagent.go index 8cc1673e2..7766b1279 100644 --- a/agents/fsagent.go +++ b/agents/fsagent.go @@ -21,6 +21,7 @@ package agents import ( "errors" "fmt" + "reflect" "time" "github.com/cgrates/cgrates/config" @@ -28,6 +29,7 @@ import ( "github.com/cgrates/cgrates/sessions" "github.com/cgrates/cgrates/utils" "github.com/cgrates/fsock" + "github.com/cgrates/rpcclient" ) type fsSockWithConfig struct { @@ -36,15 +38,17 @@ type fsSockWithConfig struct { } func NewFSsessions(fsAgentConfig *config.FsAgentCfg, - smg *utils.BiRPCInternalClient, timezone string) (fsa *FSsessions) { + sS rpcclient.RpcClientConnection, timezone string) (fsa *FSsessions) { + if sS != nil && reflect.ValueOf(sS).IsNil() { + sS = nil + } fsa = &FSsessions{ cfg: fsAgentConfig, conns: make(map[string]*fsSockWithConfig), senderPools: make(map[string]*fsock.FSockPool), - smg: smg, + sS: sS, timezone: timezone, } - fsa.smg.SetClientConn(fsa) // pass the connection to FsA back into smg so we can receive the disconnects return } @@ -52,9 +56,9 @@ func NewFSsessions(fsAgentConfig *config.FsAgentCfg, // and the active sessions type FSsessions struct { cfg *config.FsAgentCfg - conns map[string]*fsSockWithConfig // Keep the list here for connection management purposes - senderPools map[string]*fsock.FSockPool // Keep sender pools here - smg *utils.BiRPCInternalClient + conns map[string]*fsSockWithConfig // Keep the list here for connection management purposes + senderPools map[string]*fsock.FSockPool // Keep sender pools here + sS rpcclient.RpcClientConnection // Connection towards CGR-SessionS component timezone string } @@ -146,7 +150,7 @@ func (sm *FSsessions) onChannelPark(fsev FSEvent, connId string) { fsev[VarCGROriginHost] = sm.conns[connId].cfg.Alias authArgs := fsev.V1AuthorizeArgs() var authReply sessions.V1AuthorizeReply - if err := sm.smg.Call(utils.SessionSv1AuthorizeEvent, authArgs, &authReply); err != nil { + if err := sm.sS.Call(utils.SessionSv1AuthorizeEvent, authArgs, &authReply); err != nil { utils.Logger.Err( fmt.Sprintf("<%s> Could not authorize event %s, error: %s", utils.FreeSWITCHAgent, fsev.GetUUID(), err.Error())) @@ -232,7 +236,7 @@ func (sm *FSsessions) onChannelAnswer(fsev FSEvent, connId string) { initSessionArgs := fsev.V1InitSessionArgs() initSessionArgs.CGREvent.Event[FsConnID] = connId // Attach the connection ID so we can properly disconnect later var initReply sessions.V1InitSessionReply - if err := sm.smg.Call(utils.SessionSv1InitiateSession, + if err := sm.sS.Call(utils.SessionSv1InitiateSession, initSessionArgs, &initReply); err != nil { utils.Logger.Err( fmt.Sprintf("<%s> could not process answer for event %s, error: %s", @@ -249,7 +253,7 @@ func (sm *FSsessions) onChannelHangupComplete(fsev FSEvent, connId string) { var reply string fsev[VarCGROriginHost] = sm.conns[connId].cfg.Alias if fsev[VarAnswerEpoch] != "0" { // call was answered - if err := sm.smg.Call(utils.SessionSv1TerminateSession, + if err := sm.sS.Call(utils.SessionSv1TerminateSession, fsev.V1TerminateSessionArgs(), &reply); err != nil { utils.Logger.Err( fmt.Sprintf("<%s> Could not terminate session with event %s, error: %s", @@ -261,7 +265,7 @@ func (sm *FSsessions) onChannelHangupComplete(fsev FSEvent, connId string) { if err != nil { return } - if err := sm.smg.Call(utils.SessionSv1ProcessCDR, cgrEv, &reply); err != nil { + if err := sm.sS.Call(utils.SessionSv1ProcessCDR, cgrEv, &reply); err != nil { utils.Logger.Err(fmt.Sprintf("<%s> Failed processing CGREvent: %s, error: <%s>", utils.FreeSWITCHAgent, utils.ToJSON(cgrEv), err.Error())) } diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 63f05f9eb..e2376df94 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -428,14 +428,21 @@ func startRadiusAgent(internalSMGChan chan rpcclient.RpcClientConnection, exitCh func startFsAgent(internalSMGChan chan rpcclient.RpcClientConnection, exitChan chan bool) { var err error + var sS rpcclient.RpcClientConnection utils.Logger.Info("Starting FreeSWITCH agent") smgRpcConn := <-internalSMGChan internalSMGChan <- smgRpcConn - birpcClnt := utils.NewBiRPCInternalClient(smgRpcConn.(*sessions.SessionS)) - sm := agents.NewFSsessions(cfg.FsAgentCfg(), birpcClnt, cfg.GeneralCfg().DefaultTimezone) - var reply string - if err = birpcClnt.Call(utils.SessionSv1RegisterInternalBiJSONConn, "", &reply); err != nil { // for session sync - utils.Logger.Err(fmt.Sprintf("<%s> error: %s!", utils.FreeSWITCHAgent, err)) + sS = utils.NewBiRPCInternalClient(smgRpcConn.(*sessions.SessionS)) + + sm := agents.NewFSsessions(cfg.FsAgentCfg(), sS, cfg.GeneralCfg().DefaultTimezone) + sS.(*utils.BiRPCInternalClient).SetClientConn(sm) + var rply string + if err := sS.Call(utils.SessionSv1RegisterInternalBiJSONConn, + utils.EmptyString, &rply); err != nil { + utils.Logger.Crit(fmt.Sprintf("<%s> Could not connect to %s: %s", + utils.FreeSWITCHAgent, utils.SessionS, err.Error())) + exitChan <- true + return } if err = sm.Connect(); err != nil { utils.Logger.Err(fmt.Sprintf("<%s> error: %s!", utils.FreeSWITCHAgent, err)) diff --git a/data/tutorials/asterisk_ari/cgrates/etc/cgrates/cgrates.json b/data/tutorials/asterisk_ari/cgrates/etc/cgrates/cgrates.json index ade1049c5..745651dfd 100644 --- a/data/tutorials/asterisk_ari/cgrates/etc/cgrates/cgrates.json +++ b/data/tutorials/asterisk_ari/cgrates/etc/cgrates/cgrates.json @@ -40,9 +40,6 @@ "cdrs": { "enabled": true, - "sessions_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"}, - ], "stats_conns": [ {"address": "127.0.0.1:2012", "transport": "*json"}, ], @@ -50,6 +47,14 @@ }, +"chargers": { + "enabled": true, + "attributes_conns": [ + {"address": "*internal"} + ], +}, + + "sessions": { "enabled": true, "rals_conns": [ diff --git a/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json b/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json index 89506a251..3e1c1a4b6 100644 --- a/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json +++ b/data/tutorials/fs_evsock/cgrates/etc/cgrates/cgrates.json @@ -39,9 +39,6 @@ "cdrs": { "enabled": true, - "sessions_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"}, - ], "stats_conns": [ {"address": "127.0.0.1:2012", "transport": "*json"}, ], @@ -49,6 +46,14 @@ }, +"chargers": { + "enabled": true, + "attributes_conns": [ + {"address": "*internal"} + ], +}, + + "sessions": { "enabled": true, "rals_conns": [ diff --git a/data/tutorials/kamevapi/cgrates/etc/cgrates/cgrates.json b/data/tutorials/kamevapi/cgrates/etc/cgrates/cgrates.json index 6c367e244..92ca09e4c 100644 --- a/data/tutorials/kamevapi/cgrates/etc/cgrates/cgrates.json +++ b/data/tutorials/kamevapi/cgrates/etc/cgrates/cgrates.json @@ -40,9 +40,6 @@ "cdrs": { "enabled": true, - "sessions_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"}, - ], "stats_conns": [ {"address": "127.0.0.1:2012", "transport": "*json"}, ], @@ -50,6 +47,14 @@ }, +"chargers": { + "enabled": true, + "attributes_conns": [ + {"address": "*internal"} + ], +}, + + "sessions": { "enabled": true, "rals_conns": [ diff --git a/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json b/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json index 05820fbc5..b4b1277bb 100644 --- a/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json +++ b/data/tutorials/osips_native/cgrates/etc/cgrates/cgrates.json @@ -38,9 +38,6 @@ "cdrs": { "enabled": true, - "sessions_conns": [ - {"address": "127.0.0.1:2012", "transport": "*json"} - ], "stats_conns": [ {"address": "*internal"} ], @@ -48,6 +45,14 @@ }, +"chargers": { + "enabled": true, + "attributes_conns": [ + {"address": "*internal"} + ], +}, + + "sessions": { "enabled": true, "listen_bijson": "127.0.0.1:2014", // address where to listen for bidirectional JSON-RPC requests diff --git a/general_tests/tutorial_calls_test.go b/general_tests/tutorial_calls_test.go index 55c0ad396..1a853ce10 100755 --- a/general_tests/tutorial_calls_test.go +++ b/general_tests/tutorial_calls_test.go @@ -384,7 +384,7 @@ func testCallGetActiveSessions(t *testing.T) { var reply *[]*sessions.ActiveSession expected := &[]*sessions.ActiveSession{ { - ReqType: "*prepaid", + RequestType: "*prepaid", Tenant: "cgrates.org", Category: "call", Account: "1001", @@ -397,8 +397,8 @@ func testCallGetActiveSessions(t *testing.T) { t.Error("Got error on SessionSv1.GetActiveSessions: ", err.Error()) } else { // compare some fields (eg. CGRId is generated) - if !reflect.DeepEqual((*expected)[0].ReqType, (*reply)[0].ReqType) { - t.Errorf("Expected: %s, received: %s", (*expected)[0].ReqType, (*reply)[0].ReqType) + if !reflect.DeepEqual((*expected)[0].RequestType, (*reply)[0].RequestType) { + t.Errorf("Expected: %s, received: %s", (*expected)[0].RequestType, (*reply)[0].RequestType) } else if !reflect.DeepEqual((*expected)[0].Account, (*reply)[0].Account) { t.Errorf("Expected: %s, received: %s", (*expected)[0].Account, (*reply)[0].Account) } else if !reflect.DeepEqual((*expected)[0].Destination, (*reply)[0].Destination) { diff --git a/sessions/sessions.go b/sessions/sessions.go index 1abe51f43..b2e3d89c6 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -1091,7 +1091,7 @@ func (sS *SessionS) syncSessions() { var toBeRemoved []string sS.aSsMux.RLock() for cgrid := range sS.aSessions { - if queriedCGRIDs.HasField(cgrid) { + if !queriedCGRIDs.HasField(cgrid) { toBeRemoved = append(toBeRemoved, cgrid) } }