diff --git a/agents/astagent.go b/agents/astagent.go index 5fe7617bc..8b5ee0d30 100644 --- a/agents/astagent.go +++ b/agents/astagent.go @@ -28,6 +28,7 @@ import ( "time" "github.com/cgrates/aringo" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/sessions" @@ -336,8 +337,8 @@ func (sma *AsteriskAgent) V1DisconnectSession(args utils.AttrDisconnectSession, return nil } -// Call implements rpcclient.ClientConnector interface -func (sma *AsteriskAgent) Call(serviceMethod string, args interface{}, reply interface{}) error { +// Call implements birpc.ClientConnector interface +func (sma *AsteriskAgent) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.RPCCall(sma, serviceMethod, args, reply) } diff --git a/agents/diamagent.go b/agents/diamagent.go index 9418b51a7..dd232b110 100644 --- a/agents/diamagent.go +++ b/agents/diamagent.go @@ -24,6 +24,7 @@ import ( "strings" "sync" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/sessions" @@ -432,8 +433,8 @@ func (da *DiameterAgent) processRequest(reqProcessor *config.RequestProcessor, return true, nil } -// rpcclient.ClientConnector interface -func (da *DiameterAgent) Call(serviceMethod string, args interface{}, reply interface{}) error { +// birpc.ClientConnector interface +func (da *DiameterAgent) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.RPCCall(da, serviceMethod, args, reply) } diff --git a/agents/diamagent_test.go b/agents/diamagent_test.go index c49ed241c..b4812c216 100644 --- a/agents/diamagent_test.go +++ b/agents/diamagent_test.go @@ -22,6 +22,8 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -35,22 +37,22 @@ func TestDAsSessionSClientIface(t *testing.T) { } type testMockSessionConn struct { - calls map[string]func(arg interface{}, rply interface{}) error + calls map[string]func(ctx *context.Context, arg interface{}, rply interface{}) error } -func (s *testMockSessionConn) Call(method string, arg interface{}, rply interface{}) error { +func (s *testMockSessionConn) Call(ctx *context.Context, method string, arg interface{}, rply interface{}) error { if call, has := s.calls[method]; !has { return rpcclient.ErrUnsupporteServiceMethod } else { - return call(arg, rply) + return call(ctx, arg, rply) } } -func (s *testMockSessionConn) CallBiRPC(_ rpcclient.ClientConnector, method string, arg interface{}, rply interface{}) error { +func (s *testMockSessionConn) CallBiRPC(_ birpc.ClientConnector, method string, arg interface{}, rply interface{}) error { if call, has := s.calls[method]; !has { return rpcclient.ErrUnsupporteServiceMethod } else { - return call(arg, rply) + return call(context.TODO(), arg, rply) } } @@ -119,11 +121,11 @@ func TestProcessRequest(t *testing.T) { utils.MetaCmd: utils.NewNMData("cmdR"), } - sS := &testMockSessionConn{calls: map[string]func(arg interface{}, rply interface{}) error{ - utils.SessionSv1RegisterInternalBiJSONConn: func(arg interface{}, rply interface{}) error { + sS := &testMockSessionConn{calls: map[string]func(ctx *context.Context, arg interface{}, rply interface{}) error{ + utils.SessionSv1RegisterInternalBiJSONConn: func(ctx *context.Context, arg interface{}, rply interface{}) error { return nil }, - utils.SessionSv1AuthorizeEvent: func(arg interface{}, rply interface{}) error { + utils.SessionSv1AuthorizeEvent: func(ctx *context.Context, arg interface{}, rply interface{}) error { var tm *time.Time var id string if arg == nil { @@ -164,7 +166,7 @@ func TestProcessRequest(t *testing.T) { } return nil }, - utils.SessionSv1InitiateSession: func(arg interface{}, rply interface{}) error { + utils.SessionSv1InitiateSession: func(ctx *context.Context, arg interface{}, rply interface{}) error { var tm *time.Time var id string if arg == nil { @@ -228,7 +230,7 @@ func TestProcessRequest(t *testing.T) { } return nil }, - utils.SessionSv1UpdateSession: func(arg interface{}, rply interface{}) error { + utils.SessionSv1UpdateSession: func(ctx *context.Context, arg interface{}, rply interface{}) error { var tm *time.Time var id string if arg == nil { @@ -292,7 +294,7 @@ func TestProcessRequest(t *testing.T) { } return nil }, - utils.SessionSv1ProcessCDR: func(arg interface{}, rply interface{}) error { + utils.SessionSv1ProcessCDR: func(ctx *context.Context, arg interface{}, rply interface{}) error { var tm *time.Time var id string if arg == nil { @@ -330,7 +332,7 @@ func TestProcessRequest(t *testing.T) { *prply = utils.OK return nil }, - utils.SessionSv1TerminateSession: func(arg interface{}, rply interface{}) error { + utils.SessionSv1TerminateSession: func(ctx *context.Context, arg interface{}, rply interface{}) error { var tm *time.Time var id string if arg == nil { @@ -369,7 +371,7 @@ func TestProcessRequest(t *testing.T) { *prply = utils.OK return nil }, - utils.SessionSv1ProcessMessage: func(arg interface{}, rply interface{}) error { + utils.SessionSv1ProcessMessage: func(ctx *context.Context, arg interface{}, rply interface{}) error { var tm *time.Time var id string if arg == nil { @@ -439,9 +441,9 @@ func TestProcessRequest(t *testing.T) { reqProcessor.Tenant, config.CgrConfig().GeneralCfg().DefaultTenant, config.CgrConfig().GeneralCfg().DefaultTimezone, filters, nil, nil) - internalSessionSChan := make(chan rpcclient.ClientConnector, 1) + internalSessionSChan := make(chan birpc.ClientConnector, 1) internalSessionSChan <- sS - connMgr := engine.NewConnManager(config.CgrConfig(), map[string]chan rpcclient.ClientConnector{ + connMgr := engine.NewConnManager(config.CgrConfig(), map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaSessionS): internalSessionSChan, }) da := &DiameterAgent{ diff --git a/agents/fsagent.go b/agents/fsagent.go index eebe30ca8..63678d94f 100644 --- a/agents/fsagent.go +++ b/agents/fsagent.go @@ -24,6 +24,7 @@ import ( "strings" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/sessions" @@ -371,8 +372,8 @@ func (sm *FSsessions) Shutdown() (err error) { return } -// rpcclient.ClientConnector interface -func (sm *FSsessions) Call(serviceMethod string, args interface{}, reply interface{}) error { +// birpc.ClientConnector interface +func (sm *FSsessions) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.RPCCall(sm, serviceMethod, args, reply) } diff --git a/agents/kamagent.go b/agents/kamagent.go index 8925dcdbb..aebffb118 100644 --- a/agents/kamagent.go +++ b/agents/kamagent.go @@ -27,6 +27,7 @@ import ( "strings" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/config" @@ -105,8 +106,8 @@ func (self *KamailioAgent) Shutdown() (err error) { return } -// rpcclient.ClientConnector interface -func (ka *KamailioAgent) Call(serviceMethod string, args interface{}, reply interface{}) error { +// birpc.ClientConnector interface +func (ka *KamailioAgent) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.RPCCall(ka, serviceMethod, args, reply) } diff --git a/apier/v1/analyzer.go b/apier/v1/analyzer.go index 111681506..b0415a9b7 100755 --- a/apier/v1/analyzer.go +++ b/apier/v1/analyzer.go @@ -19,6 +19,7 @@ along with this program. If not, see package v1 import ( + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/analyzers" "github.com/cgrates/cgrates/utils" ) @@ -33,8 +34,8 @@ type AnalyzerSv1 struct { aS *analyzers.AnalyzerService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (aSv1 *AnalyzerSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (aSv1 *AnalyzerSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(aSv1, serviceMethod, args, reply) } diff --git a/apier/v1/apier.go b/apier/v1/apier.go index b46e22f12..c2ac7bb01 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -27,6 +27,7 @@ import ( "strings" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/guardian" @@ -52,8 +53,8 @@ type APIerSv1 struct { StorDBChan chan engine.StorDB } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (apiv1 *APIerSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (apiv1 *APIerSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(apiv1, serviceMethod, args, reply) } diff --git a/apier/v1/attributes.go b/apier/v1/attributes.go index 2c920c0a9..d1d6e526a 100644 --- a/apier/v1/attributes.go +++ b/apier/v1/attributes.go @@ -21,6 +21,7 @@ package v1 import ( "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -136,8 +137,8 @@ type AttributeSv1 struct { attrS *engine.AttributeService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (alSv1 *AttributeSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (alSv1 *AttributeSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(alSv1, serviceMethod, args, reply) } diff --git a/apier/v1/caches.go b/apier/v1/caches.go index 48e74fa1f..18993ec6e 100644 --- a/apier/v1/caches.go +++ b/apier/v1/caches.go @@ -115,7 +115,7 @@ func (chSv1 *CacheSv1) Ping(ign *utils.CGREventWithArgDispatcher, reply *string) return nil } -// Call implements rpcclient.ClientConnector interface for internal RPC +// Call implements birpc.ClientConnector interface for internal RPC func (chSv1 *CacheSv1) Call(serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(chSv1, serviceMethod, args, reply) diff --git a/apier/v1/chargers.go b/apier/v1/chargers.go index a5cfc33d1..372627931 100644 --- a/apier/v1/chargers.go +++ b/apier/v1/chargers.go @@ -21,6 +21,7 @@ package v1 import ( "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -122,8 +123,8 @@ type ChargerSv1 struct { cS *engine.ChargerService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (cSv1 *ChargerSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (cSv1 *ChargerSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(cSv1, serviceMethod, args, reply) } diff --git a/apier/v1/config.go b/apier/v1/config.go index f13c70824..21760dc88 100644 --- a/apier/v1/config.go +++ b/apier/v1/config.go @@ -19,6 +19,7 @@ along with this program. If not, see package v1 import ( + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" ) @@ -48,8 +49,8 @@ func (cSv1 *ConfigSv1) ReloadConfigFromJSON(args *config.JSONReloadWithArgDispat return cSv1.cfg.V1ReloadConfigFromJSON(args, reply) } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (cSv1 *ConfigSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (cSv1 *ConfigSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(cSv1, serviceMethod, args, reply) } diff --git a/apier/v1/core.go b/apier/v1/core.go index 88cbbe096..92e3f20d0 100644 --- a/apier/v1/core.go +++ b/apier/v1/core.go @@ -21,6 +21,7 @@ package v1 import ( "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -34,8 +35,8 @@ type CoreSv1 struct { cS *engine.CoreService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (cS *CoreSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (cS *CoreSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(cS, serviceMethod, args, reply) } diff --git a/apier/v1/guardian.go b/apier/v1/guardian.go index 9404372f6..dc0a8a6d5 100644 --- a/apier/v1/guardian.go +++ b/apier/v1/guardian.go @@ -19,6 +19,7 @@ along with this program. If not, see package v1 import ( + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/dispatchers" "github.com/cgrates/cgrates/guardian" "github.com/cgrates/cgrates/utils" @@ -48,8 +49,8 @@ func (self *GuardianSv1) Ping(ign *utils.CGREventWithArgDispatcher, reply *strin return nil } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (self *GuardianSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (self *GuardianSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(self, serviceMethod, args, reply) } diff --git a/apier/v1/loaders.go b/apier/v1/loaders.go index e3380d121..f1002d5f2 100644 --- a/apier/v1/loaders.go +++ b/apier/v1/loaders.go @@ -19,6 +19,7 @@ along with this program. If not, see package v1 import ( + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/loaders" "github.com/cgrates/cgrates/utils" ) @@ -32,8 +33,8 @@ type LoaderSv1 struct { ldrS *loaders.LoaderService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (ldrSv1 *LoaderSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (ldrSv1 *LoaderSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(ldrSv1, serviceMethod, args, reply) } diff --git a/apier/v1/rals.go b/apier/v1/rals.go index 5e84b483f..017abdace 100644 --- a/apier/v1/rals.go +++ b/apier/v1/rals.go @@ -19,6 +19,7 @@ along with this program. If not, see package v1 import ( + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/dispatchers" "github.com/cgrates/cgrates/engine" @@ -33,8 +34,8 @@ func NewRALsV1() *RALsV1 { type RALsV1 struct { } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (rsv1 *RALsV1) Call(serviceMethod string, args interface{}, reply interface{}) error { +// Call implements birpc.ClientConnector interface for internal RPC +func (rsv1 *RALsV1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(rsv1, serviceMethod, args, reply) } diff --git a/apier/v1/replicator.go b/apier/v1/replicator.go index f943e6cbc..363242a4a 100644 --- a/apier/v1/replicator.go +++ b/apier/v1/replicator.go @@ -32,7 +32,7 @@ type ReplicatorSv1 struct { dm *engine.DataManager } -// Call implements rpcclient.ClientConnector interface for internal RPC +// Call implements birpc.ClientConnector interface for internal RPC func (rplSv1 *ReplicatorSv1) Call(serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(rplSv1, serviceMethod, args, reply) } diff --git a/apier/v1/resourcesv1.go b/apier/v1/resourcesv1.go index b916838bb..8d98b7e9e 100644 --- a/apier/v1/resourcesv1.go +++ b/apier/v1/resourcesv1.go @@ -21,6 +21,7 @@ package v1 import ( "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -34,8 +35,8 @@ type ResourceSv1 struct { rls *engine.ResourceService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (rsv1 *ResourceSv1) Call(serviceMethod string, args interface{}, reply interface{}) error { +// Call implements birpc.ClientConnector interface for internal RPC +func (rsv1 *ResourceSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(rsv1, serviceMethod, args, reply) } diff --git a/apier/v1/schedulers.go b/apier/v1/schedulers.go index 4a60e3e1e..5cd617dda 100644 --- a/apier/v1/schedulers.go +++ b/apier/v1/schedulers.go @@ -19,6 +19,7 @@ along with this program. If not, see package v1 import ( + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" ) @@ -46,8 +47,8 @@ func (schdSv1 *SchedulerSv1) Ping(ign *utils.CGREventWithArgDispatcher, reply *s return nil } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (schdSv1 *SchedulerSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (schdSv1 *SchedulerSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(schdSv1, serviceMethod, args, reply) } diff --git a/apier/v1/servicemanager.go b/apier/v1/servicemanager.go index 88fd3e3a6..7fc42ad88 100644 --- a/apier/v1/servicemanager.go +++ b/apier/v1/servicemanager.go @@ -50,7 +50,7 @@ func (servManager *ServiceManagerV1) Ping(ign *utils.CGREventWithArgDispatcher, return nil } -// Call implements rpcclient.ClientConnector interface for internal RPC +// Call implements birpc.ClientConnector interface for internal RPC func (servManager *ServiceManagerV1) Call(serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(servManager, serviceMethod, args, reply) diff --git a/apier/v1/sessions.go b/apier/v1/sessions.go index f5124f085..f1b153446 100644 --- a/apier/v1/sessions.go +++ b/apier/v1/sessions.go @@ -130,7 +130,7 @@ func (ssv1 *SessionSv1) DeactivateSessions(args []string, reply *string) error { return ssv1.Ss.BiRPCv1DeactivateSessions(nil, args, reply) } -// Call implements rpcclient.ClientConnector interface for internal RPC +// Call implements birpc.ClientConnector interface for internal RPC func (ssv1 *SessionSv1) Call(serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(ssv1, serviceMethod, args, reply) diff --git a/apier/v1/sessionsbirpc.go b/apier/v1/sessionsbirpc.go index 4e41da59b..e66d1f728 100644 --- a/apier/v1/sessionsbirpc.go +++ b/apier/v1/sessionsbirpc.go @@ -21,7 +21,7 @@ package v1 import ( "time" - "github.com/cenkalti/rpc2" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/sessions" "github.com/cgrates/cgrates/utils" ) @@ -58,7 +58,7 @@ func (ssv1 *SessionSv1) Handlers() map[string]interface{} { } } -func (ssv1 *SessionSv1) BiRPCv1AuthorizeEvent(clnt *rpc2.Client, args *sessions.V1AuthorizeArgs, +func (ssv1 *SessionSv1) BiRPCv1AuthorizeEvent(clnt birpc.ClientConnector, args *sessions.V1AuthorizeArgs, rply *sessions.V1AuthorizeReply) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -67,7 +67,7 @@ func (ssv1 *SessionSv1) BiRPCv1AuthorizeEvent(clnt *rpc2.Client, args *sessions. return ssv1.Ss.BiRPCv1AuthorizeEvent(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1AuthorizeEventWithDigest(clnt *rpc2.Client, args *sessions.V1AuthorizeArgs, +func (ssv1 *SessionSv1) BiRPCv1AuthorizeEventWithDigest(clnt birpc.ClientConnector, args *sessions.V1AuthorizeArgs, rply *sessions.V1AuthorizeReplyWithDigest) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -76,7 +76,7 @@ func (ssv1 *SessionSv1) BiRPCv1AuthorizeEventWithDigest(clnt *rpc2.Client, args return ssv1.Ss.BiRPCv1AuthorizeEventWithDigest(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1InitiateSession(clnt *rpc2.Client, args *sessions.V1InitSessionArgs, +func (ssv1 *SessionSv1) BiRPCv1InitiateSession(clnt birpc.ClientConnector, args *sessions.V1InitSessionArgs, rply *sessions.V1InitSessionReply) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -85,7 +85,7 @@ func (ssv1 *SessionSv1) BiRPCv1InitiateSession(clnt *rpc2.Client, args *sessions return ssv1.Ss.BiRPCv1InitiateSession(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1InitiateSessionWithDigest(clnt *rpc2.Client, args *sessions.V1InitSessionArgs, +func (ssv1 *SessionSv1) BiRPCv1InitiateSessionWithDigest(clnt birpc.ClientConnector, args *sessions.V1InitSessionArgs, rply *sessions.V1InitReplyWithDigest) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -94,7 +94,7 @@ func (ssv1 *SessionSv1) BiRPCv1InitiateSessionWithDigest(clnt *rpc2.Client, args return ssv1.Ss.BiRPCv1InitiateSessionWithDigest(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1UpdateSession(clnt *rpc2.Client, args *sessions.V1UpdateSessionArgs, +func (ssv1 *SessionSv1) BiRPCv1UpdateSession(clnt birpc.ClientConnector, args *sessions.V1UpdateSessionArgs, rply *sessions.V1UpdateSessionReply) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -103,7 +103,7 @@ func (ssv1 *SessionSv1) BiRPCv1UpdateSession(clnt *rpc2.Client, args *sessions.V return ssv1.Ss.BiRPCv1UpdateSession(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1SyncSessions(clnt *rpc2.Client, args *string, +func (ssv1 *SessionSv1) BiRPCv1SyncSessions(clnt birpc.ClientConnector, args *string, rply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -112,7 +112,7 @@ func (ssv1 *SessionSv1) BiRPCv1SyncSessions(clnt *rpc2.Client, args *string, return ssv1.Ss.BiRPCv1SyncSessions(clnt, "", rply) } -func (ssv1 *SessionSv1) BiRPCv1TerminateSession(clnt *rpc2.Client, args *sessions.V1TerminateSessionArgs, +func (ssv1 *SessionSv1) BiRPCv1TerminateSession(clnt birpc.ClientConnector, args *sessions.V1TerminateSessionArgs, rply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -121,7 +121,7 @@ func (ssv1 *SessionSv1) BiRPCv1TerminateSession(clnt *rpc2.Client, args *session return ssv1.Ss.BiRPCv1TerminateSession(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1ProcessCDR(clnt *rpc2.Client, cgrEv *utils.CGREventWithArgDispatcher, +func (ssv1 *SessionSv1) BiRPCv1ProcessCDR(clnt birpc.ClientConnector, cgrEv *utils.CGREventWithArgDispatcher, rply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -130,7 +130,7 @@ func (ssv1 *SessionSv1) BiRPCv1ProcessCDR(clnt *rpc2.Client, cgrEv *utils.CGREve return ssv1.Ss.BiRPCv1ProcessCDR(clnt, cgrEv, rply) } -func (ssv1 *SessionSv1) BiRPCv1ProcessMessage(clnt *rpc2.Client, args *sessions.V1ProcessMessageArgs, +func (ssv1 *SessionSv1) BiRPCv1ProcessMessage(clnt birpc.ClientConnector, args *sessions.V1ProcessMessageArgs, rply *sessions.V1ProcessMessageReply) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -139,7 +139,7 @@ func (ssv1 *SessionSv1) BiRPCv1ProcessMessage(clnt *rpc2.Client, args *sessions. return ssv1.Ss.BiRPCv1ProcessMessage(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1ProcessEvent(clnt *rpc2.Client, args *sessions.V1ProcessEventArgs, +func (ssv1 *SessionSv1) BiRPCv1ProcessEvent(clnt birpc.ClientConnector, args *sessions.V1ProcessEventArgs, rply *sessions.V1ProcessEventReply) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -148,7 +148,7 @@ func (ssv1 *SessionSv1) BiRPCv1ProcessEvent(clnt *rpc2.Client, args *sessions.V1 return ssv1.Ss.BiRPCv1ProcessEvent(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1GetActiveSessions(clnt *rpc2.Client, args *utils.SessionFilter, +func (ssv1 *SessionSv1) BiRPCv1GetActiveSessions(clnt birpc.ClientConnector, args *utils.SessionFilter, rply *[]*sessions.ExternalSession) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -157,7 +157,7 @@ func (ssv1 *SessionSv1) BiRPCv1GetActiveSessions(clnt *rpc2.Client, args *utils. return ssv1.Ss.BiRPCv1GetActiveSessions(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1GetActiveSessionsCount(clnt *rpc2.Client, args *utils.SessionFilter, +func (ssv1 *SessionSv1) BiRPCv1GetActiveSessionsCount(clnt birpc.ClientConnector, args *utils.SessionFilter, rply *int) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -166,7 +166,7 @@ func (ssv1 *SessionSv1) BiRPCv1GetActiveSessionsCount(clnt *rpc2.Client, args *u return ssv1.Ss.BiRPCv1GetActiveSessionsCount(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1GetPassiveSessions(clnt *rpc2.Client, args *utils.SessionFilter, +func (ssv1 *SessionSv1) BiRPCv1GetPassiveSessions(clnt birpc.ClientConnector, args *utils.SessionFilter, rply *[]*sessions.ExternalSession) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -175,7 +175,7 @@ func (ssv1 *SessionSv1) BiRPCv1GetPassiveSessions(clnt *rpc2.Client, args *utils return ssv1.Ss.BiRPCv1GetPassiveSessions(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1GetPassiveSessionsCount(clnt *rpc2.Client, args *utils.SessionFilter, +func (ssv1 *SessionSv1) BiRPCv1GetPassiveSessionsCount(clnt birpc.ClientConnector, args *utils.SessionFilter, rply *int) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -184,7 +184,7 @@ func (ssv1 *SessionSv1) BiRPCv1GetPassiveSessionsCount(clnt *rpc2.Client, args * return ssv1.Ss.BiRPCv1GetPassiveSessionsCount(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1ForceDisconnect(clnt *rpc2.Client, args *utils.SessionFilter, +func (ssv1 *SessionSv1) BiRPCv1ForceDisconnect(clnt birpc.ClientConnector, args *utils.SessionFilter, rply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -193,7 +193,7 @@ func (ssv1 *SessionSv1) BiRPCv1ForceDisconnect(clnt *rpc2.Client, args *utils.Se return ssv1.Ss.BiRPCv1ForceDisconnect(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCv1RegisterInternalBiJSONConn(clnt *rpc2.Client, args string, +func (ssv1 *SessionSv1) BiRPCv1RegisterInternalBiJSONConn(clnt birpc.ClientConnector, args string, rply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -202,7 +202,7 @@ func (ssv1 *SessionSv1) BiRPCv1RegisterInternalBiJSONConn(clnt *rpc2.Client, arg return ssv1.Ss.BiRPCv1RegisterInternalBiJSONConn(clnt, args, rply) } -func (ssv1 *SessionSv1) BiRPCPing(clnt *rpc2.Client, ign *utils.CGREventWithArgDispatcher, +func (ssv1 *SessionSv1) BiRPCPing(clnt birpc.ClientConnector, ign *utils.CGREventWithArgDispatcher, reply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -211,7 +211,7 @@ func (ssv1 *SessionSv1) BiRPCPing(clnt *rpc2.Client, ign *utils.CGREventWithArgD return ssv1.Ping(ign, reply) } -func (ssv1 *SessionSv1) BiRPCv1ReplicateSessions(clnt *rpc2.Client, +func (ssv1 *SessionSv1) BiRPCv1ReplicateSessions(clnt birpc.ClientConnector, args sessions.ArgsReplicateSessions, reply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -220,7 +220,7 @@ func (ssv1 *SessionSv1) BiRPCv1ReplicateSessions(clnt *rpc2.Client, return ssv1.BiRPCv1ReplicateSessions(clnt, args, reply) } -func (ssv1 *SessionSv1) BiRPCv1SetPassiveSession(clnt *rpc2.Client, +func (ssv1 *SessionSv1) BiRPCv1SetPassiveSession(clnt birpc.ClientConnector, args *sessions.Session, reply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -229,7 +229,7 @@ func (ssv1 *SessionSv1) BiRPCv1SetPassiveSession(clnt *rpc2.Client, return ssv1.Ss.BiRPCv1SetPassiveSession(clnt, args, reply) } -func (ssv1 *SessionSv1) BiRPCv1ActivateSessions(clnt *rpc2.Client, +func (ssv1 *SessionSv1) BiRPCv1ActivateSessions(clnt birpc.ClientConnector, args []string, reply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -238,7 +238,7 @@ func (ssv1 *SessionSv1) BiRPCv1ActivateSessions(clnt *rpc2.Client, return ssv1.Ss.BiRPCv1ActivateSessions(clnt, args, reply) } -func (ssv1 *SessionSv1) BiRPCv1DeactivateSessions(clnt *rpc2.Client, +func (ssv1 *SessionSv1) BiRPCv1DeactivateSessions(clnt birpc.ClientConnector, args []string, reply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -247,7 +247,7 @@ func (ssv1 *SessionSv1) BiRPCv1DeactivateSessions(clnt *rpc2.Client, return ssv1.Ss.BiRPCv1DeactivateSessions(clnt, args, reply) } -func (ssv1 *SessionSv1) BiRPCV1Sleep(clnt *rpc2.Client, arg *DurationArgs, +func (ssv1 *SessionSv1) BiRPCV1Sleep(clnt birpc.ClientConnector, arg *DurationArgs, reply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return diff --git a/apier/v1/smgbirpc.go b/apier/v1/smgbirpc.go index f2cb97928..b72aaf222 100644 --- a/apier/v1/smgbirpc.go +++ b/apier/v1/smgbirpc.go @@ -19,7 +19,7 @@ along with this program. If not, see package v1 import ( - "github.com/cenkalti/rpc2" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/utils" ) @@ -35,7 +35,7 @@ func (smgv1 *SMGenericV1) Handlers() map[string]interface{} { } // / Returns MaxUsage (for calls in seconds), -1 for no limit -func (smgv1 *SMGenericV1) BiRPCV1GetMaxUsage(clnt *rpc2.Client, +func (smgv1 *SMGenericV1) BiRPCV1GetMaxUsage(clnt birpc.ClientConnector, ev map[string]interface{}, maxUsage *float64) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -45,7 +45,7 @@ func (smgv1 *SMGenericV1) BiRPCV1GetMaxUsage(clnt *rpc2.Client, } // Called on session start, returns the maximum number of seconds the session can last -func (smgv1 *SMGenericV1) BiRPCV1InitiateSession(clnt *rpc2.Client, +func (smgv1 *SMGenericV1) BiRPCV1InitiateSession(clnt birpc.ClientConnector, ev map[string]interface{}, maxUsage *float64) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -55,7 +55,7 @@ func (smgv1 *SMGenericV1) BiRPCV1InitiateSession(clnt *rpc2.Client, } // Interim updates, returns remaining duration from the rater -func (smgv1 *SMGenericV1) BiRPCV1UpdateSession(clnt *rpc2.Client, +func (smgv1 *SMGenericV1) BiRPCV1UpdateSession(clnt birpc.ClientConnector, ev map[string]interface{}, maxUsage *float64) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -65,7 +65,7 @@ func (smgv1 *SMGenericV1) BiRPCV1UpdateSession(clnt *rpc2.Client, } // Called on session end, should stop debit loop -func (smgv1 *SMGenericV1) BiRPCV1TerminateSession(clnt *rpc2.Client, +func (smgv1 *SMGenericV1) BiRPCV1TerminateSession(clnt birpc.ClientConnector, ev map[string]interface{}, reply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return @@ -75,7 +75,7 @@ func (smgv1 *SMGenericV1) BiRPCV1TerminateSession(clnt *rpc2.Client, } // Called on session end, should send the CDR to CDRS -func (smgv1 *SMGenericV1) BiRPCV1ProcessCDR(clnt *rpc2.Client, +func (smgv1 *SMGenericV1) BiRPCV1ProcessCDR(clnt birpc.ClientConnector, ev map[string]interface{}, reply *string) (err error) { if err = utils.ConReqs.Allocate(); err != nil { return diff --git a/apier/v1/stats.go b/apier/v1/stats.go index f04497440..3717cace2 100644 --- a/apier/v1/stats.go +++ b/apier/v1/stats.go @@ -21,6 +21,7 @@ package v1 import ( "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -158,8 +159,8 @@ type StatSv1 struct { sS *engine.StatService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (stsv1 *StatSv1) Call(serviceMethod string, args interface{}, reply interface{}) error { +// Call implements birpc.ClientConnector interface for internal RPC +func (stsv1 *StatSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(stsv1, serviceMethod, args, reply) } diff --git a/apier/v1/suppliers.go b/apier/v1/suppliers.go index 89d0ff21b..22b4216d1 100644 --- a/apier/v1/suppliers.go +++ b/apier/v1/suppliers.go @@ -21,6 +21,7 @@ package v1 import ( "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -121,8 +122,8 @@ type SupplierSv1 struct { splS *engine.SupplierService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (splv1 *SupplierSv1) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (splv1 *SupplierSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(splv1, serviceMethod, args, reply) } diff --git a/apier/v1/thresholds.go b/apier/v1/thresholds.go index 553c3eb13..1b3bd872d 100644 --- a/apier/v1/thresholds.go +++ b/apier/v1/thresholds.go @@ -21,6 +21,7 @@ package v1 import ( "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -35,8 +36,8 @@ type ThresholdSv1 struct { tS *engine.ThresholdService } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (tSv1 *ThresholdSv1) Call(serviceMethod string, args interface{}, reply interface{}) error { +// Call implements birpc.ClientConnector interface for internal RPC +func (tSv1 *ThresholdSv1) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(tSv1, serviceMethod, args, reply) } diff --git a/apier/v2/apier.go b/apier/v2/apier.go index 0a808a0ac..87b99a178 100644 --- a/apier/v2/apier.go +++ b/apier/v2/apier.go @@ -27,6 +27,7 @@ import ( "strings" "time" + "github.com/cgrates/birpc/context" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" @@ -38,8 +39,8 @@ type APIerSv2 struct { v1.APIerSv1 } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (apiv2 *APIerSv2) Call(serviceMethod string, +// Call implements birpc.ClientConnector interface for internal RPC +func (apiv2 *APIerSv2) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(apiv2, serviceMethod, args, reply) } diff --git a/cmd/cgr-console/cgr-console.go b/cmd/cgr-console/cgr-console.go index c07dc4807..1a379fe77 100644 --- a/cmd/cgr-console/cgr-console.go +++ b/cmd/cgr-console/cgr-console.go @@ -28,6 +28,7 @@ import ( "strings" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/console" "github.com/cgrates/cgrates/utils" "github.com/cgrates/rpcclient" @@ -106,7 +107,7 @@ func executeCommand(command string) { param = param.(*console.StringMapWrapper).Items } - if rpcErr := client.Call(cmd.RpcMethod(), param, res); rpcErr != nil { + if rpcErr := client.Call(context.TODO(), cmd.RpcMethod(), param, res); rpcErr != nil { fmt.Println("Error executing command: " + rpcErr.Error()) } else { fmt.Println(cmd.GetFormatedResult(res)) @@ -129,8 +130,8 @@ func main() { return } var err error - client, err = rpcclient.NewRPCClient(utils.TCP, *server, *tls, *keyPath, *certificatePath, *caPath, 3, 3, - time.Duration(1*time.Second), time.Duration(*replyTimeOut)*time.Second, *rpcEncoding, nil, false) + client, err = rpcclient.NewRPCClient(context.TODO(), utils.TCP, *server, *tls, *keyPath, *certificatePath, *caPath, 3, 3, + 0, utils.FibDuration, time.Second, time.Duration(*replyTimeOut)*time.Second, *rpcEncoding, nil, false, nil) if err != nil { cgrConsoleFlags.PrintDefaults() log.Fatal("Could not connect to server " + *server) diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index d1aae39be..02f8ec264 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -31,13 +31,13 @@ import ( "syscall" "time" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/services" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) var ( @@ -68,7 +68,7 @@ func startFilterService(filterSChan chan *engine.FilterS, cacheS *engine.CacheS, } // initCacheS inits the CacheS and starts precaching as well as populating internal channel for RPC conns -func initCacheS(internalCacheSChan chan rpcclient.ClientConnector, +func initCacheS(internalCacheSChan chan birpc.ClientConnector, server *utils.Server, dm *engine.DataManager, exitChan chan bool) (chS *engine.CacheS) { chS = engine.NewCacheS(cfg, dm) go func() { @@ -86,7 +86,7 @@ func initCacheS(internalCacheSChan chan rpcclient.ClientConnector, return } -func initGuardianSv1(internalGuardianSChan chan rpcclient.ClientConnector, server *utils.Server) { +func initGuardianSv1(internalGuardianSChan chan birpc.ClientConnector, server *utils.Server) { grdSv1 := v1.NewGuardianSv1() if !cfg.DispatcherSCfg().Enabled { server.RpcRegister(grdSv1) @@ -94,7 +94,7 @@ func initGuardianSv1(internalGuardianSChan chan rpcclient.ClientConnector, serve internalGuardianSChan <- grdSv1 } -func initCoreSv1(internalCoreSv1Chan chan rpcclient.ClientConnector, server *utils.Server) { +func initCoreSv1(internalCoreSv1Chan chan birpc.ClientConnector, server *utils.Server) { cSv1 := v1.NewCoreSv1(engine.NewCoreService()) if !cfg.DispatcherSCfg().Enabled { server.RpcRegister(cSv1) @@ -102,7 +102,7 @@ func initCoreSv1(internalCoreSv1Chan chan rpcclient.ClientConnector, server *uti internalCoreSv1Chan <- cSv1 } -func initServiceManagerV1(internalServiceManagerChan chan rpcclient.ClientConnector, +func initServiceManagerV1(internalServiceManagerChan chan birpc.ClientConnector, srvMngr *servmanager.ServiceManager, server *utils.Server) { if !cfg.DispatcherSCfg().Enabled { server.RpcRegister(v1.NewServiceManagerV1(srvMngr)) @@ -114,7 +114,7 @@ func startRpc(server *utils.Server, internalRaterChan, internalCdrSChan, internalRsChan, internalStatSChan, internalAttrSChan, internalChargerSChan, internalThdSChan, internalSuplSChan, internalSMGChan, internalAnalyzerSChan, internalDispatcherSChan, - internalLoaderSChan, internalRALsv1Chan, internalCacheSChan chan rpcclient.ClientConnector, + internalLoaderSChan, internalRALsv1Chan, internalCacheSChan chan birpc.ClientConnector, exitChan chan bool) { if !cfg.DispatcherSCfg().Enabled { select { // Any of the rpc methods will unlock listening to rpc requests @@ -238,7 +238,7 @@ func initLogger(cfg *config.CGRConfig) error { return nil } -func initConfigSv1(internalConfigChan chan rpcclient.ClientConnector, +func initConfigSv1(internalConfigChan chan birpc.ClientConnector, server *utils.Server) { cfgSv1 := v1.NewConfigSv1(cfg) if !cfg.DispatcherSCfg().Enabled { @@ -392,31 +392,31 @@ func main() { cfg.LazySanityCheck() // init the channel here because we need to pass them to connManager - internalServeManagerChan := make(chan rpcclient.ClientConnector, 1) - internalConfigChan := make(chan rpcclient.ClientConnector, 1) - internalCoreSv1Chan := make(chan rpcclient.ClientConnector, 1) - internalCacheSChan := make(chan rpcclient.ClientConnector, 1) - internalGuardianSChan := make(chan rpcclient.ClientConnector, 1) - internalAnalyzerSChan := make(chan rpcclient.ClientConnector, 1) - internalCDRServerChan := make(chan rpcclient.ClientConnector, 1) - internalAttributeSChan := make(chan rpcclient.ClientConnector, 1) - internalDispatcherSChan := make(chan rpcclient.ClientConnector, 1) - internalSessionSChan := make(chan rpcclient.ClientConnector, 1) - internalChargerSChan := make(chan rpcclient.ClientConnector, 1) - internalThresholdSChan := make(chan rpcclient.ClientConnector, 1) - internalStatSChan := make(chan rpcclient.ClientConnector, 1) - internalResourceSChan := make(chan rpcclient.ClientConnector, 1) - internalSupplierSChan := make(chan rpcclient.ClientConnector, 1) - internalSchedulerSChan := make(chan rpcclient.ClientConnector, 1) - internalRALsChan := make(chan rpcclient.ClientConnector, 1) - internalResponderChan := make(chan rpcclient.ClientConnector, 1) - internalAPIerSv1Chan := make(chan rpcclient.ClientConnector, 1) - internalAPIerSv2Chan := make(chan rpcclient.ClientConnector, 1) - internalLoaderSChan := make(chan rpcclient.ClientConnector, 1) + internalServeManagerChan := make(chan birpc.ClientConnector, 1) + internalConfigChan := make(chan birpc.ClientConnector, 1) + internalCoreSv1Chan := make(chan birpc.ClientConnector, 1) + internalCacheSChan := make(chan birpc.ClientConnector, 1) + internalGuardianSChan := make(chan birpc.ClientConnector, 1) + internalAnalyzerSChan := make(chan birpc.ClientConnector, 1) + internalCDRServerChan := make(chan birpc.ClientConnector, 1) + internalAttributeSChan := make(chan birpc.ClientConnector, 1) + internalDispatcherSChan := make(chan birpc.ClientConnector, 1) + internalSessionSChan := make(chan birpc.ClientConnector, 1) + internalChargerSChan := make(chan birpc.ClientConnector, 1) + internalThresholdSChan := make(chan birpc.ClientConnector, 1) + internalStatSChan := make(chan birpc.ClientConnector, 1) + internalResourceSChan := make(chan birpc.ClientConnector, 1) + internalSupplierSChan := make(chan birpc.ClientConnector, 1) + internalSchedulerSChan := make(chan birpc.ClientConnector, 1) + internalRALsChan := make(chan birpc.ClientConnector, 1) + internalResponderChan := make(chan birpc.ClientConnector, 1) + internalAPIerSv1Chan := make(chan birpc.ClientConnector, 1) + internalAPIerSv2Chan := make(chan birpc.ClientConnector, 1) + internalLoaderSChan := make(chan birpc.ClientConnector, 1) // initialize the connManager before creating the DMService // because we need to pass the connection to it - connManager := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connManager := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAnalyzer): internalAnalyzerSChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaApier): internalAPIerSv1Chan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes): internalAttributeSChan, diff --git a/cmd/cgr-tester/cdr_repl/process_cdr.go b/cmd/cgr-tester/cdr_repl/process_cdr.go index 63cd47b26..e8d21ff38 100644 --- a/cmd/cgr-tester/cdr_repl/process_cdr.go +++ b/cmd/cgr-tester/cdr_repl/process_cdr.go @@ -25,6 +25,7 @@ import ( "path" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -43,8 +44,8 @@ func main() { if cdrsMasterCfg, err = config.NewCGRConfigFromPath(cdrsMasterCfgPath); err != nil { log.Fatal("Got config error: ", err.Error()) } - cdrsMasterRpc, err = rpcclient.NewRPCClient(utils.TCP, cdrsMasterCfg.ListenCfg().RPCJSONListen, false, "", "", "", 1, 1, - time.Duration(1*time.Second), time.Duration(2*time.Second), rpcclient.JSONrpc, nil, false) + cdrsMasterRpc, err = rpcclient.NewRPCClient(context.TODO(), utils.TCP, cdrsMasterCfg.ListenCfg().RPCJSONListen, false, "", "", "", 1, 1, + 0, utils.FibDuration, time.Second, 2*time.Second, rpcclient.JSONrpc, nil, false, nil) if err != nil { log.Fatal("Could not connect to rater: ", err.Error()) } @@ -59,7 +60,7 @@ func main() { } var reply string for _, cdr := range cdrs { - if err := cdrsMasterRpc.Call(utils.CdrsV2ProcessCdr, cdr, &reply); err != nil { + if err := cdrsMasterRpc.Call(context.TODO(), utils.CdrsV2ProcessCdr, cdr, &reply); err != nil { log.Fatal("Unexpected error: ", err.Error()) } else if reply != utils.OK { log.Fatal("Unexpected reply received: ", reply) diff --git a/config/config.go b/config/config.go index 56bf326f4..21a84e573 100755 --- a/config/config.go +++ b/config/config.go @@ -1007,7 +1007,7 @@ func (cfg *CGRConfig) GetReloadChan(sectID string) chan struct{} { return cfg.rldChans[sectID] } -// Call implements rpcclient.ClientConnector interface for internal RPC +// Call implements birpc.ClientConnector interface for internal RPC func (cfg *CGRConfig) Call(serviceMethod string, args interface{}, reply interface{}) error { return utils.APIerRPCCall(cfg, serviceMethod, args, reply) diff --git a/dispatchers/dispatchers.go b/dispatchers/dispatchers.go index 53213e89d..7a474006f 100755 --- a/dispatchers/dispatchers.go +++ b/dispatchers/dispatchers.go @@ -25,6 +25,7 @@ import ( "strings" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -291,8 +292,8 @@ func (dS *DispatcherService) V1Apier(apier interface{}, args *utils.MethodParame } -// Call implements rpcclient.ClientConnector interface for internal RPC -func (dS *DispatcherService) Call(serviceMethod string, // all API fuction must be of type: SubsystemMethod +// Call implements birpc.ClientConnector interface for internal RPC +func (dS *DispatcherService) Call(ctx *context.Context, serviceMethod string, // all API fuction must be of type: SubsystemMethod args interface{}, reply interface{}) error { methodSplit := strings.Split(serviceMethod, ".") if len(methodSplit) != 2 { diff --git a/dispatchers/dispatchers_test.go b/dispatchers/dispatchers_test.go index 4d037acb1..e3839072d 100644 --- a/dispatchers/dispatchers_test.go +++ b/dispatchers/dispatchers_test.go @@ -21,6 +21,7 @@ package dispatchers import ( "testing" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" "github.com/cgrates/rpcclient" ) @@ -33,7 +34,7 @@ func (dS *DispatcherService) DispatcherServicePing(ev *utils.CGREvent, reply *st func TestDispatcherCall1(t *testing.T) { dS := &DispatcherService{} var reply string - if err := dS.Call(utils.DispatcherServicePing, &utils.CGREvent{}, &reply); err != nil { + if err := dS.Call(context.Background(), utils.DispatcherServicePing, &utils.CGREvent{}, &reply); err != nil { t.Error(err) } else if reply != utils.Pong { t.Errorf("Expected: %s , received: %s", utils.Pong, reply) @@ -43,10 +44,10 @@ func TestDispatcherCall1(t *testing.T) { func TestDispatcherCall2(t *testing.T) { dS := &DispatcherService{} var reply string - if err := dS.Call("DispatcherServicePing", &utils.CGREvent{}, &reply); err == nil || err.Error() != rpcclient.ErrUnsupporteServiceMethod.Error() { + if err := dS.Call(context.Background(), "DispatcherServicePing", &utils.CGREvent{}, &reply); err == nil || err.Error() != rpcclient.ErrUnsupporteServiceMethod.Error() { t.Error(err) } - if err := dS.Call("DispatcherService.Pong", &utils.CGREvent{}, &reply); err == nil || err.Error() != rpcclient.ErrUnsupporteServiceMethod.Error() { + if err := dS.Call(context.Background(), "DispatcherService.Pong", &utils.CGREvent{}, &reply); err == nil || err.Error() != rpcclient.ErrUnsupporteServiceMethod.Error() { t.Error(err) } } diff --git a/engine/action.go b/engine/action.go index e8b4ee185..738cc3deb 100644 --- a/engine/action.go +++ b/engine/action.go @@ -32,6 +32,8 @@ import ( "strings" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/guardian" "github.com/cgrates/cgrates/utils" @@ -767,16 +769,16 @@ func cgrRPCAction(ub *Account, a *Action, acs Actions, extraData interface{}) er if err != nil { return err } - var client rpcclient.ClientConnector + var client birpc.ClientConnector if req.Address != utils.MetaInternal { - if client, err = rpcclient.NewRPCClient(utils.TCP, req.Address, false, "", "", "", - req.Attempts, 0, config.CgrConfig().GeneralCfg().ConnectTimeout, + if client, err = rpcclient.NewRPCClient(context.TODO(), utils.TCP, req.Address, false, "", "", "", + req.Attempts, 0, 0, utils.FibDuration, config.CgrConfig().GeneralCfg().ConnectTimeout, config.CgrConfig().GeneralCfg().ReplyTimeout, req.Transport, - nil, false); err != nil { + nil, false, nil); err != nil { return err } } else { - client = params.Object.(rpcclient.ClientConnector) + client = params.Object.(birpc.ClientConnector) } in, out := params.InParam, params.OutParam //utils.Logger.Info("Params: " + utils.ToJSON(req.Params)) @@ -792,12 +794,12 @@ func cgrRPCAction(ub *Account, a *Action, acs Actions, extraData interface{}) er } utils.Logger.Info(fmt.Sprintf("<*cgr_rpc> calling: %s with: %s and result %v", req.Method, utils.ToJSON(in), out)) if !req.Async { - err = client.Call(req.Method, in, out) + err = client.Call(context.TODO(), req.Method, in, out) utils.Logger.Info(fmt.Sprintf("<*cgr_rpc> result: %s err: %v", utils.ToJSON(out), err)) return err } go func() { - err := client.Call(req.Method, in, out) + err := client.Call(context.TODO(), req.Method, in, out) utils.Logger.Info(fmt.Sprintf("<*cgr_rpc> result: %s err: %v", utils.ToJSON(out), err)) }() return nil diff --git a/engine/balances_test.go b/engine/balances_test.go index a7828b8bc..63742854b 100644 --- a/engine/balances_test.go +++ b/engine/balances_test.go @@ -21,9 +21,10 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestBalanceSortPrecision(t *testing.T) { @@ -307,15 +308,15 @@ func TestBalancesSaveDirtyBalances(t *testing.T) { dm := NewDataManager(db, cfg.CacheCfg(), nil) cfg.RalsCfg().ThresholdSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds)} - clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn := make(chan birpc.ClientConnector, 1) clientConn <- &ccMock{ - calls: map[string]func(args interface{}, reply interface{}) error{ - utils.ThresholdSv1ProcessEvent: func(args, reply interface{}) error { + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.ThresholdSv1ProcessEvent: func(ctx *context.Context, args, reply interface{}) error { return nil }, }, } - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds): clientConn, }) acc := &Account{ diff --git a/engine/caches.go b/engine/caches.go index 081820fb2..2ec1da573 100644 --- a/engine/caches.go +++ b/engine/caches.go @@ -25,6 +25,7 @@ import ( "sync" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" "github.com/cgrates/ltcache" @@ -120,7 +121,7 @@ func (chS *CacheS) Precache() (err error) { // APIs start here // Call gives the ability of CacheS to be passed as internal RPC -func (chS *CacheS) Call(serviceMethod string, args interface{}, reply interface{}) error { +func (chS *CacheS) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.RPCCall(chS, serviceMethod, args, reply) } diff --git a/engine/cdrecsv_test.go b/engine/cdrecsv_test.go index 8167c214c..cbd144426 100644 --- a/engine/cdrecsv_test.go +++ b/engine/cdrecsv_test.go @@ -24,9 +24,10 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestCsvCdrWriter(t *testing.T) { @@ -547,14 +548,14 @@ func TestCsvCdrWriterWithAttributeContext(t *testing.T) { ExtraFields: map[string]string{"extra1": "val_extra1", "extra2": "val_extra2", "extra3": "val_extra3"}, } - clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn := make(chan birpc.ClientConnector, 1) cdrEv := storedCdr1.AsCGREvent() cdrEv.Event[utils.Account] = "1002" cdrEv.Event[utils.Subject] = "1002" cdrEv.Event[utils.Destination] = "1004" clientConn <- &ccMock{ - calls: map[string]func(args interface{}, reply interface{}) error{ - utils.AttributeSv1ProcessEvent: func(args, reply interface{}) error { + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.AttributeSv1ProcessEvent: func(ctx *context.Context, args, reply interface{}) error { rpl := AttrSProcessEventReply{ CGREvent: cdrEv, AlteredFields: []string{utils.Account, utils.Subject, utils.Destination}, @@ -564,7 +565,7 @@ func TestCsvCdrWriterWithAttributeContext(t *testing.T) { }, }, } - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ "con1": clientConn, }, ) diff --git a/engine/cdrs.go b/engine/cdrs.go index 2e301a1d0..a6d10b2e0 100644 --- a/engine/cdrs.go +++ b/engine/cdrs.go @@ -26,6 +26,7 @@ import ( "strings" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/guardian" "github.com/cgrates/cgrates/utils" @@ -593,8 +594,8 @@ func (cdrS *CDRServer) processEvents(evs []*utils.CGREventWithArgDispatcher, return } -// Call implements the rpcclient.ClientConnector interface -func (cdrS *CDRServer) Call(serviceMethod string, args interface{}, reply interface{}) error { +// Call implements the birpc.ClientConnector interface +func (cdrS *CDRServer) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { parts := strings.Split(serviceMethod, ".") if len(parts) != 2 { return rpcclient.ErrUnsupporteServiceMethod diff --git a/engine/cdrs_test.go b/engine/cdrs_test.go index 7de1f7cfa..fbf0ac801 100644 --- a/engine/cdrs_test.go +++ b/engine/cdrs_test.go @@ -23,16 +23,17 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/guardian" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) -type clMock func(_ string, _ interface{}, _ interface{}) error +type clMock func(_ *context.Context, _ string, _ interface{}, _ interface{}) error -func (c clMock) Call(m string, a interface{}, r interface{}) error { - return c(m, a, r) +func (c clMock) Call(ctx *context.Context, m string, a interface{}, r interface{}) error { + return c(ctx, m, a, r) } func TestCDRSV1ProcessCDRNoTenant(t *testing.T) { @@ -41,7 +42,7 @@ func TestCDRSV1ProcessCDRNoTenant(t *testing.T) { t.Error(err) } cfg.CdrsCfg().AttributeSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*AttrSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -71,9 +72,9 @@ func TestCDRSV1ProcessCDRNoTenant(t *testing.T) { } return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes): chanClnt, }) db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -115,7 +116,7 @@ func TestCDRSV1ProcessEventNoTenant(t *testing.T) { t.Error(err) } cfg.CdrsCfg().ChargerSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*[]*ChrgSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -130,9 +131,9 @@ func TestCDRSV1ProcessEventNoTenant(t *testing.T) { *rply = []*ChrgSProcessEventReply{} return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): chanClnt, }) db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -172,7 +173,7 @@ func TestCDRSV1V1ProcessExternalCDRNoTenant(t *testing.T) { t.Error(err) } cfg.CdrsCfg().ChargerSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*[]*ChrgSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -187,9 +188,9 @@ func TestCDRSV1V1ProcessExternalCDRNoTenant(t *testing.T) { *rply = []*ChrgSProcessEventReply{} return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): chanClnt, }) db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) diff --git a/engine/chargers_test.go b/engine/chargers_test.go index 9088580d7..468f26b5a 100755 --- a/engine/chargers_test.go +++ b/engine/chargers_test.go @@ -22,9 +22,10 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) var ( @@ -297,11 +298,11 @@ func TestChargerV1ProcessEvent(t *testing.T) { db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) dm := NewDataManager(db, cfg.CacheCfg(), nil) cfg.ChargerSCfg().AttributeSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)} - clientConn := make(chan rpcclient.ClientConnector, 1) - clientConn <- clMock(func(_ string, _, _ interface{}) error { + clientConn := make(chan birpc.ClientConnector, 1) + clientConn <- clMock(func(_ *context.Context, _ string, _, _ interface{}) error { return nil }) - connMngr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes): clientConn, }) chgS := &ChargerService{ diff --git a/engine/connmanager.go b/engine/connmanager.go index 4e554df72..9d8e20c27 100644 --- a/engine/connmanager.go +++ b/engine/connmanager.go @@ -21,6 +21,8 @@ package engine import ( "fmt" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" "github.com/cgrates/ltcache" @@ -28,7 +30,7 @@ import ( ) // NewConnManager returns the Connection Manager -func NewConnManager(cfg *config.CGRConfig, rpcInternal map[string]chan rpcclient.ClientConnector) (cM *ConnManager) { +func NewConnManager(cfg *config.CGRConfig, rpcInternal map[string]chan birpc.ClientConnector) (cM *ConnManager) { cM = &ConnManager{ cfg: cfg, rpcInternal: rpcInternal, @@ -41,22 +43,22 @@ func NewConnManager(cfg *config.CGRConfig, rpcInternal map[string]chan rpcclient // ConnManager handle the RPC connections type ConnManager struct { cfg *config.CGRConfig - rpcInternal map[string]chan rpcclient.ClientConnector + rpcInternal map[string]chan birpc.ClientConnector connCache *ltcache.Cache } // getConn is used to retrieve a connection from cache // in case this doesn't exist create it and cache it -func (cM *ConnManager) getConn(connID string, biRPCClient rpcclient.ClientConnector) (conn rpcclient.ClientConnector, err error) { +func (cM *ConnManager) getConn(connID string, biRPCClient birpc.ClientConnector) (conn birpc.ClientConnector, err error) { //try to get the connection from cache if x, ok := Cache.Get(utils.CacheRPCConnections, connID); ok { if x == nil { return nil, utils.ErrNotFound } - return x.(rpcclient.ClientConnector), nil + return x.(birpc.ClientConnector), nil } // in case we don't find in cache create the connection and add this in cache - var intChan chan rpcclient.ClientConnector + var intChan chan birpc.ClientConnector var connCfg *config.RPCConn isBiRPCCLient := false if internalChan, has := cM.rpcInternal[connID]; has { @@ -79,7 +81,7 @@ func (cM *ConnManager) getConn(connID string, biRPCClient rpcclient.ClientConnec intChan <- sSIntConn conn = utils.NewBiRPCInternalClient(sSIntConn.(utils.BiRPCServer)) conn.(*utils.BiRPCInternalClient).SetClientConn(biRPCClient) - if err = conn.Call(utils.SessionSv1RegisterInternalBiJSONConn, + if err = conn.Call(context.TODO(), utils.SessionSv1RegisterInternalBiJSONConn, utils.EmptyString, &rply); err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not register biRPCClient, error: <%s>", utils.SessionS, err.Error())) @@ -89,21 +91,23 @@ func (cM *ConnManager) getConn(connID string, biRPCClient rpcclient.ClientConnec rpcConnCfg := connCfg.Conns[0] // for parallel we need only the first connection var conPool *rpcclient.RPCParallelClientPool if rpcConnCfg.Address == utils.MetaInternal { - conPool, err = rpcclient.NewRPCParallelClientPool("", "", rpcConnCfg.TLS, + conPool, err = rpcclient.NewRPCParallelClientPool(context.TODO(), "", "", rpcConnCfg.TLS, cM.cfg.TlsCfg().ClientKey, cM.cfg.TlsCfg().ClientCerificate, cM.cfg.TlsCfg().CaCertificate, cM.cfg.GeneralCfg().ConnectAttempts, - cM.cfg.GeneralCfg().Reconnects, cM.cfg.GeneralCfg().ConnectTimeout, - cM.cfg.GeneralCfg().ReplyTimeout, rpcclient.InternalRPC, intChan, int64(cM.cfg.GeneralCfg().MaxParallelConns), false) + cM.cfg.GeneralCfg().Reconnects, 0, utils.FibDuration, + cM.cfg.GeneralCfg().ConnectTimeout, cM.cfg.GeneralCfg().ReplyTimeout, + rpcclient.InternalRPC, intChan, int64(cM.cfg.GeneralCfg().MaxParallelConns), false, nil) } else if utils.SliceHasMember([]string{utils.EmptyString, utils.MetaGOB, utils.MetaJSON}, rpcConnCfg.Transport) { codec := rpcclient.GOBrpc if rpcConnCfg.Transport != "" { codec = rpcConnCfg.Transport } - conPool, err = rpcclient.NewRPCParallelClientPool(utils.TCP, rpcConnCfg.Address, rpcConnCfg.TLS, + conPool, err = rpcclient.NewRPCParallelClientPool(context.TODO(), utils.TCP, rpcConnCfg.Address, rpcConnCfg.TLS, cM.cfg.TlsCfg().ClientKey, cM.cfg.TlsCfg().ClientCerificate, cM.cfg.TlsCfg().CaCertificate, cM.cfg.GeneralCfg().ConnectAttempts, - cM.cfg.GeneralCfg().Reconnects, cM.cfg.GeneralCfg().ConnectTimeout, - cM.cfg.GeneralCfg().ReplyTimeout, codec, nil, int64(cM.cfg.GeneralCfg().MaxParallelConns), false) + cM.cfg.GeneralCfg().Reconnects, 0, utils.FibDuration, + cM.cfg.GeneralCfg().ConnectTimeout, cM.cfg.GeneralCfg().ReplyTimeout, + codec, nil, int64(cM.cfg.GeneralCfg().MaxParallelConns), false, nil) } else { err = fmt.Errorf("Unsupported transport: <%s>", rpcConnCfg.Transport) } @@ -130,17 +134,17 @@ func (cM *ConnManager) getConn(connID string, biRPCClient rpcclient.ClientConnec } // Call gets the connection calls the method on it -func (cM *ConnManager) Call(connIDs []string, biRPCClient rpcclient.ClientConnector, +func (cM *ConnManager) Call(connIDs []string, biRPCClient birpc.ClientConnector, method string, arg, reply interface{}) (err error) { if len(connIDs) == 0 { return utils.NewErrMandatoryIeMissing("connIDs") } - var conn rpcclient.ClientConnector + var conn birpc.ClientConnector for _, connID := range connIDs { if conn, err = cM.getConn(connID, biRPCClient); err != nil { continue } - if err = conn.Call(method, arg, reply); utils.IsNetworkError(err) { + if err = conn.Call(context.TODO(), method, arg, reply); utils.IsNetworkError(err) { continue } else { return @@ -163,7 +167,7 @@ func (cM *ConnManager) CallWithConnIDs(connIDs []string, subsHostIDs utils.Strin if subsHostIDs.Size() == 0 { return } - var conn rpcclient.ClientConnector + var conn birpc.ClientConnector for _, connID := range connIDs { // recreate the config with only conns that are needed connCfg := cM.cfg.RPCConns()[connID] @@ -187,7 +191,7 @@ func (cM *ConnManager) CallWithConnIDs(connIDs []string, subsHostIDs utils.Strin if conn, err = cM.getConnWithConfig(connID, newCfg, nil, nil, false); err != nil { continue } - if err = conn.Call(method, arg, reply); !rpcclient.IsNetworkError(err) { + if err = conn.Call(context.TODO(), method, arg, reply); !rpcclient.IsNetworkError(err) { return } } @@ -195,8 +199,8 @@ func (cM *ConnManager) CallWithConnIDs(connIDs []string, subsHostIDs utils.Strin } func (cM *ConnManager) getConnWithConfig(connID string, connCfg *config.RPCConn, - biRPCClient rpcclient.ClientConnector, intChan chan rpcclient.ClientConnector, - isInternalRPC bool) (conn rpcclient.ClientConnector, err error) { + biRPCClient birpc.ClientConnector, intChan chan birpc.ClientConnector, + isInternalRPC bool) (conn birpc.ClientConnector, err error) { switch { case biRPCClient != nil && isInternalRPC: var rply string @@ -204,7 +208,7 @@ func (cM *ConnManager) getConnWithConfig(connID string, connCfg *config.RPCConn, intChan <- sSIntConn conn = utils.NewBiRPCInternalClient(sSIntConn.(utils.BiRPCServer)) conn.(*utils.BiRPCInternalClient).SetClientConn(biRPCClient) - if err = conn.Call(utils.SessionSv1RegisterInternalBiJSONConn, + if err = conn.Call(context.TODO(), utils.SessionSv1RegisterInternalBiJSONConn, utils.EmptyString, &rply); err != nil { utils.Logger.Crit(fmt.Sprintf("<%s> Could not register biRPCClient, error: <%s>", utils.SessionS, err.Error())) @@ -226,11 +230,12 @@ func (cM *ConnManager) getConnWithConfig(connID string, connCfg *config.RPCConn, err = fmt.Errorf("Unsupported transport: <%s>", rpcConnCfg.Transport) return } - if conn, err = rpcclient.NewRPCParallelClientPool(utils.TCP, rpcConnCfg.Address, rpcConnCfg.TLS, + if conn, err = rpcclient.NewRPCParallelClientPool(context.TODO(), utils.TCP, rpcConnCfg.Address, rpcConnCfg.TLS, cM.cfg.TlsCfg().ClientKey, cM.cfg.TlsCfg().ClientCerificate, cM.cfg.TlsCfg().CaCertificate, cM.cfg.GeneralCfg().ConnectAttempts, - cM.cfg.GeneralCfg().Reconnects, cM.cfg.GeneralCfg().ConnectTimeout, - cM.cfg.GeneralCfg().ReplyTimeout, codec, intChan, int64(cM.cfg.GeneralCfg().MaxParallelConns), false); err != nil { + cM.cfg.GeneralCfg().Reconnects, 0, utils.FibDuration, + cM.cfg.GeneralCfg().ConnectTimeout, cM.cfg.GeneralCfg().ReplyTimeout, + codec, intChan, int64(cM.cfg.GeneralCfg().MaxParallelConns), false, nil); err != nil { return } default: diff --git a/engine/datamanager_test.go b/engine/datamanager_test.go index 99326b90a..f584121d3 100644 --- a/engine/datamanager_test.go +++ b/engine/datamanager_test.go @@ -23,9 +23,10 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestDmSetSupplierProfileRpl(t *testing.T) { @@ -37,16 +38,16 @@ func TestDmSetSupplierProfileRpl(t *testing.T) { db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) cfg.DataDbCfg().Items[utils.MetaSupplierProfiles].Replicate = true cfg.DataDbCfg().RplConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} - clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn := make(chan birpc.ClientConnector, 1) clientConn <- &ccMock{ - calls: map[string]func(args interface{}, reply interface{}) error{ - utils.ReplicatorSv1SetSupplierProfile: func(args, reply interface{}) error { + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.ReplicatorSv1SetSupplierProfile: func(ctx *context.Context, args, reply interface{}) error { *reply.(*string) = utils.OK return nil }, }, } - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConn, }) dm := NewDataManager(db, cfg.CacheCfg(), connMgr) @@ -146,15 +147,15 @@ func TestDmMatchFilterIndexFromKey(t *testing.T) { db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) cfg.DataDbCfg().Items[utils.MetaFilterIndexes].Remote = true cfg.DataDbCfg().RmtConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1)} - clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn := make(chan birpc.ClientConnector, 1) clientConn <- &ccMock{ - calls: map[string]func(args interface{}, reply interface{}) error{ - utils.ReplicatorSv1MatchFilterIndex: func(args, reply interface{}) error { + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.ReplicatorSv1MatchFilterIndex: func(ctx *context.Context, args, reply interface{}) error { return nil }, }, } - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConn, }) dm := NewDataManager(db, cfg.CacheCfg(), connMgr) @@ -503,8 +504,8 @@ func TestFilterIndexesRmtRpl(t *testing.T) { "RL2": true, }, } - clientConn := make(chan rpcclient.ClientConnector, 1) - clientConn <- clMock(func(m string, a, r interface{}) error { + clientConn := make(chan birpc.ClientConnector, 1) + clientConn <- clMock(func(ctx *context.Context, m string, a, r interface{}) error { if m == utils.ReplicatorSv1SetFilterIndexes { setFltrIndxArg, concat := a.(*utils.SetFilterIndexesArg) if !concat { @@ -522,7 +523,7 @@ func TestFilterIndexesRmtRpl(t *testing.T) { } return utils.ErrNotImplemented }) - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.ReplicatorSv1): clientConn, }) dm := NewDataManager(db, cfg.CacheCfg(), connMgr) diff --git a/engine/dispatcherprfl.go b/engine/dispatcherprfl.go index 6e59d0a51..c6ce2c4bf 100644 --- a/engine/dispatcherprfl.go +++ b/engine/dispatcherprfl.go @@ -22,6 +22,8 @@ import ( "math/rand" "sort" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" "github.com/cgrates/rpcclient" @@ -130,7 +132,7 @@ type DispatcherHost struct { Tenant string ID string Conns []*config.RemoteHost - rpcConn rpcclient.ClientConnector + rpcConn birpc.ClientConnector } func (dH *DispatcherHost) TenantID() string { @@ -151,5 +153,5 @@ func (dH *DispatcherHost) Call(serviceMethod string, args interface{}, reply int return } } - return dH.rpcConn.Call(serviceMethod, args, reply) + return dH.rpcConn.Call(context.TODO(), serviceMethod, args, reply) } diff --git a/engine/dispatcherprfl_test.go b/engine/dispatcherprfl_test.go index b04b8f443..85ff8f4b8 100644 --- a/engine/dispatcherprfl_test.go +++ b/engine/dispatcherprfl_test.go @@ -21,6 +21,7 @@ import ( "reflect" "testing" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/utils" ) @@ -229,7 +230,7 @@ type testRPCHost struct { reply interface{} } -func (v *testRPCHost) Call(serviceMethod string, args interface{}, reply interface{}) error { +func (v *testRPCHost) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { v.serviceMethod = serviceMethod v.args = args v.reply = reply diff --git a/engine/libengine.go b/engine/libengine.go index ab4145728..164659ad9 100644 --- a/engine/libengine.go +++ b/engine/libengine.go @@ -19,10 +19,15 @@ along with this program. If not, see package engine import ( + "errors" "fmt" + "reflect" "strings" "time" + "unicode" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" "github.com/cgrates/rpcclient" @@ -31,22 +36,24 @@ import ( // NewRPCPool returns a new pool of connection with the given configuration func NewRPCPool(dispatchStrategy string, keyPath, certPath, caPath string, connAttempts, reconnects int, connectTimeout, replyTimeout time.Duration, rpcConnCfgs []*config.RemoteHost, - internalConnChan chan rpcclient.ClientConnector, lazyConnect bool) (*rpcclient.RPCPool, error) { + internalConnChan chan birpc.ClientConnector, lazyConnect bool) (*rpcclient.RPCPool, error) { var rpcClient *rpcclient.RPCClient var err error rpcPool := rpcclient.NewRPCPool(dispatchStrategy, replyTimeout) atLestOneConnected := false // If one connected we don't longer return errors for _, rpcConnCfg := range rpcConnCfgs { if rpcConnCfg.Address == utils.MetaInternal { - rpcClient, err = rpcclient.NewRPCClient("", "", rpcConnCfg.TLS, keyPath, certPath, caPath, connAttempts, - reconnects, connectTimeout, replyTimeout, rpcclient.InternalRPC, internalConnChan, lazyConnect) + rpcClient, err = rpcclient.NewRPCClient(context.TODO(), "", "", rpcConnCfg.TLS, keyPath, certPath, caPath, + connAttempts, reconnects, 0, utils.FibDuration, connectTimeout, replyTimeout, rpcclient.InternalRPC, + internalConnChan, lazyConnect, nil) } else if utils.SliceHasMember([]string{utils.EmptyString, utils.MetaGOB, utils.MetaJSON}, rpcConnCfg.Transport) { codec := rpcclient.GOBrpc if rpcConnCfg.Transport != "" { codec = rpcConnCfg.Transport } - rpcClient, err = rpcclient.NewRPCClient(utils.TCP, rpcConnCfg.Address, rpcConnCfg.TLS, keyPath, certPath, caPath, - connAttempts, reconnects, connectTimeout, replyTimeout, codec, nil, lazyConnect) + rpcClient, err = rpcclient.NewRPCClient(context.TODO(), utils.TCP, rpcConnCfg.Address, rpcConnCfg.TLS, + keyPath, certPath, caPath, connAttempts, reconnects, 0, utils.FibDuration, + connectTimeout, replyTimeout, codec, nil, lazyConnect, nil) } else { return nil, fmt.Errorf("Unsupported transport: <%s>", rpcConnCfg.Transport) } @@ -75,12 +82,11 @@ type RPCClientSet struct { } // AddInternalRPCClient creates and adds to the set a new rpc client using the provided configuration -func (s *RPCClientSet) AddInternalRPCClient(name string, connChan chan rpcclient.ClientConnector) { - rpc, err := rpcclient.NewRPCClient(utils.EmptyString, utils.EmptyString, false, - utils.EmptyString, utils.EmptyString, utils.EmptyString, - config.CgrConfig().GeneralCfg().ConnectAttempts, config.CgrConfig().GeneralCfg().Reconnects, - config.CgrConfig().GeneralCfg().ConnectTimeout, config.CgrConfig().GeneralCfg().ReplyTimeout, - rpcclient.InternalRPC, connChan, true) +func (s *RPCClientSet) AddInternalRPCClient(name string, connChan chan birpc.ClientConnector) { + rpc, err := rpcclient.NewRPCClient(context.TODO(), utils.EmptyString, utils.EmptyString, false, + utils.EmptyString, utils.EmptyString, utils.EmptyString, config.CgrConfig().GeneralCfg().ConnectAttempts, + config.CgrConfig().GeneralCfg().Reconnects, 0, utils.FibDuration, config.CgrConfig().GeneralCfg().ConnectTimeout, + config.CgrConfig().GeneralCfg().ReplyTimeout, rpcclient.InternalRPC, connChan, true, nil) if err != nil { utils.Logger.Err(fmt.Sprintf("<%s> Error adding %s to the set: %s", utils.InternalRPCSet, name, err.Error())) return @@ -89,14 +95,14 @@ func (s *RPCClientSet) AddInternalRPCClient(name string, connChan chan rpcclient } // GetInternalChanel is used when RPCClientSet is passed as internal connection for RPCPool -func (s *RPCClientSet) GetInternalChanel() chan rpcclient.ClientConnector { - connChan := make(chan rpcclient.ClientConnector, 1) +func (s *RPCClientSet) GetInternalChanel() chan birpc.ClientConnector { + connChan := make(chan birpc.ClientConnector, 1) connChan <- s return connChan } -// Call the implementation of the rpcclient.ClientConnector interface -func (s *RPCClientSet) Call(method string, args interface{}, reply interface{}) error { +// Call the implementation of the birpc.ClientConnector interface +func (s *RPCClientSet) Call(ctx *context.Context, method string, args interface{}, reply interface{}) error { methodSplit := strings.Split(method, ".") if len(methodSplit) != 2 { return rpcclient.ErrUnsupporteServiceMethod @@ -105,5 +111,63 @@ func (s *RPCClientSet) Call(method string, args interface{}, reply interface{}) if !has { return rpcclient.ErrUnsupporteServiceMethod } - return conn.Call(method, args, reply) + return conn.Call(context.TODO(), method, args, reply) +} + +func NewServiceWithName(val interface{}, name string, useName bool) (_ IntService, err error) { + var srv *birpc.Service + if srv, err = birpc.NewService(val, name, useName); err != nil { + return + } + srv.Methods["Ping"] = pingM + s := IntService{srv.Name: srv} + for m, v := range srv.Methods { + m = strings.TrimPrefix(m, "BiRPC") + if len(m) < 2 || unicode.ToLower(rune(m[0])) != 'v' { + continue + } + + key := srv.Name + if unicode.IsLower(rune(key[len(key)-1])) { + key += "V" + } else { + key += "v" + } + key += string(m[1]) + srv2, has := s[key] + if !has { + srv2 = new(birpc.Service) + *srv2 = *srv + srv2.Name = key + srv2.Methods = map[string]*birpc.MethodType{"Ping": pingM} + s[key] = srv2 + } + srv2.Methods[m[2:]] = v + } + return s, nil +} + +type IntService map[string]*birpc.Service + +func (s IntService) Call(ctx *context.Context, serviceMethod string, args, reply interface{}) error { + service, has := s[strings.Split(serviceMethod, utils.NestingSep)[0]] + if !has { + return errors.New("rpc: can't find service " + serviceMethod) + } + return service.Call(ctx, serviceMethod, args, reply) +} + +func ping(_ interface{}, _ *context.Context, _ *utils.CGREvent, reply *string) error { + *reply = utils.Pong + return nil +} + +var pingM = &birpc.MethodType{ + Method: reflect.Method{ + Name: "Ping", + Type: reflect.TypeOf(ping), + Func: reflect.ValueOf(ping), + }, + ArgType: reflect.TypeOf(new(utils.CGREvent)), + ReplyType: reflect.TypeOf(new(string)), } diff --git a/engine/libsuppliers_test.go b/engine/libsuppliers_test.go index 9e3096223..893d324d9 100644 --- a/engine/libsuppliers_test.go +++ b/engine/libsuppliers_test.go @@ -22,9 +22,10 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestLibSuppliersSortCost(t *testing.T) { @@ -679,10 +680,10 @@ func TestSortSuppliersSortResourceAscendent(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() cfg.SupplierSCfg().ResourceSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources)} cfg.SupplierSCfg().RALsConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs)} - clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn := make(chan birpc.ClientConnector, 1) clientConn <- &ccMock{ - calls: map[string]func(args interface{}, reply interface{}) error{ - utils.ResourceSv1GetResource: func(args, reply interface{}) error { + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.ResourceSv1GetResource: func(ctx *context.Context, args, reply interface{}) error { res := Resource{ ID: "ResourceSupplier2", Tenant: "cgrates.org", @@ -691,7 +692,7 @@ func TestSortSuppliersSortResourceAscendent(t *testing.T) { *reply.(*Resource) = res return nil }, - utils.ResponderGetCostOnRatingPlans: func(args, reply interface{}) error { + utils.ResponderGetCostOnRatingPlans: func(ctx *context.Context, args, reply interface{}) error { rpl := map[string]interface{}{ utils.Cost: 23.1, } @@ -700,7 +701,7 @@ func TestSortSuppliersSortResourceAscendent(t *testing.T) { }, }, } - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResources): clientConn, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs): clientConn, }) @@ -786,10 +787,10 @@ func TestPopulateSortingDataStatMetrics(t *testing.T) { db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) dm := NewDataManager(db, cfg.CacheCfg(), nil) cfg.SupplierSCfg().StatSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS)} - clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn := make(chan birpc.ClientConnector, 1) clientConn <- &ccMock{ - calls: map[string]func(args interface{}, reply interface{}) error{ - utils.StatSv1GetQueueFloatMetrics: func(args, reply interface{}) error { + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.StatSv1GetQueueFloatMetrics: func(ctx *context.Context, args, reply interface{}) error { rpl := map[string]float64{ "metric1": 22.1, } @@ -798,7 +799,7 @@ func TestPopulateSortingDataStatMetrics(t *testing.T) { }, }, } - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaStatS): clientConn, }) spS, err := NewSupplierService(dm, nil, cfg, connMgr) diff --git a/engine/loader_it_test.go b/engine/loader_it_test.go index 09d71ea76..28b0ab0c3 100644 --- a/engine/loader_it_test.go +++ b/engine/loader_it_test.go @@ -26,9 +26,9 @@ import ( "reflect" "testing" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) var ( @@ -97,9 +97,9 @@ func testLoaderITInitDataDB(t *testing.T) { if err = dbConn.Flush(utils.EmptyString); err != nil { t.Fatal("Error when flushing datadb") } - cacheChan := make(chan rpcclient.ClientConnector, 1) + cacheChan := make(chan birpc.ClientConnector, 1) cacheChan <- NewCacheS(lCfg, dataDbCsv) - connMgr = NewConnManager(lCfg, map[string]chan rpcclient.ClientConnector{ + connMgr = NewConnManager(lCfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCaches): cacheChan, }) } diff --git a/engine/resources_test.go b/engine/resources_test.go index f156f42a5..484e419dd 100644 --- a/engine/resources_test.go +++ b/engine/resources_test.go @@ -23,9 +23,9 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) var ( @@ -818,7 +818,7 @@ func TestResourcesStoreResourceError(t *testing.T) { defer config.SetCgrConfig(dft) db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) - dm := NewDataManager(db, cfg.CacheCfg(), NewConnManager(cfg, make(map[string]chan rpcclient.ClientConnector))) + dm := NewDataManager(db, cfg.CacheCfg(), NewConnManager(cfg, make(map[string]chan birpc.ClientConnector))) rS, _ := NewResourceService(dm, cfg, NewFilterS(cfg, nil, dm), nil) diff --git a/engine/responder.go b/engine/responder.go index 515a68ed7..beb908312 100644 --- a/engine/responder.go +++ b/engine/responder.go @@ -25,6 +25,7 @@ import ( "sync" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/guardian" "github.com/cgrates/cgrates/utils" @@ -355,7 +356,7 @@ func (chSv1 *Responder) Ping(ign *utils.CGREventWithArgDispatcher, reply *string return nil } -func (rs *Responder) Call(serviceMethod string, args interface{}, reply interface{}) error { +func (rs *Responder) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { parts := strings.Split(serviceMethod, ".") if len(parts) != 2 { return utils.ErrNotImplemented diff --git a/engine/stats.go b/engine/stats.go index a57f9ade1..841041022 100644 --- a/engine/stats.go +++ b/engine/stats.go @@ -24,6 +24,7 @@ import ( "sync" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/guardian" "github.com/cgrates/cgrates/utils" @@ -222,9 +223,9 @@ func (sS *StatService) matchingStatQueuesForEvent(args *StatsArgsProcessEvent) ( return } -// Call implements rpcclient.ClientConnector interface for internal RPC +// Call implements birpc.ClientConnector interface for internal RPC // here for cases when passing StatsService as rpccclient.RpcClientConnection -func (ss *StatService) Call(serviceMethod string, args interface{}, reply interface{}) error { +func (ss *StatService) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return utils.RPCCall(ss, serviceMethod, args, reply) } diff --git a/engine/suppliers_test.go b/engine/suppliers_test.go index 84682e5c0..b5b6b3d82 100644 --- a/engine/suppliers_test.go +++ b/engine/suppliers_test.go @@ -22,6 +22,8 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" "github.com/cgrates/rpcclient" @@ -654,14 +656,14 @@ func TestSuppliersMatchWithIndexFalse(t *testing.T) { } type ccMock struct { - calls map[string]func(args interface{}, reply interface{}) error + calls map[string]func(ctx *context.Context, args interface{}, reply interface{}) error } -func (ccM *ccMock) Call(serviceMethod string, args interface{}, reply interface{}) (err error) { +func (ccM *ccMock) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) (err error) { if call, has := ccM.calls[serviceMethod]; !has { return rpcclient.ErrUnsupporteServiceMethod } else { - return call(args, reply) + return call(ctx, args, reply) } } func TestSuppliersV1GetSuppliers(t *testing.T) { @@ -674,17 +676,17 @@ func TestSuppliersV1GetSuppliers(t *testing.T) { cfg.SupplierSCfg().RALsConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs)} data := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) dm := NewDataManager(data, cfg.CacheCfg(), nil) - clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn := make(chan birpc.ClientConnector, 1) clientConn <- &ccMock{ - calls: map[string]func(args interface{}, reply interface{}) error{ - utils.ResponderGetMaxSessionTimeOnAccounts: func(args, reply interface{}) error { + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.ResponderGetMaxSessionTimeOnAccounts: func(ctx *context.Context, args, reply interface{}) error { rpl := map[string]interface{}{ "Cost": 10, } *reply.(*map[string]interface{}) = rpl return nil }, - utils.ResponderGetCostOnRatingPlans: func(args, reply interface{}) error { + utils.ResponderGetCostOnRatingPlans: func(ctx *context.Context, args, reply interface{}) error { rpl := map[string]interface{}{ utils.CapMaxUsage: 1000000000, } @@ -694,7 +696,7 @@ func TestSuppliersV1GetSuppliers(t *testing.T) { }, }, } - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaRALs): clientConn, }) splService, err := NewSupplierService(dm, &FilterS{ @@ -871,16 +873,15 @@ func TestV1GetSuppliersWithAttributeS(t *testing.T) { db := NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) dm := NewDataManager(db, cfg.CacheCfg(), nil) cfg.SupplierSCfg().AttributeSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes)} - clientConn := make(chan rpcclient.ClientConnector, 1) + clientConn := make(chan birpc.ClientConnector, 1) clientConn <- &ccMock{ - calls: map[string]func(args interface{}, reply interface{}) error{ - utils.AttributeSv1ProcessEvent: func(args, reply interface{}) error { - + calls: map[string]func(ctx *context.Context, args interface{}, reply interface{}) error{ + utils.AttributeSv1ProcessEvent: func(ctx *context.Context, args, reply interface{}) error { return utils.ErrNotFound }, }, } - connMgr := NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr := NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaAttributes): clientConn, }) spS, err := NewSupplierService(dm, nil, cfg, connMgr) diff --git a/general_tests/cdrs_onlexp_it_test.go b/general_tests/cdrs_onlexp_it_test.go index cb62bfe9f..73f34fd21 100644 --- a/general_tests/cdrs_onlexp_it_test.go +++ b/general_tests/cdrs_onlexp_it_test.go @@ -22,7 +22,6 @@ along with this program. If not, see package general_tests import ( - "context" "encoding/json" "fmt" "net" @@ -36,6 +35,7 @@ import ( "testing" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -170,8 +170,8 @@ func testCDRsOnExpAMQPQueuesCreation(t *testing.T) { // Connect rpc client to rater func testCDRsOnExpInitMasterRPC(t *testing.T) { var err error - cdrsMasterRpc, err = rpcclient.NewRPCClient(utils.TCP, cdrsMasterCfg.ListenCfg().RPCJSONListen, false, "", "", "", 1, 1, - time.Duration(1*time.Second), time.Duration(2*time.Second), rpcclient.JSONrpc, nil, false) + cdrsMasterRpc, err = rpcclient.NewRPCClient(context.Background(), utils.TCP, cdrsMasterCfg.ListenCfg().RPCJSONListen, false, "", "", "", 1, 1, + 0, utils.FibDuration, time.Second, 2*time.Second, rpcclient.JSONrpc, nil, false, nil) if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } @@ -187,7 +187,7 @@ func testCDRsOnExpLoadDefaultCharger(t *testing.T) { Weight: 20, } var result string - if err := cdrsMasterRpc.Call(utils.APIerSv1SetChargerProfile, chargerProfile, &result); err != nil { + if err := cdrsMasterRpc.Call(context.Background(), utils.APIerSv1SetChargerProfile, chargerProfile, &result); err != nil { t.Error(err) } else if result != utils.OK { t.Error("Unexpected reply returned", result) @@ -224,7 +224,7 @@ func testCDRsOnExpDisableOnlineExport(t *testing.T) { }, } var reply string - if err := cdrsMasterRpc.Call(utils.CDRsV1ProcessEvent, + if err := cdrsMasterRpc.Call(context.Background(), utils.CDRsV1ProcessEvent, &engine.ArgV1ProcessEvent{ Flags: []string{"*export:false"}, CGREvent: *testCdr.AsCGREvent(), @@ -270,22 +270,22 @@ func testCDRsOnExpHttpCdrReplication(t *testing.T) { }, } var reply string - if err := cdrsMasterRpc.Call(utils.CDRsV1ProcessEvent, + if err := cdrsMasterRpc.Call(context.Background(), utils.CDRsV1ProcessEvent, &engine.ArgV1ProcessEvent{CGREvent: *testCdr1.AsCGREvent()}, &reply); err != nil { t.Error("Unexpected error: ", err.Error()) } else if reply != utils.OK { t.Error("Unexpected reply received: ", reply) } time.Sleep(time.Duration(*waitRater) * time.Millisecond) - cdrsSlaveRpc, err := rpcclient.NewRPCClient(utils.TCP, "127.0.0.1:12012", false, "", "", "", 1, 1, - time.Duration(1*time.Second), time.Duration(2*time.Second), rpcclient.JSONrpc, nil, false) + cdrsSlaveRpc, err := rpcclient.NewRPCClient(context.Background(), utils.TCP, "127.0.0.1:12012", false, "", "", "", 1, 1, + 0, utils.FibDuration, time.Second, 2*time.Second, rpcclient.JSONrpc, nil, false, nil) if err != nil { t.Fatal("Could not connect to rater: ", err.Error()) } // ToDo: Fix cdr_http to be compatible with rest of processCdr methods time.Sleep(200 * time.Millisecond) var rcvedCdrs []*engine.ExternalCDR - if err := cdrsSlaveRpc.Call(utils.APIerSv2GetCDRs, + if err := cdrsSlaveRpc.Call(context.Background(), utils.APIerSv2GetCDRs, utils.RPCCDRsFilter{CGRIDs: []string{testCdr1.CGRID}, RunIDs: []string{utils.MetaDefault}}, &rcvedCdrs); err != nil { t.Error("Unexpected error: ", err.Error()) } else if len(rcvedCdrs) != 1 { @@ -401,7 +401,7 @@ func testCDRsOnExpAMQPReplication(t *testing.T) { }, } var reply string - if err := cdrsMasterRpc.Call(utils.CDRsV1ProcessEvent, + if err := cdrsMasterRpc.Call(context.Background(), utils.CDRsV1ProcessEvent, &engine.ArgV1ProcessEvent{ Flags: []string{"*export:true"}, CGREvent: *testCdr.AsCGREvent(), diff --git a/general_tests/rpcclient_it_test.go b/general_tests/rpcclient_it_test.go index 705da9162..44f56b18f 100644 --- a/general_tests/rpcclient_it_test.go +++ b/general_tests/rpcclient_it_test.go @@ -29,6 +29,7 @@ import ( "testing" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/sessions" @@ -119,14 +120,14 @@ func testRPCITLclStartSecondEngine(t *testing.T) { // Connect rpc client to rater func testRPCITLclRpcConnPoolFirst(t *testing.T) { rpcPoolFirst = rpcclient.NewRPCPool(rpcclient.PoolFirst, 0) - rpcRAL1, err = rpcclient.NewRPCClient(utils.TCP, rpcITCfg1.ListenCfg().RPCJSONListen, false, "", "", "", 3, 1, - time.Duration(1*time.Second), time.Duration(2*time.Second), rpcclient.JSONrpc, nil, false) + rpcRAL1, err = rpcclient.NewRPCClient(context.Background(), utils.TCP, rpcITCfg1.ListenCfg().RPCJSONListen, false, "", "", "", 3, 1, + 0, utils.FibDuration, time.Second, time.Duration(2*time.Second), rpcclient.JSONrpc, nil, false, nil) if err == nil { t.Fatal("Should receive cannot connect error here") } rpcPoolFirst.AddClient(rpcRAL1) - rpcRAL2, err = rpcclient.NewRPCClient(utils.TCP, rpcITCfg2.ListenCfg().RPCJSONListen, false, "", "", "", 3, 1, - time.Duration(1*time.Second), time.Duration(2*time.Second), rpcclient.JSONrpc, nil, false) + rpcRAL2, err = rpcclient.NewRPCClient(context.Background(), utils.TCP, rpcITCfg2.ListenCfg().RPCJSONListen, false, "", "", "", 3, 1, + 0, utils.FibDuration, time.Second, 2*time.Second, rpcclient.JSONrpc, nil, false, nil) if err != nil { t.Fatal(err) } @@ -136,12 +137,12 @@ func testRPCITLclRpcConnPoolFirst(t *testing.T) { // Connect rpc client to rater func testRPCITLclStatusSecondEngine(t *testing.T) { var status map[string]interface{} - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance t.Error(err) } else if status[utils.NodeID].(string) != node2 { t.Errorf("Expecting:\n%s\nReceived:\n%s", node2, status[utils.NodeID].(string)) @@ -158,14 +159,14 @@ func testRPCITLclStartFirstEngine(t *testing.T) { // Connect rpc client to rater func testRPCITLclStatusFirstInitial(t *testing.T) { var status map[string]interface{} - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } else if status[utils.NodeID].(string) == node2 { t.Fatalf("Should receive ralID different than second one, got: %s", status[utils.NodeID].(string)) } - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance t.Error(err) } else if status[utils.NodeID].(string) != node1 { t.Errorf("Expecting:\n%s\nReceived:\n%s", node1, status[utils.NodeID].(string)) @@ -179,14 +180,14 @@ func testRPCITLclStatusFirstFailover(t *testing.T) { } time.Sleep(time.Duration(*waitRater) * time.Millisecond) var status map[string]interface{} - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } else if status[utils.NodeID].(string) == node1 { t.Fatalf("Should receive ralID different than first one, got: %s", status[utils.NodeID].(string)) } - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance t.Error(err) } else if status[utils.NodeID].(string) != node2 { t.Errorf("Expecting:\n%s\nReceived:\n%s", node2, status[utils.NodeID].(string)) @@ -198,12 +199,12 @@ func testRPCITLclStatusFirstFailback(t *testing.T) { t.Fatal(err) } var status map[string]interface{} - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == node2 { t.Error("Should receive new ID") } - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance t.Error(err) } else if status[utils.NodeID].(string) != node1 { t.Errorf("Expecting:\n%s\nReceived:\n%s", node2, status[utils.NodeID].(string)) @@ -213,7 +214,7 @@ func testRPCITLclStatusFirstFailback(t *testing.T) { // Make sure it executes on the first node supporting the command func testRPCITLclTDirectedRPC(t *testing.T) { var sessions []*sessions.ExternalSession - if err := rpcPoolFirst.Call(utils.SessionSv1GetActiveSessions, utils.SessionFilter{}, &sessions); err == nil || err.Error() != utils.ErrNotFound.Error() { + if err := rpcPoolFirst.Call(context.Background(), utils.SessionSv1GetActiveSessions, utils.SessionFilter{}, &sessions); err == nil || err.Error() != utils.ErrNotFound.Error() { t.Error(err) } } @@ -236,12 +237,12 @@ func testRPCITLclRpcConnPoolBcast(t *testing.T) { func testRPCITLclBcastStatusInitial(t *testing.T) { var status map[string]interface{} - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") @@ -254,12 +255,12 @@ func testRPCITLclBcastStatusNoRals1(t *testing.T) { } time.Sleep(time.Duration(*waitRater) * time.Millisecond) var status map[string]interface{} - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") @@ -272,7 +273,7 @@ func testRPCITLclBcastStatusBcastNoRals(t *testing.T) { } time.Sleep(time.Duration(*waitRater) * time.Millisecond) var status map[string]interface{} - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err == nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err == nil { t.Error("Should get error") } } @@ -282,12 +283,12 @@ func testRPCITLclBcastStatusRALs2Up(t *testing.T) { t.Fatal(err) } var status map[string]interface{} - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") @@ -299,12 +300,12 @@ func testRPCITLclStatusBcastRALs1Up(t *testing.T) { t.Fatal(err) } var status map[string]interface{} - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty InstanceID received") } - if err := rpcPoolBroadcast.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolBroadcast.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty InstanceID received") @@ -353,14 +354,14 @@ func TestRPCITRmtRpcConnPool(t *testing.T) { return } rpcPoolFirst = rpcclient.NewRPCPool(rpcclient.PoolFirst, 0) - rpcRALRmt, err := rpcclient.NewRPCClient(utils.TCP, RemoteRALsAddr1, false, "", "", "", 1, 1, - time.Duration(1*time.Second), time.Duration(2*time.Second), rpcclient.JSONrpc, nil, false) + rpcRALRmt, err := rpcclient.NewRPCClient(context.Background(), utils.TCP, RemoteRALsAddr1, false, "", "", "", 1, 1, + 0, utils.FibDuration, time.Second, 2*time.Second, rpcclient.JSONrpc, nil, false, nil) if err != nil { t.Fatal(err) } rpcPoolFirst.AddClient(rpcRALRmt) - rpcRAL1, err = rpcclient.NewRPCClient(utils.TCP, RemoteRALsAddr2, false, "", "", "", 1, 1, - time.Duration(1*time.Second), time.Duration(2*time.Second), rpcclient.JSONrpc, nil, false) + rpcRAL1, err = rpcclient.NewRPCClient(context.Background(), utils.TCP, RemoteRALsAddr2, false, "", "", "", 1, 1, + 0, utils.FibDuration, time.Second, 2*time.Second, rpcclient.JSONrpc, nil, false, nil) if err != nil { t.Fatal(err) } @@ -372,12 +373,12 @@ func TestRPCITRmtStatusFirstInitial(t *testing.T) { return } var status map[string]interface{} - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { // Make sure second time we land on the same instance t.Error(err) } else if status[utils.NodeID].(string) != node1 { t.Errorf("Expecting:\n%s\nReceived:\n%s", node1, status[utils.NodeID].(string)) @@ -396,14 +397,14 @@ func TestRPCITRmtStatusFirstFailover(t *testing.T) { } fmt.Println("\n\nExecuting query ...") var status map[string]interface{} - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } else if status[utils.NodeID].(string) == node1 { t.Fatal("Did not failover") } - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") @@ -424,14 +425,14 @@ func TestRPCITRmtStatusFirstFailback(t *testing.T) { } fmt.Println("\n\nExecuting query ...") var status map[string]interface{} - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") } else if status[utils.NodeID].(string) == node2 { t.Fatal("Did not do failback") } - if err := rpcPoolFirst.Call(utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { + if err := rpcPoolFirst.Call(context.Background(), utils.CoreSv1Status, utils.TenantWithArgDispatcher{}, &status); err != nil { t.Error(err) } else if status[utils.NodeID].(string) == "" { t.Error("Empty NodeID received") diff --git a/general_tests/sessions_race_test.go b/general_tests/sessions_race_test.go index 68aea0745..f8ced4e2a 100644 --- a/general_tests/sessions_race_test.go +++ b/general_tests/sessions_race_test.go @@ -26,12 +26,13 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/sessions" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) var ( @@ -44,11 +45,11 @@ var ( resp *engine.Responder ) -// this structure will iplement rpcclient.ClientConnector +// this structure will iplement birpc.ClientConnector // and will read forever the Event map type raceConn struct{} -func (_ raceConn) Call(serviceMethod string, args interface{}, reply interface{}) (err error) { +func (_ raceConn) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) (err error) { cgrev := args.(*engine.ArgsProcessEvent) for { for k := range cgrev.CGREvent.Event { @@ -79,11 +80,11 @@ func TestSessionSRace(t *testing.T) { utils.Logger.SetLogLevel(7) // connManager - raceChan := make(chan rpcclient.ClientConnector, 1) - chargerSChan := make(chan rpcclient.ClientConnector, 1) - respChan := make(chan rpcclient.ClientConnector, 1) + raceChan := make(chan birpc.ClientConnector, 1) + chargerSChan := make(chan birpc.ClientConnector, 1) + respChan := make(chan birpc.ClientConnector, 1) raceChan <- new(raceConn) - connMgr = engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMgr = engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaThresholds): raceChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): chargerSChan, utils.ConcatenatedKey(utils.MetaInternal, utils.MetaResponder): respChan, diff --git a/general_tests/tls_it_test.go b/general_tests/tls_it_test.go index 6c8acf7c2..e81d59849 100755 --- a/general_tests/tls_it_test.go +++ b/general_tests/tls_it_test.go @@ -25,6 +25,7 @@ import ( "testing" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/sessions" @@ -85,23 +86,23 @@ func testTLSStartEngine(t *testing.T) { func testTLSRpcConn(t *testing.T) { var err error - tlsRpcClientJson, err = rpcclient.NewRPCClient(utils.TCP, "localhost:2022", true, tlsCfg.TlsCfg().ClientKey, - tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, - time.Duration(1*time.Second), time.Duration(5*time.Minute), rpcclient.JSONrpc, nil, false) + tlsRpcClientJson, err = rpcclient.NewRPCClient(context.Background(), utils.TCP, "localhost:2022", true, tlsCfg.TlsCfg().ClientKey, + tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, 0, utils.FibDuration, + time.Second, 5*time.Minute, rpcclient.JSONrpc, nil, false, nil) if err != nil { t.Errorf("Error: %s when dialing", err) } - tlsRpcClientGob, err = rpcclient.NewRPCClient(utils.TCP, "localhost:2023", true, tlsCfg.TlsCfg().ClientKey, - tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, - time.Duration(1*time.Second), time.Duration(5*time.Minute), rpcclient.GOBrpc, nil, false) + tlsRpcClientGob, err = rpcclient.NewRPCClient(context.Background(), utils.TCP, "localhost:2023", true, tlsCfg.TlsCfg().ClientKey, + tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, 0, utils.FibDuration, + time.Second, 5*time.Minute, rpcclient.GOBrpc, nil, false, nil) if err != nil { t.Errorf("Error: %s when dialing", err) } - tlsHTTPJson, err = rpcclient.NewRPCClient(utils.TCP, "https://localhost:2280/jsonrpc", true, tlsCfg.TlsCfg().ClientKey, - tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, - time.Duration(1*time.Second), time.Duration(5*time.Minute), rpcclient.HTTPjson, nil, false) + tlsHTTPJson, err = rpcclient.NewRPCClient(context.Background(), utils.TCP, "https://localhost:2280/jsonrpc", true, tlsCfg.TlsCfg().ClientKey, + tlsCfg.TlsCfg().ClientCerificate, tlsCfg.TlsCfg().CaCertificate, 3, 3, 0, utils.FibDuration, + time.Second, 5*time.Minute, rpcclient.HTTPjson, nil, false, nil) if err != nil { t.Errorf("Error: %s when dialing", err) } @@ -110,28 +111,28 @@ func testTLSRpcConn(t *testing.T) { func testTLSPing(t *testing.T) { var reply string - if err := tlsRpcClientJson.Call(utils.ThresholdSv1Ping, new(utils.CGREvent), &reply); err != nil { + if err := tlsRpcClientJson.Call(context.Background(), utils.ThresholdSv1Ping, new(utils.CGREvent), &reply); err != nil { t.Error(err) } else if reply != utils.Pong { t.Errorf("Received: %s", reply) } - if err := tlsRpcClientGob.Call(utils.ThresholdSv1Ping, new(utils.CGREvent), &reply); err != nil { + if err := tlsRpcClientGob.Call(context.Background(), utils.ThresholdSv1Ping, new(utils.CGREvent), &reply); err != nil { t.Error(err) } else if reply != utils.Pong { t.Errorf("Received: %s", reply) } - if err := tlsHTTPJson.Call(utils.ThresholdSv1Ping, new(utils.CGREvent), &reply); err != nil { + if err := tlsHTTPJson.Call(context.Background(), utils.ThresholdSv1Ping, new(utils.CGREvent), &reply); err != nil { t.Error(err) } else if reply != utils.Pong { t.Errorf("Received: %s", reply) } - if err := tlsRpcClientJson.Call(utils.DispatcherSv1Ping, "", &reply); err == nil { + if err := tlsRpcClientJson.Call(context.Background(), utils.DispatcherSv1Ping, "", &reply); err == nil { t.Error(err) } - if err := tlsRpcClientGob.Call(utils.DispatcherSv1Ping, "", &reply); err == nil { + if err := tlsRpcClientGob.Call(context.Background(), utils.DispatcherSv1Ping, "", &reply); err == nil { t.Error(err) } - if err := tlsHTTPJson.Call(utils.DispatcherSv1Ping, "", &reply); err == nil { + if err := tlsHTTPJson.Call(context.Background(), utils.DispatcherSv1Ping, "", &reply); err == nil { t.Error(err) } @@ -159,7 +160,7 @@ func testTLSPing(t *testing.T) { }, } var rply sessions.V1InitReplyWithDigest - if err := tlsHTTPJson.Call(utils.SessionSv1InitiateSessionWithDigest, + if err := tlsHTTPJson.Call(context.Background(), utils.SessionSv1InitiateSessionWithDigest, args, &rply); err == nil { t.Error(err) } diff --git a/go.mod b/go.mod index dfc68bf03..44fb40842 100644 --- a/go.mod +++ b/go.mod @@ -6,72 +6,73 @@ go 1.20 // replace github.com/cgrates/rpcclient => ../rpcclient require ( - github.com/antchfx/xmlquery v1.3.12 - github.com/aws/aws-sdk-go v1.44.143 + github.com/antchfx/xmlquery v1.3.15 + github.com/aws/aws-sdk-go v1.44.230 github.com/cenkalti/rpc2 v0.0.0-20210604223624-c1acbc6ec984 github.com/cgrates/aringo v0.0.0-20220525160735-b5990313d99e github.com/cgrates/fsock v0.0.0-20230123160954-12cae14030cc github.com/cgrates/kamevapi v0.0.0-20220525160402-5b8036487a6c github.com/cgrates/ltcache v0.0.0-20210405185848-da943e80c1ab github.com/cgrates/radigo v0.0.0-20210902121842-ea2f9a730627 - github.com/cgrates/rpcclient v0.0.0-20210218104959-97dcf0d39a2c + github.com/cgrates/rpcclient v0.0.0-20220922181803-b3ddc74ad65a github.com/creack/pty v1.1.18 github.com/fiorix/go-diameter v3.0.3-0.20190716165154-f4823472d0e0+incompatible github.com/fsnotify/fsnotify v1.6.0 - github.com/go-sql-driver/mysql v1.6.0 + github.com/go-sql-driver/mysql v1.7.0 github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 github.com/jinzhu/gorm v1.9.16 github.com/lib/pq v1.10.7 github.com/mediocregopher/radix.v2 v0.0.0-20181115013041-b67df6e626f9 - github.com/miekg/dns v1.1.50 + github.com/miekg/dns v1.1.52 github.com/mitchellh/mapstructure v1.5.0 - github.com/nyaruka/phonenumbers v1.1.2 + github.com/nyaruka/phonenumbers v1.1.6 github.com/peterh/liner v1.2.2 - github.com/segmentio/kafka-go v0.4.38 - github.com/ugorji/go/codec v1.2.7 - go.mongodb.org/mongo-driver v1.11.0 - golang.org/x/net v0.2.0 - golang.org/x/oauth2 v0.2.0 - google.golang.org/api v0.103.0 + github.com/segmentio/kafka-go v0.4.39 + github.com/ugorji/go/codec v1.2.11 + go.mongodb.org/mongo-driver v1.11.3 + golang.org/x/net v0.8.0 + golang.org/x/oauth2 v0.6.0 + google.golang.org/api v0.114.0 ) require github.com/Azure/go-amqp v0.18.1 +require github.com/cgrates/birpc v1.3.1-0.20211117095917-5b0ff29f3084 + require ( - cloud.google.com/go/compute v1.12.1 // indirect - cloud.google.com/go/compute/metadata v0.2.1 // indirect - github.com/antchfx/xpath v1.2.1 // indirect - github.com/cenk/hub v1.0.1 // indirect + cloud.google.com/go/compute v1.19.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + github.com/antchfx/xpath v1.2.4 // indirect github.com/cenkalti/hub v1.0.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect - github.com/ishidawataru/sctp v0.0.0-20210707070123-9a39160e9062 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/ishidawataru/sctp v0.0.0-20230328010247-a8b5b9ef884c // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.15.12 // indirect + github.com/klauspost/compress v1.16.3 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/montanaflynn/stats v0.6.6 // indirect + github.com/montanaflynn/stats v0.7.0 // indirect github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/rabbitmq/amqp091-go v1.6.0 - github.com/rivo/uniseg v0.4.3 // indirect + github.com/rabbitmq/amqp091-go v1.8.0 + github.com/rivo/uniseg v0.4.4 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect - github.com/xdg-go/scram v1.1.1 // indirect - github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/xdg-go/scram v1.1.2 // indirect + github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.3.0 // indirect - golang.org/x/mod v0.7.0 // indirect + golang.org/x/crypto v0.7.0 // indirect + golang.org/x/mod v0.9.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect - golang.org/x/tools v0.3.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect + golang.org/x/tools v0.7.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect - google.golang.org/grpc v1.51.0 // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/genproto v0.0.0-20230327215041-6ac7f18bb9d5 // indirect + google.golang.org/grpc v1.54.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect ) diff --git a/go.sum b/go.sum index ec6131d84..5a8f35de6 100644 --- a/go.sum +++ b/go.sum @@ -1,23 +1,22 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.105.0 h1:DNtEKRBAAzeS4KyIory52wWHuClNaXJ5x1F7xa4q+5Y= -cloud.google.com/go/compute v1.12.1 h1:gKVJMEyqV5c/UnpzjjQbo3Rjvvqpr9B1DFSbJC4OXr0= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute/metadata v0.2.1 h1:efOwf5ymceDhK6PKMnnrTHP4pppY5L22mle96M1yP48= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= -github.com/Azure/go-amqp v0.17.5 h1:7Lsi9H9ijCAfqOaMiNmQ4c+GL9bdrpCjebNKhV/eQ+c= -github.com/Azure/go-amqp v0.17.5/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= github.com/Azure/go-amqp v0.18.1 h1:D5Ca+uijuTcj5g76sF+zT4OQZcFFY397+IGf/5Ip5Sc= github.com/Azure/go-amqp v0.18.1/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= -github.com/antchfx/xmlquery v1.3.12 h1:6TMGpdjpO/P8VhjnaYPXuqT3qyJ/VsqoyNTmJzNBTQ4= -github.com/antchfx/xmlquery v1.3.12/go.mod h1:3w2RvQvTz+DaT5fSgsELkSJcdNgkmg6vuXDEuhdwsPQ= -github.com/antchfx/xpath v1.2.1 h1:qhp4EW6aCOVr5XIkT+l6LJ9ck/JsUH/yyauNgTQkBF8= -github.com/antchfx/xpath v1.2.1/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= -github.com/aws/aws-sdk-go v1.44.143 h1:5xN01uj7zV0VozeE/cxsHsNjSIooqmzVRX0omLxoO0w= -github.com/aws/aws-sdk-go v1.44.143/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/antchfx/xmlquery v1.3.15 h1:aJConNMi1sMha5G8YJoAIF5P+H+qG1L73bSItWHo8Tw= +github.com/antchfx/xmlquery v1.3.15/go.mod h1:zMDv5tIGjOxY/JCNNinnle7V/EwthZ5IT8eeCGJKRWA= +github.com/antchfx/xpath v1.2.3/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= +github.com/antchfx/xpath v1.2.4 h1:dW1HB/JxKvGtJ9WyVGJ0sIoEcqftV3SqIstujI+B9XY= +github.com/antchfx/xpath v1.2.4/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs= +github.com/aws/aws-sdk-go v1.44.230 h1:dcn7TjLyx/31I+0XytMGYRxDc756BRUzsSYVcSyKZlk= +github.com/aws/aws-sdk-go v1.44.230/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/cenk/hub v1.0.1 h1:RBwXNOF4a8KjD8BJ08XqN8KbrqaGiQLDrgvUGJSHuPA= github.com/cenk/hub v1.0.1/go.mod h1:rJM1LNAW0ppT8FMMuPK6c2NP/R2nH/UthtuRySSaf6Y= github.com/cenkalti/hub v1.0.1 h1:UMtjc6dHSaOQTO15SVA50MBIR9zQwvsukQupDrkIRtg= @@ -27,6 +26,8 @@ github.com/cenkalti/rpc2 v0.0.0-20210604223624-c1acbc6ec984/go.mod h1:v2npkhrXyk github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cgrates/aringo v0.0.0-20220525160735-b5990313d99e h1:jbScwE0ebeCBD9CsuCfqMv2oC2KUf+FxEePBxAaF1cQ= github.com/cgrates/aringo v0.0.0-20220525160735-b5990313d99e/go.mod h1:v+wPvWvfle06wQ7WBJZGXvrF+CWA0CrReh+c3PuXaAU= +github.com/cgrates/birpc v1.3.1-0.20211117095917-5b0ff29f3084 h1:YIEepjEOjeHaFrewWaar/JkXYiDgO7gRw/R1zWITxEw= +github.com/cgrates/birpc v1.3.1-0.20211117095917-5b0ff29f3084/go.mod h1:z/PmNnDPqSQALedKJv5T8+eXIq6XHa9J0St1YsvAVns= github.com/cgrates/fsock v0.0.0-20230123160954-12cae14030cc h1:qKfOK61ZLktbywOLTMNWwobJsxkxszlMbuduwNgAO/c= github.com/cgrates/fsock v0.0.0-20230123160954-12cae14030cc/go.mod h1:5A9wag324AzIlaDd7tpPDAg26ouUO1orarAq7Vxr4As= github.com/cgrates/kamevapi v0.0.0-20220525160402-5b8036487a6c h1:ILTMiCcBw80hSe1L0LE3u2U7sFQB/vcFc2JZpvTD4/E= @@ -35,8 +36,8 @@ github.com/cgrates/ltcache v0.0.0-20210405185848-da943e80c1ab h1:dKdAUwrij6vYwew github.com/cgrates/ltcache v0.0.0-20210405185848-da943e80c1ab/go.mod h1:9oSG/6gUoab/vKm/eQ3QcX6KeTR0wRw88N33iCnC/k4= github.com/cgrates/radigo v0.0.0-20210902121842-ea2f9a730627 h1:foxHlpQxYj15khhlpbj+EiIM/W9Gk0HP800NQ/DVPpU= github.com/cgrates/radigo v0.0.0-20210902121842-ea2f9a730627/go.mod h1:PizDxlLTjVQpyPU0ksWYfmM9UbYGu7q6at0nzuiZprI= -github.com/cgrates/rpcclient v0.0.0-20210218104959-97dcf0d39a2c h1:8Yu3yHS8i61Sy9xo2yxbpsiiWcywmzkrJtbyy33w+EA= -github.com/cgrates/rpcclient v0.0.0-20210218104959-97dcf0d39a2c/go.mod h1:+QZt2Af6g8UScM5NWjAwn0CyvLjgVgkZPJyAJqQgXoQ= +github.com/cgrates/rpcclient v0.0.0-20220922181803-b3ddc74ad65a h1:eZKp/pqv46latOHmyeMOHpAukERoG76qyzx2l74l+1I= +github.com/cgrates/rpcclient v0.0.0-20220922181803-b3ddc74ad65a/go.mod h1:+Ed0GFdz/rsSY/trWo+k0NFtAi3VP1l3CngZcRSErdw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= @@ -55,12 +56,11 @@ github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a github.com/fiorix/go-diameter v3.0.3-0.20190716165154-f4823472d0e0+incompatible h1:Xf8Q9AW9zNFFV4h5R/1bcMjMcbtZy1FFbCy/bzf/ZSw= github.com/fiorix/go-diameter v3.0.3-0.20190716165154-f4823472d0e0+incompatible/go.mod h1:GgNrDCADT8o3k8zV1UsI473j8CFdLGY9ikZYDNEeYU8= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= +github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -79,8 +79,8 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -89,7 +89,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -97,14 +96,14 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75 h1:f0n1xnMSmBLzVfsMMvriDyA75NB/oBgILX2GcHXIQzY= github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= -github.com/ishidawataru/sctp v0.0.0-20210707070123-9a39160e9062 h1:G1+wBT0dwjIrBdLy0MIG0i+E4CQxEnedHXdauJEIH6g= -github.com/ishidawataru/sctp v0.0.0-20210707070123-9a39160e9062/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= +github.com/ishidawataru/sctp v0.0.0-20230328010247-a8b5b9ef884c h1:ztfjlg12EsCbx7xln7+di+1X9EetFRtiQ67eNC6Oljk= +github.com/ishidawataru/sctp v0.0.0-20230328010247-a8b5b9ef884c/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= @@ -117,8 +116,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= -github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -134,15 +133,15 @@ github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/ github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= github.com/mediocregopher/radix.v2 v0.0.0-20181115013041-b67df6e626f9 h1:ViNuGS149jgnttqhc6XQNPwdupEMBXqCx9wtlW7P3sA= github.com/mediocregopher/radix.v2 v0.0.0-20181115013041-b67df6e626f9/go.mod h1:fLRUbhbSd5Px2yKUaGYYPltlyxi1guJz1vCmo1RQL50= -github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= -github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.52 h1:Bmlc/qsNNULOe6bpXcUTsuOajd0DzRHwup6D9k1An0c= +github.com/miekg/dns v1.1.52/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ= -github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/nyaruka/phonenumbers v1.1.2 h1:MIDljnA08HCUzgNOrkCYja7CJ5U9ylZ+U3Sge8RWW14= -github.com/nyaruka/phonenumbers v1.1.2/go.mod h1:cGaEsOrLjIL0iKGqJR5Rfywy86dSkbApEpXuM9KySNA= +github.com/montanaflynn/stats v0.7.0 h1:r3y12KyNxj/Sb/iOE46ws+3mS1+MZca1wlHQFPsY/JU= +github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/nyaruka/phonenumbers v1.1.6 h1:DcueYq7QrOArAprAYNoQfDgp0KetO4LqtnBtQC6Wyes= +github.com/nyaruka/phonenumbers v1.1.6/go.mod h1:yShPJHDSH3aTKzCbXyVxNpbl2kA+F+Ne5Pun/MvFRos= github.com/peterh/liner v1.2.2 h1:aJ4AOodmL+JxOZZEL2u9iJf8omNRpqHc/EbrK+3mAXw= github.com/peterh/liner v1.2.2/go.mod h1:xFwJyiKIXJZUKItq5dGHZSTBRAuG/CpeNpWLyiNRNwI= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= @@ -153,17 +152,16 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rabbitmq/amqp091-go v1.6.0 h1:fiFHcMcP+5/A+35MXniiagho1lEXX4+jpHGR+q+LeBU= -github.com/rabbitmq/amqp091-go v1.6.0/go.mod h1:wfClAtY0C7bOHxd3GjmF26jEHn+rR/0B3+YV+Vn9/NI= +github.com/rabbitmq/amqp091-go v1.8.0 h1:GBFy5PpLQ5jSVVSYv8ecHGqeX7UTLYR4ItQbDCss9MM= +github.com/rabbitmq/amqp091-go v1.8.0/go.mod h1:+jPrT9iY2eLjRaMSRHUhc3z14E/l85kv/f+6luSD3pc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/segmentio/kafka-go v0.4.38 h1:iQdOBbUSdfuYlFpvjuALgj7N6DrdPA0HfB4AhREOdtg= -github.com/segmentio/kafka-go v0.4.38/go.mod h1:ikyuGon/60MN/vXFgykf7Zm8P5Be49gJU6vezwjnnhU= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/segmentio/kafka-go v0.4.39 h1:75smaomhvkYRwtuOwqLsdhgCG30B82NsbdkdDfFbvrw= +github.com/segmentio/kafka-go v0.4.39/go.mod h1:T0MLgygYvmqmBvC+s8aCcbVNfJN4znVne5j0Pzowp/Q= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -171,15 +169,16 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= -github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= github.com/xdg/scram v1.0.5 h1:TuS0RFmt5Is5qm9Tm2SoD89OPqe4IRiFtyFY4iwWXsw= github.com/xdg/scram v1.0.5/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.3 h1:cmL5Enob4W83ti/ZHuZLuKD/xqJfus4fVPwE+/BDm+4= @@ -187,34 +186,30 @@ github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.mongodb.org/mongo-driver v1.11.0 h1:FZKhBSTydeuffHj9CBjXlR8vQLee1cQyTWYPA6/tqiE= -go.mongodb.org/mongo-driver v1.11.0/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= +go.mongodb.org/mongo-driver v1.11.3 h1:Ql6K6qYHEzB6xvu4+AU0BoRoqf9vFPcc4o7MUIdPW8Y= +go.mongodb.org/mongo-driver v1.11.3/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200320181102-891825fb96df/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -227,18 +222,16 @@ golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220706163947-c90051bbdb60/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.2.0 h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU= -golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= +golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -252,47 +245,43 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -google.golang.org/api v0.103.0 h1:9yuVqlu2JCvcLg9p8S3fcFLZij8EPSyvODIY1rkMizQ= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.114.0 h1:1xQPji6cO2E2vLiI+C/XiFAnsn1WV3mjaEwGLhi3grE= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= @@ -300,15 +289,15 @@ google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20230327215041-6ac7f18bb9d5 h1:Kd6tRRHXw8z4TlPlWi+NaK10gsePL6GdZBQChptOLGA= +google.golang.org/genproto v0.0.0-20230327215041-6ac7f18bb9d5/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -320,8 +309,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= diff --git a/services/analyzers.go b/services/analyzers.go index 8005f79cd..9d0076e75 100644 --- a/services/analyzers.go +++ b/services/analyzers.go @@ -22,17 +22,17 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/analyzers" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewAnalyzerService returns the Analyzer Service func NewAnalyzerService(cfg *config.CGRConfig, server *utils.Server, exitChan chan bool, - internalAnalyzerSChan chan rpcclient.ClientConnector) servmanager.Service { + internalAnalyzerSChan chan birpc.ClientConnector) servmanager.Service { return &AnalyzerService{ connChan: internalAnalyzerSChan, cfg: cfg, @@ -50,7 +50,7 @@ type AnalyzerService struct { anz *analyzers.AnalyzerService rpc *v1.AnalyzerSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/apiers_it_test.go b/services/apiers_it_test.go index be02c2196..cc1a405fd 100644 --- a/services/apiers_it_test.go +++ b/services/apiers_it_test.go @@ -25,11 +25,11 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestApiersReload(t *testing.T) { @@ -54,15 +54,15 @@ func TestApiersReload(t *testing.T) { db := NewDataDBService(cfg, nil) cfg.StorDbCfg().Type = utils.MetaInternal stordb := NewStorDBService(cfg) - schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1)) apiSv1 := NewAPIerSv1Service(cfg, db, stordb, filterSChan, server, schS, new(ResponderService), - make(chan rpcclient.ClientConnector, 1), nil) + make(chan birpc.ClientConnector, 1), nil) - apiSv2 := NewAPIerSv2Service(apiSv1, cfg, server, make(chan rpcclient.ClientConnector, 1)) + apiSv2 := NewAPIerSv2Service(apiSv1, cfg, server, make(chan birpc.ClientConnector, 1)) srvMngr.AddServices(apiSv1, apiSv2, schS, tS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db, stordb) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db, stordb) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/apierv1.go b/services/apierv1.go index 13d62fb53..500557819 100644 --- a/services/apierv1.go +++ b/services/apierv1.go @@ -23,11 +23,11 @@ import ( "runtime" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewAPIerSv1Service returns the APIerSv1 Service @@ -36,7 +36,7 @@ func NewAPIerSv1Service(cfg *config.CGRConfig, dm *DataDBService, server *utils.Server, schedService *SchedulerService, responderService *ResponderService, - internalAPIerSv1Chan chan rpcclient.ClientConnector, + internalAPIerSv1Chan chan birpc.ClientConnector, connMgr *engine.ConnManager) *APIerSv1Service { return &APIerSv1Service{ connChan: internalAPIerSv1Chan, @@ -65,7 +65,7 @@ type APIerSv1Service struct { connMgr *engine.ConnManager api *v1.APIerSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector syncStop chan struct{} diff --git a/services/apierv2.go b/services/apierv2.go index 6faded50e..76701f13d 100644 --- a/services/apierv2.go +++ b/services/apierv2.go @@ -21,16 +21,16 @@ package services import ( "sync" + "github.com/cgrates/birpc" v2 "github.com/cgrates/cgrates/apier/v2" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewAPIerSv2Service returns the APIerSv2 Service func NewAPIerSv2Service(apiv1 *APIerSv1Service, cfg *config.CGRConfig, server *utils.Server, - internalAPIerSv2Chan chan rpcclient.ClientConnector) *APIerSv2Service { + internalAPIerSv2Chan chan birpc.ClientConnector) *APIerSv2Service { return &APIerSv2Service{ apiv1: apiv1, connChan: internalAPIerSv2Chan, @@ -47,7 +47,7 @@ type APIerSv2Service struct { apiv1 *APIerSv1Service api *v2.APIerSv2 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/attributes.go b/services/attributes.go index 1c2830309..644a09a7d 100644 --- a/services/attributes.go +++ b/services/attributes.go @@ -22,18 +22,18 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewAttributeService returns the Attribute Service func NewAttributeService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, - server *utils.Server, internalChan chan rpcclient.ClientConnector) servmanager.Service { + server *utils.Server, internalChan chan birpc.ClientConnector) servmanager.Service { return &AttributeService{ connChan: internalChan, cfg: cfg, @@ -55,7 +55,7 @@ type AttributeService struct { attrS *engine.AttributeService rpc *v1.AttributeSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/attributes_it_test.go b/services/attributes_it_test.go index 18af1037b..4c29040ba 100644 --- a/services/attributes_it_test.go +++ b/services/attributes_it_test.go @@ -25,8 +25,7 @@ import ( "testing" "time" - "github.com/cgrates/rpcclient" - + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" @@ -51,11 +50,11 @@ func TestAttributeSReload(t *testing.T) { srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) attrS := NewAttributeService(cfg, db, - chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), + chS, filterSChan, server, make(chan birpc.ClientConnector, 1), ) engine.NewConnManager(cfg, nil) srvMngr.AddServices(attrS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/cdrs.go b/services/cdrs.go index 7ab71c06b..297835237 100644 --- a/services/cdrs.go +++ b/services/cdrs.go @@ -23,19 +23,19 @@ import ( "runtime" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" v2 "github.com/cgrates/cgrates/apier/v2" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewCDRServer returns the CDR Server func NewCDRServer(cfg *config.CGRConfig, dm *DataDBService, storDB *StorDBService, filterSChan chan *engine.FilterS, - server *utils.Server, internalCDRServerChan chan rpcclient.ClientConnector, + server *utils.Server, internalCDRServerChan chan birpc.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { return &CDRServer{ connChan: internalCDRServerChan, @@ -60,7 +60,7 @@ type CDRServer struct { cdrS *engine.CDRServer rpcv1 *v1.CDRsV1 rpcv2 *v2.CDRsV2 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector connMgr *engine.ConnManager syncStop chan struct{} diff --git a/services/cdrs_it_test.go b/services/cdrs_it_test.go index 1349cd476..a9eb5bc04 100644 --- a/services/cdrs_it_test.go +++ b/services/cdrs_it_test.go @@ -25,11 +25,11 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestCdrsReload(t *testing.T) { @@ -65,17 +65,17 @@ func TestCdrsReload(t *testing.T) { cfg.StorDbCfg().Type = utils.MetaInternal stordb := NewStorDBService(cfg) chrS := NewChargerService(cfg, db, chS, filterSChan, server, nil, nil) - schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) ralS := NewRalService(cfg, chS, server, - make(chan rpcclient.ClientConnector, 1), - make(chan rpcclient.ClientConnector, 1), + make(chan birpc.ClientConnector, 1), + make(chan birpc.ClientConnector, 1), engineShutdown, nil) cdrS := NewCDRServer(cfg, db, stordb, filterSChan, server, - make(chan rpcclient.ClientConnector, 1), + make(chan birpc.ClientConnector, 1), nil) srvMngr.AddServices(cdrS, ralS, schS, chrS, NewLoaderService(cfg, db, filterSChan, server, engineShutdown, - make(chan rpcclient.ClientConnector, 1), nil), db, stordb) + make(chan birpc.ClientConnector, 1), nil), db, stordb) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/chargers.go b/services/chargers.go index f585afa91..3c37e2ba0 100644 --- a/services/chargers.go +++ b/services/chargers.go @@ -22,18 +22,18 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewChargerService returns the Charger Service func NewChargerService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, server *utils.Server, - internalChargerSChan chan rpcclient.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { + internalChargerSChan chan birpc.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { return &ChargerService{ connChan: internalChargerSChan, cfg: cfg, @@ -57,7 +57,7 @@ type ChargerService struct { chrS *engine.ChargerService rpc *v1.ChargerSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/chargers_it_test.go b/services/chargers_it_test.go index 150cac35e..8bf56ae0c 100644 --- a/services/chargers_it_test.go +++ b/services/chargers_it_test.go @@ -25,8 +25,7 @@ import ( "testing" "time" - "github.com/cgrates/rpcclient" - + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" @@ -52,12 +51,12 @@ func TestChargerSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - attrS := NewAttributeService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) - chrS := NewChargerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + attrS := NewAttributeService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1)) + chrS := NewChargerService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(attrS, chrS, NewLoaderService(cfg, db, filterSChan, server, - engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/datadb_it_test.go b/services/datadb_it_test.go index 0fac2abca..c1a105e2b 100644 --- a/services/datadb_it_test.go +++ b/services/datadb_it_test.go @@ -26,8 +26,7 @@ import ( "testing" "time" - "github.com/cgrates/rpcclient" - + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" @@ -53,8 +52,8 @@ func TestDataDBReload(t *testing.T) { cM := engine.NewConnManager(cfg, nil) db := NewDataDBService(cfg, cM) srvMngr.AddServices(NewAttributeService(cfg, db, - chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)), - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + chS, filterSChan, server, make(chan birpc.ClientConnector, 1)), + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/dispatchers.go b/services/dispatchers.go index bd2bedc74..1443677ee 100644 --- a/services/dispatchers.go +++ b/services/dispatchers.go @@ -22,19 +22,19 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/dispatchers" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewDispatcherService returns the Dispatcher Service func NewDispatcherService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, - server *utils.Server, internalChan chan rpcclient.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { + server *utils.Server, internalChan chan birpc.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { return &DispatcherService{ connChan: internalChan, cfg: cfg, @@ -58,7 +58,7 @@ type DispatcherService struct { dspS *dispatchers.DispatcherService rpc *v1.DispatcherSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/dispatchers_it_test.go b/services/dispatchers_it_test.go index 39ccf3d7b..8c80f50a8 100644 --- a/services/dispatchers_it_test.go +++ b/services/dispatchers_it_test.go @@ -25,8 +25,7 @@ import ( "testing" "time" - "github.com/cgrates/rpcclient" - + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" @@ -53,13 +52,13 @@ func TestDispatcherSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - attrS := NewAttributeService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) + attrS := NewAttributeService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1)) srv := NewDispatcherService(cfg, db, chS, filterSChan, server, - make(chan rpcclient.ClientConnector, 1), nil) + make(chan birpc.ClientConnector, 1), nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(attrS, srv, NewLoaderService(cfg, db, filterSChan, server, - engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/dnsagent_it_test.go b/services/dnsagent_it_test.go index be7fdffe3..2d7bda7bf 100644 --- a/services/dnsagent_it_test.go +++ b/services/dnsagent_it_test.go @@ -25,11 +25,11 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestDNSAgentReload(t *testing.T) { @@ -45,18 +45,18 @@ func TestDNSAgentReload(t *testing.T) { engineShutdown := make(chan bool, 1) chS := engine.NewCacheS(cfg, nil) - cacheSChan := make(chan rpcclient.ClientConnector, 1) + cacheSChan := make(chan birpc.ClientConnector, 1) cacheSChan <- chS server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - sS := NewSessionService(cfg, db, server, make(chan rpcclient.ClientConnector, 1), + sS := NewSessionService(cfg, db, server, make(chan birpc.ClientConnector, 1), engineShutdown, nil) srv := NewDNSAgent(cfg, filterSChan, engineShutdown, nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(srv, sS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Fatal(err) } diff --git a/services/ers_it_test.go b/services/ers_it_test.go index 9a2ad2e0d..37831db9d 100644 --- a/services/ers_it_test.go +++ b/services/ers_it_test.go @@ -26,8 +26,7 @@ import ( "testing" "time" - "github.com/cgrates/rpcclient" - + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" @@ -56,11 +55,11 @@ func TestEventReaderSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - sS := NewSessionService(cfg, db, server, make(chan rpcclient.ClientConnector, 1), engineShutdown, nil) + sS := NewSessionService(cfg, db, server, make(chan birpc.ClientConnector, 1), engineShutdown, nil) attrS := NewEventReaderService(cfg, filterSChan, engineShutdown, nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(attrS, sS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/loaders.go b/services/loaders.go index 4270a4fbf..a55b15679 100644 --- a/services/loaders.go +++ b/services/loaders.go @@ -21,19 +21,19 @@ package services import ( "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/loaders" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewLoaderService returns the Loader Service func NewLoaderService(cfg *config.CGRConfig, dm *DataDBService, filterSChan chan *engine.FilterS, server *utils.Server, - exitChan chan bool, internalLoaderSChan chan rpcclient.ClientConnector, + exitChan chan bool, internalLoaderSChan chan birpc.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { return &LoaderService{ connChan: internalLoaderSChan, @@ -57,7 +57,7 @@ type LoaderService struct { ldrs *loaders.LoaderService rpc *v1.LoaderSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector connMgr *engine.ConnManager } diff --git a/services/rals.go b/services/rals.go index a81d67f30..5e9f6faf2 100644 --- a/services/rals.go +++ b/services/rals.go @@ -21,17 +21,17 @@ package services import ( "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewRalService returns the Ral Service func NewRalService(cfg *config.CGRConfig, cacheS *engine.CacheS, server *utils.Server, - internalRALsChan, internalResponderChan chan rpcclient.ClientConnector, exitChan chan bool, + internalRALsChan, internalResponderChan chan birpc.ClientConnector, exitChan chan bool, connMgr *engine.ConnManager) *RalService { resp := NewResponderService(cfg, server, internalResponderChan, exitChan) @@ -53,7 +53,7 @@ type RalService struct { server *utils.Server rals *v1.RALsV1 responder *ResponderService - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector connMgr *engine.ConnManager } diff --git a/services/rals_it_test.go b/services/rals_it_test.go index b5f428f09..772fa9784 100644 --- a/services/rals_it_test.go +++ b/services/rals_it_test.go @@ -25,11 +25,11 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestRalsReload(t *testing.T) { @@ -64,14 +64,14 @@ func TestRalsReload(t *testing.T) { db := NewDataDBService(cfg, nil) cfg.StorDbCfg().Type = utils.MetaInternal stordb := NewStorDBService(cfg) - schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1)) ralS := NewRalService(cfg, chS, server, - make(chan rpcclient.ClientConnector, 1), - make(chan rpcclient.ClientConnector, 1), + make(chan birpc.ClientConnector, 1), + make(chan birpc.ClientConnector, 1), engineShutdown, nil) srvMngr.AddServices(ralS, schS, tS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db, stordb) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db, stordb) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/resources.go b/services/resources.go index 4bef97e16..0aeb86354 100644 --- a/services/resources.go +++ b/services/resources.go @@ -22,18 +22,18 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewResourceService returns the Resource Service func NewResourceService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, - server *utils.Server, internalResourceSChan chan rpcclient.ClientConnector, + server *utils.Server, internalResourceSChan chan birpc.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { return &ResourceService{ connChan: internalResourceSChan, @@ -57,7 +57,7 @@ type ResourceService struct { reS *engine.ResourceService rpc *v1.ResourceSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector connMgr *engine.ConnManager } diff --git a/services/resources_it_test.go b/services/resources_it_test.go index 04e57cff6..d903d92af 100644 --- a/services/resources_it_test.go +++ b/services/resources_it_test.go @@ -25,8 +25,7 @@ import ( "testing" "time" - "github.com/cgrates/rpcclient" - + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" @@ -55,11 +54,11 @@ func TestResourceSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) - reS := NewResourceService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1)) + reS := NewResourceService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(tS, reS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/responders.go b/services/responders.go index beef9793d..916b2541e 100644 --- a/services/responders.go +++ b/services/responders.go @@ -21,15 +21,15 @@ package services import ( "sync" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewResponderService returns the Resonder Service func NewResponderService(cfg *config.CGRConfig, server *utils.Server, - internalRALsChan chan rpcclient.ClientConnector, + internalRALsChan chan birpc.ClientConnector, exitChan chan bool) *ResponderService { return &ResponderService{ connChan: internalRALsChan, @@ -47,7 +47,7 @@ type ResponderService struct { exitChan chan bool resp *engine.Responder - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/schedulers.go b/services/schedulers.go index 4a03bcd56..70fcd6745 100644 --- a/services/schedulers.go +++ b/services/schedulers.go @@ -21,18 +21,18 @@ package services import ( "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/scheduler" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewSchedulerService returns the Scheduler Service func NewSchedulerService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, fltrSChan chan *engine.FilterS, - server *utils.Server, internalSchedulerrSChan chan rpcclient.ClientConnector, + server *utils.Server, internalSchedulerrSChan chan birpc.ClientConnector, connMgr *engine.ConnManager) *SchedulerService { return &SchedulerService{ connChan: internalSchedulerrSChan, @@ -56,7 +56,7 @@ type SchedulerService struct { schS *scheduler.Scheduler rpc *v1.SchedulerSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector connMgr *engine.ConnManager } diff --git a/services/schedulers_it_test.go b/services/schedulers_it_test.go index c641c6abc..59189682d 100644 --- a/services/schedulers_it_test.go +++ b/services/schedulers_it_test.go @@ -25,11 +25,11 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestSchedulerSReload(t *testing.T) { @@ -47,10 +47,10 @@ func TestSchedulerSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(schS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/sessions.go b/services/sessions.go index 656a91d1d..a1b2e0dfd 100644 --- a/services/sessions.go +++ b/services/sessions.go @@ -22,6 +22,7 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/engine" v1 "github.com/cgrates/cgrates/apier/v1" @@ -29,12 +30,11 @@ import ( "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/sessions" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewSessionService returns the Session Service func NewSessionService(cfg *config.CGRConfig, dm *DataDBService, - server *utils.Server, internalChan chan rpcclient.ClientConnector, + server *utils.Server, internalChan chan birpc.ClientConnector, exitChan chan bool, connMgr *engine.ConnManager) servmanager.Service { return &SessionService{ connChan: internalChan, @@ -57,7 +57,7 @@ type SessionService struct { sm *sessions.SessionS rpc *v1.SMGenericV1 rpcv1 *v1.SessionSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector // in order to stop the birpc server if necessary bircpEnabled bool @@ -85,6 +85,10 @@ func (smg *SessionService) Start() (err error) { utils.Logger.Err(fmt.Sprintf("<%s> error: %s!", utils.SessionS, err)) } }(smg.sm) + + // Register RPC handler + srv, _ := engine.NewServiceWithName(smg.sm, utils.SessionS, true) // methods with multiple options + // Pass internal connection via BiRPCClient smg.connChan <- smg.sm // Register RPC handler @@ -98,11 +102,8 @@ func (smg *SessionService) Start() (err error) { // Register BiRpc handlers if smg.cfg.SessionSCfg().ListenBijson != "" { smg.bircpEnabled = true - for method, handler := range smg.rpc.Handlers() { - smg.server.BiRPCRegisterName(method, handler) - } - for method, handler := range smg.rpcv1.Handlers() { - smg.server.BiRPCRegisterName(method, handler) + for n, s := range srv { + smg.server.BiRPCRegisterName(n, s) } // run this in it's own goroutine go func() { diff --git a/services/sessions_it_test.go b/services/sessions_it_test.go index a9d05a8e0..4136825c3 100644 --- a/services/sessions_it_test.go +++ b/services/sessions_it_test.go @@ -25,11 +25,11 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestSessionSReload(t *testing.T) { @@ -61,9 +61,9 @@ func TestSessionSReload(t *testing.T) { close(chS.GetPrecacheChannel(utils.CacheSharedGroups)) close(chS.GetPrecacheChannel(utils.CacheTimings)) - internalChan := make(chan rpcclient.ClientConnector, 1) + internalChan := make(chan birpc.ClientConnector, 1) internalChan <- nil - cacheSChan := make(chan rpcclient.ClientConnector, 1) + cacheSChan := make(chan birpc.ClientConnector, 1) cacheSChan <- chS server := utils.NewServer() @@ -71,18 +71,18 @@ func TestSessionSReload(t *testing.T) { db := NewDataDBService(cfg, nil) cfg.StorDbCfg().Type = utils.MetaInternal stordb := NewStorDBService(cfg) - chrS := NewChargerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) - schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + chrS := NewChargerService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) + schS := NewSchedulerService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) ralS := NewRalService(cfg, chS, server, - make(chan rpcclient.ClientConnector, 1), make(chan rpcclient.ClientConnector, 1), + make(chan birpc.ClientConnector, 1), make(chan birpc.ClientConnector, 1), engineShutdown, nil) cdrS := NewCDRServer(cfg, db, stordb, filterSChan, server, - make(chan rpcclient.ClientConnector, 1), + make(chan birpc.ClientConnector, 1), nil) - srv := NewSessionService(cfg, db, server, make(chan rpcclient.ClientConnector, 1), engineShutdown, nil) + srv := NewSessionService(cfg, db, server, make(chan birpc.ClientConnector, 1), engineShutdown, nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(srv, chrS, schS, ralS, cdrS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db, stordb) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db, stordb) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/stats.go b/services/stats.go index 41898e604..2ad212b2d 100644 --- a/services/stats.go +++ b/services/stats.go @@ -22,18 +22,18 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewStatService returns the Stat Service func NewStatService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, - server *utils.Server, internalStatSChan chan rpcclient.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { + server *utils.Server, internalStatSChan chan birpc.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { return &StatService{ connChan: internalStatSChan, cfg: cfg, @@ -57,7 +57,7 @@ type StatService struct { sts *engine.StatService rpc *v1.StatSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/stats_it_test.go b/services/stats_it_test.go index 8c1e05dc0..eb798b47b 100644 --- a/services/stats_it_test.go +++ b/services/stats_it_test.go @@ -25,8 +25,7 @@ import ( "testing" "time" - "github.com/cgrates/rpcclient" - + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" @@ -55,11 +54,11 @@ func TestStatSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) - sS := NewStatService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1)) + sS := NewStatService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(tS, sS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/suppliers.go b/services/suppliers.go index 2b732529c..83381f8b2 100644 --- a/services/suppliers.go +++ b/services/suppliers.go @@ -22,18 +22,18 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewSupplierService returns the Supplier Service func NewSupplierService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, - server *utils.Server, internalSupplierSChan chan rpcclient.ClientConnector, + server *utils.Server, internalSupplierSChan chan birpc.ClientConnector, connMgr *engine.ConnManager) servmanager.Service { return &SupplierService{ connChan: internalSupplierSChan, @@ -58,7 +58,7 @@ type SupplierService struct { splS *engine.SupplierService rpc *v1.SupplierSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/suppliers_it_test.go b/services/suppliers_it_test.go index f0303a953..cfb1bc91e 100644 --- a/services/suppliers_it_test.go +++ b/services/suppliers_it_test.go @@ -25,8 +25,7 @@ import ( "testing" "time" - "github.com/cgrates/rpcclient" - + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" @@ -53,11 +52,11 @@ func TestSupplierSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - sts := NewStatService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) - supS := NewSupplierService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1), nil) + sts := NewStatService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) + supS := NewSupplierService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1), nil) engine.NewConnManager(cfg, nil) srvMngr.AddServices(supS, sts, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/services/thresholds.go b/services/thresholds.go index 04f29d11b..45a76848a 100644 --- a/services/thresholds.go +++ b/services/thresholds.go @@ -22,18 +22,18 @@ import ( "fmt" "sync" + "github.com/cgrates/birpc" v1 "github.com/cgrates/cgrates/apier/v1" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) // NewThresholdService returns the Threshold Service func NewThresholdService(cfg *config.CGRConfig, dm *DataDBService, cacheS *engine.CacheS, filterSChan chan *engine.FilterS, - server *utils.Server, internalThresholdSChan chan rpcclient.ClientConnector) servmanager.Service { + server *utils.Server, internalThresholdSChan chan birpc.ClientConnector) servmanager.Service { return &ThresholdService{ connChan: internalThresholdSChan, cfg: cfg, @@ -55,7 +55,7 @@ type ThresholdService struct { thrs *engine.ThresholdService rpc *v1.ThresholdSv1 - connChan chan rpcclient.ClientConnector + connChan chan birpc.ClientConnector } // Start should handle the sercive start diff --git a/services/thresholds_it_test.go b/services/thresholds_it_test.go index c0ddd01a7..8d627711a 100644 --- a/services/thresholds_it_test.go +++ b/services/thresholds_it_test.go @@ -25,11 +25,11 @@ import ( "testing" "time" + "github.com/cgrates/birpc" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/servmanager" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) func TestThresholdSReload(t *testing.T) { @@ -50,10 +50,10 @@ func TestThresholdSReload(t *testing.T) { server := utils.NewServer() srvMngr := servmanager.NewServiceManager(cfg, engineShutdown) db := NewDataDBService(cfg, nil) - tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan rpcclient.ClientConnector, 1)) + tS := NewThresholdService(cfg, db, chS, filterSChan, server, make(chan birpc.ClientConnector, 1)) engine.NewConnManager(cfg, nil) srvMngr.AddServices(tS, - NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan rpcclient.ClientConnector, 1), nil), db) + NewLoaderService(cfg, db, filterSChan, server, engineShutdown, make(chan birpc.ClientConnector, 1), nil), db) if err = srvMngr.StartServices(); err != nil { t.Error(err) } diff --git a/servmanager/servmanager.go b/servmanager/servmanager.go index 5b31e31f6..464beff28 100644 --- a/servmanager/servmanager.go +++ b/servmanager/servmanager.go @@ -25,6 +25,7 @@ import ( "strings" "sync" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" @@ -49,7 +50,7 @@ type ServiceManager struct { subsystems map[string]Service } -func (srvMngr *ServiceManager) Call(serviceMethod string, args interface{}, reply interface{}) error { +func (srvMngr *ServiceManager) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { parts := strings.Split(serviceMethod, ".") if len(parts) != 2 { return rpcclient.ErrUnsupporteServiceMethod diff --git a/sessions/libsessions.go b/sessions/libsessions.go index 21eb7c124..78f8c2ef1 100644 --- a/sessions/libsessions.go +++ b/sessions/libsessions.go @@ -23,6 +23,7 @@ import ( "strings" "time" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" ) @@ -41,7 +42,7 @@ var authReqs = engine.MapEvent{ // BiRPClient is the interface implemented by Agents which are able to // communicate bidirectionally with SessionS and remote Communication Switch type BiRPClient interface { - Call(serviceMethod string, args interface{}, reply interface{}) error + Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error V1DisconnectSession(args utils.AttrDisconnectSession, reply *string) (err error) V1GetActiveSessionIDs(ignParam string, sessionIDs *[]*SessionID) (err error) } diff --git a/sessions/sessions.go b/sessions/sessions.go index 82b520cca..faac4059d 100644 --- a/sessions/sessions.go +++ b/sessions/sessions.go @@ -28,7 +28,8 @@ import ( "sync" "time" - "github.com/cenkalti/rpc2" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/guardian" @@ -52,7 +53,7 @@ func NewSessionS(cgrCfg *config.CGRConfig, cfg: cgrCfg, dm: dm, connMgr: connMgr, - biJClnts: make(map[rpcclient.ClientConnector]string), + biJClnts: make(map[birpc.ClientConnector]string), biJIDs: make(map[string]*biJClient), aSessions: make(map[string]*Session), aSessionsIdx: make(map[string]map[string]map[string]utils.StringMap), @@ -65,8 +66,8 @@ func NewSessionS(cgrCfg *config.CGRConfig, // biJClient contains info we need to reach back a bidirectional json client type biJClient struct { - conn rpcclient.ClientConnector // connection towards BiJ client - proto float64 // client protocol version + conn birpc.ClientConnector // connection towards BiJ client + proto float64 // client protocol version } // SessionS represents the session service @@ -75,9 +76,9 @@ type SessionS struct { dm *engine.DataManager connMgr *engine.ConnManager - biJMux sync.RWMutex // mux protecting BI-JSON connections - biJClnts map[rpcclient.ClientConnector]string // index BiJSONConnection so we can sync them later - biJIDs map[string]*biJClient // identifiers of bidirectional JSON conns, used to call RPC based on connIDs + biJMux sync.RWMutex // mux protecting BI-JSON connections + biJClnts map[birpc.ClientConnector]string // index BiJSONConnection so we can sync them later + biJIDs map[string]*biJClient // identifiers of bidirectional JSON conns, used to call RPC based on connIDs aSsMux sync.RWMutex // protects aSessions aSessions map[string]*Session // group sessions per sessionId @@ -133,7 +134,7 @@ func (sS *SessionS) Shutdown() (err error) { } // OnBiJSONConnect is called by rpc2.Client on each new connection -func (sS *SessionS) OnBiJSONConnect(c *rpc2.Client) { +func (sS *SessionS) OnBiJSONConnect(c birpc.ClientConnector) { sS.biJMux.Lock() nodeID := utils.UUIDSha1Prefix() // connection identifier, should be later updated as login procedure sS.biJClnts[c] = nodeID @@ -144,7 +145,7 @@ func (sS *SessionS) OnBiJSONConnect(c *rpc2.Client) { } // OnBiJSONDisconnect is called by rpc2.Client on each client disconnection -func (sS *SessionS) OnBiJSONDisconnect(c *rpc2.Client) { +func (sS *SessionS) OnBiJSONDisconnect(c birpc.ClientConnector) { sS.biJMux.Lock() if nodeID, has := sS.biJClnts[c]; has { delete(sS.biJClnts, c) @@ -154,7 +155,7 @@ func (sS *SessionS) OnBiJSONDisconnect(c *rpc2.Client) { } // RegisterIntBiJConn is called on internal BiJ connection towards SessionS -func (sS *SessionS) RegisterIntBiJConn(c rpcclient.ClientConnector) { +func (sS *SessionS) RegisterIntBiJConn(c birpc.ClientConnector) { sS.biJMux.Lock() nodeID := sS.cfg.GeneralCfg().NodeID sS.biJClnts[c] = nodeID @@ -176,7 +177,7 @@ func (sS *SessionS) biJClnt(connID string) (clnt *biJClient) { } // biJClnt returns connection ID based on bidirectional connection received -func (sS *SessionS) biJClntID(c rpcclient.ClientConnector) (clntConnID string) { +func (sS *SessionS) biJClntID(c birpc.ClientConnector) (clntConnID string) { if c == nil { return } @@ -396,7 +397,7 @@ func (sS *SessionS) forceSTerminate(s *Session, extraUsage time.Duration, tUsage if clntConn := sS.biJClnt(s.ClientConnID); clntConn != nil { go func() { var rply string - if err := clntConn.conn.Call( + if err := clntConn.conn.Call(context.TODO(), utils.SessionSv1DisconnectSession, utils.AttrDisconnectSession{ EventStart: s.EventStart, @@ -693,7 +694,7 @@ func (sS *SessionS) disconnectSession(s *Session, rsn string) (err error) { servMethod = "SMGClientV1.DisconnectSession" } var rply string - if err = clnt.conn.Call(servMethod, + if err = clnt.conn.Call(context.TODO(), servMethod, utils.AttrDisconnectSession{ EventStart: s.EventStart, Reason: rsn}, &rply); err != nil { @@ -1269,7 +1270,7 @@ func (sS *SessionS) syncSessions() { errChan := make(chan error) go func() { var queriedSessionIDs []*SessionID - if err := clnt.conn.Call(utils.SessionSv1GetActiveSessionIDs, + if err := clnt.conn.Call(context.TODO(), utils.SessionSv1GetActiveSessionIDs, utils.EmptyString, &queriedSessionIDs); err != nil { errChan <- err } @@ -1602,12 +1603,12 @@ func (sS *SessionS) chargeEvent(tnt string, ev engine.MapEvent, // APIs start here // Call is part of RpcClientConnection interface -func (sS *SessionS) Call(serviceMethod string, args interface{}, reply interface{}) error { +func (sS *SessionS) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return sS.CallBiRPC(nil, serviceMethod, args, reply) } -// CallBiRPC is part of utils.BiRPCServer interface to help internal connections do calls over rpcclient.ClientConnector interface -func (sS *SessionS) CallBiRPC(clnt rpcclient.ClientConnector, +// CallBiRPC is part of utils.BiRPCServer interface to help internal connections do calls over birpc.ClientConnector interface +func (sS *SessionS) CallBiRPC(clnt birpc.ClientConnector, serviceMethod string, args interface{}, reply interface{}) error { parts := strings.Split(serviceMethod, ".") if len(parts) != 2 { @@ -1644,7 +1645,7 @@ func (sS *SessionS) CallBiRPC(clnt rpcclient.ClientConnector, } // BiRPCv1GetActiveSessions returns the list of active sessions based on filter -func (sS *SessionS) BiRPCv1GetActiveSessions(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1GetActiveSessions(clnt birpc.ClientConnector, args *utils.SessionFilter, reply *[]*ExternalSession) (err error) { if args == nil { //protection in case on nil args = &utils.SessionFilter{} @@ -1657,7 +1658,7 @@ func (sS *SessionS) BiRPCv1GetActiveSessions(clnt rpcclient.ClientConnector, } // BiRPCv1GetActiveSessionsCount counts the active sessions -func (sS *SessionS) BiRPCv1GetActiveSessionsCount(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1GetActiveSessionsCount(clnt birpc.ClientConnector, args *utils.SessionFilter, reply *int) (err error) { if args == nil { //protection in case on nil args = &utils.SessionFilter{} @@ -1667,7 +1668,7 @@ func (sS *SessionS) BiRPCv1GetActiveSessionsCount(clnt rpcclient.ClientConnector } // BiRPCv1GetPassiveSessions returns the passive sessions handled by SessionS -func (sS *SessionS) BiRPCv1GetPassiveSessions(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1GetPassiveSessions(clnt birpc.ClientConnector, args *utils.SessionFilter, reply *[]*ExternalSession) (err error) { if args == nil { //protection in case on nil args = &utils.SessionFilter{} @@ -1680,7 +1681,7 @@ func (sS *SessionS) BiRPCv1GetPassiveSessions(clnt rpcclient.ClientConnector, } // BiRPCv1GetPassiveSessionsCount counts the passive sessions handled by the system -func (sS *SessionS) BiRPCv1GetPassiveSessionsCount(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1GetPassiveSessionsCount(clnt birpc.ClientConnector, args *utils.SessionFilter, reply *int) (err error) { if args == nil { //protection in case on nil args = &utils.SessionFilter{} @@ -1690,7 +1691,7 @@ func (sS *SessionS) BiRPCv1GetPassiveSessionsCount(clnt rpcclient.ClientConnecto } // BiRPCv1SetPassiveSession used for replicating Sessions -func (sS *SessionS) BiRPCv1SetPassiveSession(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1SetPassiveSession(clnt birpc.ClientConnector, s *Session, reply *string) (err error) { if s.CGRID == "" { return utils.NewErrMandatoryIeMissing(utils.CGRID) @@ -1724,7 +1725,7 @@ type ArgsReplicateSessions struct { // BiRPCv1ReplicateSessions will replicate active sessions to either args.Connections or the internal configured ones // args.Filter is used to filter the sessions which are replicated, CGRID is the only one possible for now -func (sS *SessionS) BiRPCv1ReplicateSessions(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1ReplicateSessions(clnt birpc.ClientConnector, args ArgsReplicateSessions, reply *string) (err error) { if err = sS.replicateSessions(args.CGRID, args.Passive, args.ConnIDs); err != nil { return utils.NewErrServerError(err) @@ -1885,7 +1886,7 @@ func (v1AuthReply *V1AuthorizeReply) AsNavigableMap() utils.NavigableMap2 { } // BiRPCv1AuthorizeEvent performs authorization for CGREvent based on specific components -func (sS *SessionS) BiRPCv1AuthorizeEvent(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1AuthorizeEvent(clnt birpc.ClientConnector, args *V1AuthorizeArgs, authReply *V1AuthorizeReply) (err error) { if args.CGREvent == nil { return utils.NewErrMandatoryIeMissing(utils.CGREventString) @@ -2012,7 +2013,7 @@ type V1AuthorizeReplyWithDigest struct { // BiRPCv1AuthorizeEventWithDigest performs authorization for CGREvent based on specific components // returning one level fields instead of multiple ones returned by BiRPCv1AuthorizeEvent -func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1AuthorizeEventWithDigest(clnt birpc.ClientConnector, args *V1AuthorizeArgs, authReply *V1AuthorizeReplyWithDigest) (err error) { var initAuthRply V1AuthorizeReply if err = sS.BiRPCv1AuthorizeEvent(clnt, args, &initAuthRply); err != nil { @@ -2167,7 +2168,7 @@ func (v1Rply *V1InitSessionReply) AsNavigableMap() utils.NavigableMap2 { } // BiRPCv1InitiateSession initiates a new session -func (sS *SessionS) BiRPCv1InitiateSession(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1InitiateSession(clnt birpc.ClientConnector, args *V1InitSessionArgs, rply *V1InitSessionReply) (err error) { if args.CGREvent == nil { return utils.NewErrMandatoryIeMissing(utils.CGREventString) @@ -2303,7 +2304,7 @@ type V1InitReplyWithDigest struct { } // BiRPCv1InitiateSessionWithDigest returns the formated result of InitiateSession -func (sS *SessionS) BiRPCv1InitiateSessionWithDigest(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1InitiateSessionWithDigest(clnt birpc.ClientConnector, args *V1InitSessionArgs, initReply *V1InitReplyWithDigest) (err error) { var initSessionRply V1InitSessionReply if err = sS.BiRPCv1InitiateSession(clnt, args, &initSessionRply); err != nil { @@ -2396,7 +2397,7 @@ func (v1Rply *V1UpdateSessionReply) AsNavigableMap() utils.NavigableMap2 { } // BiRPCv1UpdateSession updates an existing session, returning the duration which the session can still last -func (sS *SessionS) BiRPCv1UpdateSession(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1UpdateSession(clnt birpc.ClientConnector, args *V1UpdateSessionArgs, rply *V1UpdateSessionReply) (err error) { if args.CGREvent == nil { return utils.NewErrMandatoryIeMissing(utils.CGREventString) @@ -2534,7 +2535,7 @@ func (args *V1TerminateSessionArgs) ParseFlags(flags string) { } // BiRPCv1TerminateSession will stop debit loops as well as release any used resources -func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1TerminateSession(clnt birpc.ClientConnector, args *V1TerminateSessionArgs, rply *string) (err error) { if args.CGREvent == nil { return utils.NewErrMandatoryIeMissing(utils.CGREventString) @@ -2670,7 +2671,7 @@ func (sS *SessionS) BiRPCv1TerminateSession(clnt rpcclient.ClientConnector, } // BiRPCv1ProcessCDR sends the CDR to CDRs -func (sS *SessionS) BiRPCv1ProcessCDR(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1ProcessCDR(clnt birpc.ClientConnector, cgrEvWithArgDisp *utils.CGREventWithArgDispatcher, rply *string) (err error) { if cgrEvWithArgDisp.Event == nil { return utils.NewErrMandatoryIeMissing(utils.Event) @@ -2912,7 +2913,7 @@ func (v1Rply *V1ProcessMessageReply) AsNavigableMap() utils.NavigableMap2 { } // BiRPCv1ProcessMessage processes one event with the right subsystems based on arguments received -func (sS *SessionS) BiRPCv1ProcessMessage(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1ProcessMessage(clnt birpc.ClientConnector, args *V1ProcessMessageArgs, rply *V1ProcessMessageReply) (err error) { if args.CGREvent == nil { return utils.NewErrMandatoryIeMissing(utils.CGREventString) @@ -3096,7 +3097,7 @@ func (v1Rply *V1ProcessEventReply) AsNavigableMap() utils.NavigableMap2 { } // BiRPCv1ProcessEvent processes one event with the right subsystems based on arguments received -func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1ProcessEvent(clnt birpc.ClientConnector, args *V1ProcessEventArgs, rply *V1ProcessEventReply) (err error) { if args.CGREvent == nil { return utils.NewErrMandatoryIeMissing(utils.CGREventString) @@ -3405,7 +3406,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(clnt rpcclient.ClientConnector, } // BiRPCv1SyncSessions will sync sessions on demand -func (sS *SessionS) BiRPCv1SyncSessions(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1SyncSessions(clnt birpc.ClientConnector, ignParam string, reply *string) error { sS.syncSessions() *reply = utils.OK @@ -3413,7 +3414,7 @@ func (sS *SessionS) BiRPCv1SyncSessions(clnt rpcclient.ClientConnector, } // BiRPCv1ForceDisconnect will force disconnecting sessions matching sessions -func (sS *SessionS) BiRPCv1ForceDisconnect(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1ForceDisconnect(clnt birpc.ClientConnector, args *utils.SessionFilter, reply *string) (err error) { if args == nil { //protection in case on nil args = &utils.SessionFilter{} @@ -3451,7 +3452,7 @@ func (sS *SessionS) BiRPCv1ForceDisconnect(clnt rpcclient.ClientConnector, } // BiRPCv1RegisterInternalBiJSONConn will register the client for a bidirectional comunication -func (sS *SessionS) BiRPCv1RegisterInternalBiJSONConn(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1RegisterInternalBiJSONConn(clnt birpc.ClientConnector, ign string, reply *string) error { sS.RegisterIntBiJConn(clnt) *reply = utils.OK @@ -3460,7 +3461,7 @@ func (sS *SessionS) BiRPCv1RegisterInternalBiJSONConn(clnt rpcclient.ClientConne // BiRPCv1ActivateSessions is called to activate a list/all sessions // returns utils.ErrPartiallyExecuted in case of errors -func (sS *SessionS) BiRPCv1ActivateSessions(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1ActivateSessions(clnt birpc.ClientConnector, sIDs []string, reply *string) (err error) { if len(sIDs) == 0 { sS.pSsMux.RLock() @@ -3486,7 +3487,7 @@ func (sS *SessionS) BiRPCv1ActivateSessions(clnt rpcclient.ClientConnector, // BiRPCv1DeactivateSessions is called to deactivate a list/all active sessios // returns utils.ErrPartiallyExecuted in case of errors -func (sS *SessionS) BiRPCv1DeactivateSessions(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCv1DeactivateSessions(clnt birpc.ClientConnector, sIDs []string, reply *string) (err error) { if len(sIDs) == 0 { sS.aSsMux.RLock() @@ -3597,7 +3598,7 @@ func (sS *SessionS) processAttributes(cgrEv *utils.CGREvent, argDisp *utils.ArgD // BiRPCV1GetMaxUsage returns the maximum usage as seconds, compatible with OpenSIPS 2.3 // DEPRECATED, it will be removed in future versions -func (sS *SessionS) BiRPCV1GetMaxUsage(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCV1GetMaxUsage(clnt birpc.ClientConnector, ev engine.MapEvent, maxUsage *float64) (err error) { var rply *V1AuthorizeReply if err = sS.BiRPCv1AuthorizeEvent( @@ -3620,7 +3621,7 @@ func (sS *SessionS) BiRPCV1GetMaxUsage(clnt rpcclient.ClientConnector, // BiRPCV1InitiateSession is called on session start, returns the maximum number of seconds the session can last // DEPRECATED, it will be removed in future versions // Kept for compatibility with OpenSIPS 2.3 -func (sS *SessionS) BiRPCV1InitiateSession(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCV1InitiateSession(clnt birpc.ClientConnector, ev engine.MapEvent, maxUsage *float64) (err error) { var rply *V1InitSessionReply if err = sS.BiRPCv1InitiateSession( @@ -3643,7 +3644,7 @@ func (sS *SessionS) BiRPCV1InitiateSession(clnt rpcclient.ClientConnector, // BiRPCV1UpdateSession processes interim updates, returns remaining duration from the RALs // DEPRECATED, it will be removed in future versions // Kept for compatibility with OpenSIPS 2.3 -func (sS *SessionS) BiRPCV1UpdateSession(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCV1UpdateSession(clnt birpc.ClientConnector, ev engine.MapEvent, maxUsage *float64) (err error) { var rply *V1UpdateSessionReply if err = sS.BiRPCv1UpdateSession( @@ -3666,7 +3667,7 @@ func (sS *SessionS) BiRPCV1UpdateSession(clnt rpcclient.ClientConnector, // BiRPCV1TerminateSession is called on session end, should stop debit loop // DEPRECATED, it will be removed in future versions // Kept for compatibility with OpenSIPS 2.3 -func (sS *SessionS) BiRPCV1TerminateSession(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCV1TerminateSession(clnt birpc.ClientConnector, ev engine.MapEvent, rply *string) (err error) { return sS.BiRPCv1TerminateSession( clnt, @@ -3684,7 +3685,7 @@ func (sS *SessionS) BiRPCV1TerminateSession(clnt rpcclient.ClientConnector, // BiRPCV1ProcessCDR should send the CDR to CDRS // DEPRECATED, it will be removed in future versions // Kept for compatibility with OpenSIPS 2.3 -func (sS *SessionS) BiRPCV1ProcessCDR(clnt rpcclient.ClientConnector, +func (sS *SessionS) BiRPCV1ProcessCDR(clnt birpc.ClientConnector, ev engine.MapEvent, rply *string) (err error) { return sS.BiRPCv1ProcessCDR( clnt, diff --git a/sessions/sessions_test.go b/sessions/sessions_test.go index c399d40ca..23dd24e06 100644 --- a/sessions/sessions_test.go +++ b/sessions/sessions_test.go @@ -28,10 +28,11 @@ import ( "testing" "time" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/utils" - "github.com/cgrates/rpcclient" ) var attrs = &engine.AttrSProcessEventReply{ @@ -1791,7 +1792,7 @@ func TestNewSessionS(t *testing.T) { eOut := &SessionS{ cfg: cgrCGF, dm: nil, - biJClnts: make(map[rpcclient.ClientConnector]string), + biJClnts: make(map[birpc.ClientConnector]string), biJIDs: make(map[string]*biJClient), aSessions: make(map[string]*Session), aSessionsIdx: make(map[string]map[string]map[string]utils.StringMap), @@ -2340,16 +2341,16 @@ func TestSessionSfilterSessionsCount(t *testing.T) { } } -type clMock func(_ string, _ interface{}, _ interface{}) error +type clMock func(_ *context.Context, _ string, _ interface{}, _ interface{}) error -func (c clMock) Call(m string, a interface{}, r interface{}) error { - return c(m, a, r) +func (c clMock) Call(ctx *context.Context, m string, a interface{}, r interface{}) error { + return c(ctx, m, a, r) } func TestInitSession(t *testing.T) { cfg, _ := config.NewDefaultCGRConfig() cfg.SessionSCfg().ChargerSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)} - clientConect := make(chan rpcclient.ClientConnector, 1) - clientConect <- clMock(func(_ string, args interface{}, reply interface{}) error { + clientConect := make(chan birpc.ClientConnector, 1) + clientConect <- clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*[]*engine.ChrgSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2364,7 +2365,7 @@ func TestInitSession(t *testing.T) { } return nil }) - conMng := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + conMng := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): clientConect, }) sS := NewSessionS(cfg, nil, conMng) @@ -2415,7 +2416,7 @@ func TestBiRPCv1ProcessCDRNoTenant(t *testing.T) { } cfg.CdrsCfg().Enabled = true cfg.SessionSCfg().CDRsConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*string) if !cancast { return fmt.Errorf("can't cast") @@ -2431,9 +2432,9 @@ func TestBiRPCv1ProcessCDRNoTenant(t *testing.T) { } return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaCDRs): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -2476,7 +2477,7 @@ func TestBiRPCv1AuthorizeEventNoTenant(t *testing.T) { } cfg.AttributeSCfg().Enabled = true cfg.SessionSCfg().AttrSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*engine.AttrSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2507,9 +2508,9 @@ func TestBiRPCv1AuthorizeEventNoTenant(t *testing.T) { return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -2549,7 +2550,7 @@ func TestBiRPCv1AuthorizeEventWithDigestNoTenant(t *testing.T) { } cfg.AttributeSCfg().Enabled = true cfg.SessionSCfg().AttrSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*engine.AttrSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2580,9 +2581,9 @@ func TestBiRPCv1AuthorizeEventWithDigestNoTenant(t *testing.T) { return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -2620,7 +2621,7 @@ func TestBiRPCv1InitiateSessionNoTenant(t *testing.T) { } cfg.AttributeSCfg().Enabled = true cfg.SessionSCfg().AttrSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*engine.AttrSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2651,9 +2652,9 @@ func TestBiRPCv1InitiateSessionNoTenant(t *testing.T) { return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -2691,7 +2692,7 @@ func TestBiRPCv1InitiateSessionWithDigestNoTenant(t *testing.T) { } cfg.AttributeSCfg().Enabled = true cfg.SessionSCfg().AttrSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*engine.AttrSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2721,9 +2722,9 @@ func TestBiRPCv1InitiateSessionWithDigestNoTenant(t *testing.T) { } return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -2759,7 +2760,7 @@ func TestBiRPCv1UpdateSessionNoTenant(t *testing.T) { } cfg.AttributeSCfg().Enabled = true cfg.SessionSCfg().AttrSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*engine.AttrSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2789,9 +2790,9 @@ func TestBiRPCv1UpdateSessionNoTenant(t *testing.T) { } return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -2827,7 +2828,7 @@ func TestBiRPCv1TerminateSessionNoTenant(t *testing.T) { } cfg.ChargerSCfg().Enabled = true cfg.SessionSCfg().ChargerSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*[]*engine.ChrgSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2842,9 +2843,9 @@ func TestBiRPCv1TerminateSessionNoTenant(t *testing.T) { *rply = []*engine.ChrgSProcessEventReply{} return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.MetaChargers): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -2881,7 +2882,7 @@ func TestBiRPCv1ProcessMessageNoTenant(t *testing.T) { } cfg.AttributeSCfg().Enabled = true cfg.SessionSCfg().AttrSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*engine.AttrSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2911,9 +2912,9 @@ func TestBiRPCv1ProcessMessageNoTenant(t *testing.T) { } return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) @@ -2952,7 +2953,7 @@ func TestBiRPCv1ProcessEventNoTenant(t *testing.T) { } cfg.AttributeSCfg().Enabled = true cfg.SessionSCfg().AttrSConns = []string{utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes)} - clMock := clMock(func(_ string, args interface{}, reply interface{}) error { + clMock := clMock(func(_ *context.Context, _ string, args interface{}, reply interface{}) error { rply, cancast := reply.(*engine.AttrSProcessEventReply) if !cancast { return fmt.Errorf("can't cast") @@ -2982,9 +2983,9 @@ func TestBiRPCv1ProcessEventNoTenant(t *testing.T) { } return nil }) - chanClnt := make(chan rpcclient.ClientConnector, 1) + chanClnt := make(chan birpc.ClientConnector, 1) chanClnt <- clMock - connMngr := engine.NewConnManager(cfg, map[string]chan rpcclient.ClientConnector{ + connMngr := engine.NewConnManager(cfg, map[string]chan birpc.ClientConnector{ utils.ConcatenatedKey(utils.MetaInternal, utils.Attributes): chanClnt, }) db := engine.NewInternalDB(nil, nil, true, cfg.DataDbCfg().Items) diff --git a/utils/birpcint_client.go b/utils/birpcint_client.go index 2702cd7d8..04e045930 100644 --- a/utils/birpcint_client.go +++ b/utils/birpcint_client.go @@ -23,7 +23,8 @@ import ( "github.com/cenkalti/rpc2" rpc2_jsonrpc "github.com/cenkalti/rpc2/jsonrpc" - "github.com/cgrates/rpcclient" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" ) // NewBiJSONrpcClient will create a bidirectional JSON client connection @@ -42,12 +43,12 @@ func NewBiJSONrpcClient(addr string, handlers map[string]interface{}) (*rpc2.Cli // Interface which the server needs to work as BiRPCServer type BiRPCServer interface { - Call(string, interface{}, interface{}) error // So we can use it also as rpcclient.ClientConnector - CallBiRPC(rpcclient.ClientConnector, string, interface{}, interface{}) error + Call(*context.Context, string, interface{}, interface{}) error // So we can use it also as birpc.ClientConnector + CallBiRPC(birpc.ClientConnector, string, interface{}, interface{}) error } type BiRPCClient interface { - Call(string, interface{}, interface{}) error // So we can use it also as rpcclient.ClientConnector + Call(*context.Context, string, interface{}, interface{}) error // So we can use it also as birpc.ClientConnector ID() string } @@ -58,15 +59,15 @@ func NewBiRPCInternalClient(serverConn BiRPCServer) *BiRPCInternalClient { // Need separate client from the original RpcClientConnection since diretly passing the server is not enough without passing the client's reference type BiRPCInternalClient struct { serverConn BiRPCServer - clntConn rpcclient.ClientConnector // conn to reach client and do calls over it + clntConn birpc.ClientConnector // conn to reach client and do calls over it } // Used in case when clientConn is not available at init time (eg: SMGAsterisk who needs the biRPCConn at initialization) -func (clnt *BiRPCInternalClient) SetClientConn(clntConn rpcclient.ClientConnector) { +func (clnt *BiRPCInternalClient) SetClientConn(clntConn birpc.ClientConnector) { clnt.clntConn = clntConn } -// Part of rpcclient.ClientConnector interface -func (clnt *BiRPCInternalClient) Call(serviceMethod string, args interface{}, reply interface{}) error { +// Part of birpc.ClientConnector interface +func (clnt *BiRPCInternalClient) Call(ctx *context.Context, serviceMethod string, args interface{}, reply interface{}) error { return clnt.serverConn.CallBiRPC(clnt.clntConn, serviceMethod, args, reply) } diff --git a/utils/birpcint_client_test.go b/utils/birpcint_client_test.go index da76669fd..c6e8cebc9 100644 --- a/utils/birpcint_client_test.go +++ b/utils/birpcint_client_test.go @@ -24,7 +24,8 @@ import ( "testing" "github.com/cenkalti/rpc2" - "github.com/cgrates/rpcclient" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/context" ) func TestNewBiJSONrpcClient(t *testing.T) { @@ -57,8 +58,8 @@ type testBiRPCServer struct { reply interface{} } -func (*testBiRPCServer) Call(string, interface{}, interface{}) error { return nil } -func (t *testBiRPCServer) CallBiRPC(_ rpcclient.ClientConnector, metod string, args interface{}, reply interface{}) error { +func (*testBiRPCServer) Call(*context.Context, string, interface{}, interface{}) error { return nil } +func (t *testBiRPCServer) CallBiRPC(_ birpc.ClientConnector, metod string, args interface{}, reply interface{}) error { t.metod = metod t.args = args t.reply = reply @@ -81,7 +82,7 @@ func TestNewBiRPCInternalClient(t *testing.T) { t.Error("Client Connection must be not nil") } - err := rcv.Call(APIerSv1ComputeActionPlanIndexes, "arg1", "reply") + err := rcv.Call(context.Background(), APIerSv1ComputeActionPlanIndexes, "arg1", "reply") if err != nil { t.Error(err) } diff --git a/utils/server.go b/utils/server.go index 681d9a412..42a6559a8 100644 --- a/utils/server.go +++ b/utils/server.go @@ -32,13 +32,12 @@ import ( "net/rpc" "net/url" "os" - "reflect" "strings" "sync" "time" - "github.com/cenkalti/rpc2" - rpc2_jsonrpc "github.com/cenkalti/rpc2/jsonrpc" + "github.com/cgrates/birpc" + "github.com/cgrates/birpc/jsonrpc" "golang.org/x/net/websocket" ) @@ -51,6 +50,7 @@ func init() { } func NewServer() (s *Server) { s = new(Server) + s.birpcSrv = birpc.NewBirpcServer() s.httpMux = http.NewServeMux() s.httpsMux = http.NewServeMux() s.stopbiRPCServer = make(chan struct{}, 1) @@ -61,7 +61,7 @@ type Server struct { sync.RWMutex rpcEnabled bool httpEnabled bool - birpcSrv *rpc2.Server + birpcSrv *birpc.BirpcServer stopbiRPCServer chan struct{} // used in order to fully stop the biRPC httpsMux *http.ServeMux httpMux *http.ServeMux @@ -111,34 +111,12 @@ func (s *Server) RegisterHttpHandler(pattern string, handler http.Handler) { } // Registers a new BiJsonRpc name -func (s *Server) BiRPCRegisterName(method string, handlerFunc interface{}) { - s.RLock() - isNil := s.birpcSrv == nil - s.RUnlock() - if isNil { - s.Lock() - s.birpcSrv = rpc2.NewServer() - s.Unlock() - } - s.birpcSrv.Handle(method, handlerFunc) +func (s *Server) BiRPCRegisterName(name string, rcv interface{}) { + s.birpcSrv.RegisterName(name, rcv) } -func (s *Server) BiRPCRegister(rcvr interface{}) { - s.RLock() - isNil := s.birpcSrv == nil - s.RUnlock() - if isNil { - s.Lock() - s.birpcSrv = rpc2.NewServer() - s.Unlock() - } - rcvType := reflect.TypeOf(rcvr) - for i := 0; i < rcvType.NumMethod(); i++ { - method := rcvType.Method(i) - if method.Name != "Call" { - s.birpcSrv.Handle("SMGenericV1."+method.Name, method.Func.Interface()) - } - } +func (s *Server) BiRPCUnregisterName(name string) { + s.birpcSrv.UnregisterName(name) } func (s *Server) ServeJSON(addr string, exitChan chan bool) { @@ -304,7 +282,7 @@ func (s *Server) ServeHTTP(addr string, jsonRPCURL string, wsRPCURL string, } // ServeBiJSON create a gorutine to listen and serve as BiRPC server -func (s *Server) ServeBiJSON(addr string, onConn func(*rpc2.Client), onDis func(*rpc2.Client)) (err error) { +func (s *Server) ServeBiJSON(addr string, onConn, onDis func(birpc.ClientConnector)) (err error) { s.RLock() isNil := s.birpcSrv == nil s.RUnlock() @@ -331,7 +309,7 @@ func (s *Server) ServeBiJSON(addr string, onConn func(*rpc2.Client), onDis func( log.Fatal(err) return // stop if we get Accept error } - go s.birpcSrv.ServeCodec(rpc2_jsonrpc.NewJSONCodec(conn)) + go s.birpcSrv.ServeCodec(jsonrpc.NewJSONBirpcCodec(conn)) } }(lBiJSON) <-s.stopbiRPCServer // wait until server is stoped to close the listener