From f10f9351ec467a2a6d39d6ab0b0fbe8f81d00b13 Mon Sep 17 00:00:00 2001 From: andronache Date: Wed, 7 Jul 2021 10:02:13 +0300 Subject: [PATCH] Removed coresv1 from dispatchers --- apier/v1/api_interfaces_test.go | 1 - apier/v1/dispatcher.go | 38 ----- dispatchers/core.go | 147 ------------------- dispatchers/core_it_test.go | 246 -------------------------------- dispatchers/core_test.go | 107 -------------- services/dispatchers.go | 3 - 6 files changed, 542 deletions(-) delete mode 100644 dispatchers/core_test.go diff --git a/apier/v1/api_interfaces_test.go b/apier/v1/api_interfaces_test.go index 1a0b6b740..3b1a321c1 100644 --- a/apier/v1/api_interfaces_test.go +++ b/apier/v1/api_interfaces_test.go @@ -100,7 +100,6 @@ func TestConfigSv1Interface(t *testing.T) { } func TestCoreSv1Interface(t *testing.T) { - _ = CoreSv1Interface(NewDispatcherCoreSv1(nil)) _ = CoreSv1Interface(NewCoreSv1(nil)) } diff --git a/apier/v1/dispatcher.go b/apier/v1/dispatcher.go index 83e69f55e..534187831 100644 --- a/apier/v1/dispatcher.go +++ b/apier/v1/dispatcher.go @@ -870,44 +870,6 @@ func (dS *DispatcherConfigSv1) GetConfigAsJSON(args *config.SectionWithAPIOpts, return dS.dS.ConfigSv1GetConfigAsJSON(args, reply) } -func NewDispatcherCoreSv1(dps *dispatchers.DispatcherService) *DispatcherCoreSv1 { - return &DispatcherCoreSv1{dS: dps} -} - -// Exports RPC from RLs -type DispatcherCoreSv1 struct { - dS *dispatchers.DispatcherService -} - -func (dS *DispatcherCoreSv1) Status(args *utils.TenantWithAPIOpts, reply *map[string]interface{}) error { - return dS.dS.CoreSv1Status(args, reply) -} - -// Ping used to detreminate if component is active -func (dS *DispatcherCoreSv1) Ping(args *utils.CGREvent, reply *string) error { - return dS.dS.CoreSv1Ping(args, reply) -} - -func (dS *DispatcherCoreSv1) Sleep(arg *utils.DurationArgs, reply *string) error { - return dS.dS.CoreSv1Sleep(arg, reply) -} - -func (dS *DispatcherCoreSv1) StartCPUProfiling(args *utils.DirectoryArgs, reply *string) error { - return dS.dS.CoreSv1StartCPUProfiling(args, reply) -} - -func (dS *DispatcherCoreSv1) StopCPUProfiling(args *utils.TenantWithAPIOpts, reply *string) error { - return dS.dS.CoreSv1StopCPUProfiling(args, reply) -} - -func (dS *DispatcherCoreSv1) StartMemoryProfiling(args *utils.MemoryPrf, reply *string) error { - return dS.dS.CoreSv1StartMemoryProfiling(args, reply) -} - -func (dS *DispatcherCoreSv1) StopMemoryProfiling(args *utils.TenantWithAPIOpts, reply *string) error { - return dS.dS.CoreSv1StopMemoryProfiling(args, reply) -} - func NewDispatcherRALsV1(dps *dispatchers.DispatcherService) *DispatcherRALsV1 { return &DispatcherRALsV1{dS: dps} } diff --git a/dispatchers/core.go b/dispatchers/core.go index d66f506ae..e69de29bb 100644 --- a/dispatchers/core.go +++ b/dispatchers/core.go @@ -1,147 +0,0 @@ -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ - -package dispatchers - -import ( - "time" - - "github.com/cgrates/cgrates/utils" -) - -func (dS *DispatcherService) CoreSv1Status(args *utils.TenantWithAPIOpts, - reply *map[string]interface{}) (err error) { - tnt := dS.cfg.GeneralCfg().DefaultTenant - if args.Tenant != utils.EmptyString { - tnt = args.Tenant - } - if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { - if err = dS.authorize(utils.CoreSv1Status, tnt, - utils.IfaceAsString(args.APIOpts[utils.OptsAPIKey]), utils.TimePointer(time.Now())); err != nil { - return - } - } - return dS.Dispatch(&utils.CGREvent{ - Tenant: tnt, - APIOpts: args.APIOpts, - }, utils.MetaCore, utils.CoreSv1Status, args, reply) -} - -func (dS *DispatcherService) CoreSv1Ping(args *utils.CGREvent, reply *string) (err error) { - tnt := dS.cfg.GeneralCfg().DefaultTenant - if args != nil && args.Tenant != utils.EmptyString { - tnt = args.Tenant - } - if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { - if err = dS.authorize(utils.CoreSv1Ping, tnt, - utils.IfaceAsString(args.APIOpts[utils.OptsAPIKey]), args.Time); err != nil { - return - } - } - return dS.Dispatch(args, utils.MetaCore, utils.CoreSv1Ping, args, reply) -} - -func (dS *DispatcherService) CoreSv1Sleep(args *utils.DurationArgs, - reply *string) (err error) { - tnt := dS.cfg.GeneralCfg().DefaultTenant - if args.Tenant != utils.EmptyString { - tnt = args.Tenant - } - if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { - if err = dS.authorize(utils.CoreSv1Sleep, tnt, - utils.IfaceAsString(args.APIOpts[utils.OptsAPIKey]), utils.TimePointer(time.Now())); err != nil { - return - } - } - return dS.Dispatch(&utils.CGREvent{ - Tenant: tnt, - APIOpts: args.APIOpts, - }, utils.MetaCore, utils.CoreSv1Sleep, args, reply) -} - -func (dS *DispatcherService) CoreSv1StartCPUProfiling(args *utils.DirectoryArgs, - reply *string) (err error) { - tnt := dS.cfg.GeneralCfg().DefaultTenant - if args.Tenant != utils.EmptyString { - tnt = args.Tenant - } - if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { - if err = dS.authorize(utils.CoreSv1StartCPUProfiling, tnt, - utils.IfaceAsString(args.APIOpts[utils.OptsAPIKey]), utils.TimePointer(time.Now())); err != nil { - return - } - } - return dS.Dispatch(&utils.CGREvent{ - Tenant: tnt, - APIOpts: args.APIOpts, - }, utils.MetaCore, utils.CoreSv1StartCPUProfiling, args, reply) -} - -func (dS *DispatcherService) CoreSv1StopCPUProfiling(args *utils.TenantWithAPIOpts, - reply *string) (err error) { - tnt := dS.cfg.GeneralCfg().DefaultTenant - if args.Tenant != utils.EmptyString { - tnt = args.Tenant - } - if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { - if err = dS.authorize(utils.CoreSv1StopCPUProfiling, tnt, - utils.IfaceAsString(args.APIOpts[utils.OptsAPIKey]), utils.TimePointer(time.Now())); err != nil { - return - } - } - return dS.Dispatch(&utils.CGREvent{ - Tenant: tnt, - APIOpts: args.APIOpts, - }, utils.MetaCore, utils.CoreSv1StopCPUProfiling, args, reply) -} - -func (dS *DispatcherService) CoreSv1StartMemoryProfiling(args *utils.MemoryPrf, - reply *string) (err error) { - tnt := dS.cfg.GeneralCfg().DefaultTenant - if args.Tenant != utils.EmptyString { - tnt = args.Tenant - } - if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { - if err = dS.authorize(utils.CoreSv1StartMemoryProfiling, tnt, - utils.IfaceAsString(args.APIOpts[utils.OptsAPIKey]), utils.TimePointer(time.Now())); err != nil { - return - } - } - return dS.Dispatch(&utils.CGREvent{ - Tenant: tnt, - APIOpts: args.APIOpts, - }, utils.MetaCore, utils.CoreSv1StartMemoryProfiling, args, reply) -} - -func (dS *DispatcherService) CoreSv1StopMemoryProfiling(args *utils.TenantWithAPIOpts, - reply *string) (err error) { - tnt := dS.cfg.GeneralCfg().DefaultTenant - if args.Tenant != utils.EmptyString { - tnt = args.Tenant - } - if len(dS.cfg.DispatcherSCfg().AttributeSConns) != 0 { - if err = dS.authorize(utils.CoreSv1StopMemoryProfiling, tnt, - utils.IfaceAsString(args.APIOpts[utils.OptsAPIKey]), utils.TimePointer(time.Now())); err != nil { - return - } - } - return dS.Dispatch(&utils.CGREvent{ - Tenant: tnt, - APIOpts: args.APIOpts, - }, utils.MetaCore, utils.CoreSv1StopMemoryProfiling, args, reply) -} diff --git a/dispatchers/core_it_test.go b/dispatchers/core_it_test.go index 270b69f9f..e69de29bb 100644 --- a/dispatchers/core_it_test.go +++ b/dispatchers/core_it_test.go @@ -1,246 +0,0 @@ -// +build integration - -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ - -package dispatchers - -import ( - "fmt" - "net/rpc" - "os" - "path" - "testing" - "time" - - "github.com/cgrates/cgrates/utils" -) - -var sTestsDspCore = []func(t *testing.T){ - testDspCoreLoad, - testDspCoreCPUProfile, - testDspCoreMemoryProfile, -} - -//Test start here -func TestDspCoreIT(t *testing.T) { - var config1, config2, config3 string - switch *dbType { - case utils.MetaInternal: - t.SkipNow() - case utils.MetaMySQL: - config1 = "all_mysql" - config2 = "all2_mysql" - config3 = "dispatchers_mysql" - case utils.MetaMongo: - config1 = "all_mongo" - config2 = "all2_mongo" - config3 = "dispatchers_mongo" - case utils.MetaPostgres: - t.SkipNow() - default: - t.Fatal("Unknown Database type") - } - - dispDIR := "dispatchers" - if *encoding == utils.MetaGOB { - dispDIR += "_gob" - } - testDsp(t, sTestsDspCore, "TestDspCoreIT", config1, config2, config3, "tutorial", "oldtutorial", dispDIR) -} - -func testDspCoreLoad(t *testing.T) { - var status map[string]interface{} - statusTnt := utils.TenantWithAPIOpts{ - Tenant: "cgrates.org", - APIOpts: map[string]interface{}{ - utils.OptsAPIKey: "core12345", - utils.OptsRouteID: "core1", - "EventType": "LoadDispatcher", - }, - } - expNodeID := "ALL" - if err := dispEngine.RPC.Call(utils.CoreSv1Status, statusTnt, &status); err != nil { - t.Error(err) - } else if status[utils.NodeID] == "ALL2" { - expNodeID = "ALL2" - } - dur := &utils.DurationArgs{ - Duration: 500 * time.Millisecond, - Tenant: "cgrates.org", - APIOpts: map[string]interface{}{ - utils.OptsAPIKey: "core12345", - utils.OptsRouteID: "core1", - "EventType": "LoadDispatcher", - }, - } - var rply string - statusTnt2 := utils.TenantWithAPIOpts{ - Tenant: "cgrates.org", - APIOpts: map[string]interface{}{ - utils.OptsAPIKey: "core12345", - "EventType": "LoadDispatcher", - }, - } - call := dispEngine.RPC.Go(utils.CoreSv1Sleep, dur, &rply, make(chan *rpc.Call, 1)) - if err := dispEngine.RPC.Call(utils.CoreSv1Status, statusTnt2, &status); err != nil { - t.Error(err) - } else if status[utils.NodeID] != expNodeID { - t.Errorf("Expected status to be called on node <%s> but it was called on <%s>", expNodeID, status[utils.NodeID]) - } - if ans := <-call.Done; ans.Error != nil { - t.Fatal(ans.Error) - } else if rply != utils.OK { - t.Errorf("Expected: %q ,received: %q", utils.OK, rply) - } -} - -func testDspCoreCPUProfile(t *testing.T) { - var reply string - args := &utils.DirectoryArgs{ - DirPath: "/tmp", - } - //apikey is missing - expectedErr := "MANDATORY_IE_MISSING: [ApiKey]" - if err := dispEngine.RPC.Call(utils.CoreSv1StartCPUProfiling, - args, &reply); err == nil || err.Error() != expectedErr { - t.Errorf("Expected %+v, received %+v", expectedErr, err) - } - - args = &utils.DirectoryArgs{ - DirPath: "/tmp", - APIOpts: map[string]interface{}{ - utils.OptsAPIKey: "core12345", - }, - } - if err := dispEngine.RPC.Call(utils.CoreSv1StartCPUProfiling, - args, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Unexpected reply returned") - } - - argsStop := &utils.TenantWithAPIOpts{ - APIOpts: map[string]interface{}{ - utils.OptsAPIKey: "core12345", - }, - } - if err := dispEngine.RPC.Call(utils.CoreSv1StopCPUProfiling, - argsStop, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Unexpected reply returned") - } - file, err := os.Open(path.Join("/tmp", utils.CpuPathCgr)) - if err != nil { - t.Error(err) - } - defer file.Close() - - //compare the size - size, err := file.Stat() - if err != nil { - t.Error(err) - } else if size.Size() < int64(415) { - t.Errorf("Size of CPUProfile %v is lower that expected", size.Size()) - } - //after we checked that CPUProfile was made successfully, can delete it - if err := os.Remove(path.Join("/tmp", utils.CpuPathCgr)); err != nil { - t.Error(err) - } -} - -func testDspCoreMemoryProfile(t *testing.T) { - var reply string - args := &utils.MemoryPrf{ - DirPath: "/tmp", - Interval: 100 * time.Millisecond, - NrFiles: 2, - } - //missing apiKey - expectedErr := "MANDATORY_IE_MISSING: [ApiKey]" - if err := dispEngine.RPC.Call(utils.CoreSv1StartMemoryProfiling, - args, &reply); err == nil || err.Error() != expectedErr { - t.Errorf("Expected %+v, received %+v", expectedErr, err) - } - args = &utils.MemoryPrf{ - DirPath: "/tmp", - Interval: 100 * time.Millisecond, - NrFiles: 2, - APIOpts: map[string]interface{}{ - utils.OptsAPIKey: "core12345", - }, - } - if err := dispEngine.RPC.Call(utils.CoreSv1StartMemoryProfiling, - args, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Unexpected reply returned") - } - - dur := &utils.DurationArgs{ - Duration: 500 * time.Millisecond, - Tenant: "cgrates.org", - APIOpts: map[string]interface{}{ - utils.OptsAPIKey: "core12345", - utils.OptsRouteID: "core1", - "EventType": "LoadDispatcher", - }, - } - - if err := dispEngine.RPC.Call(utils.CoreSv1Sleep, - dur, &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Unexpected reply returned") - } - - argsStop := &utils.TenantWithAPIOpts{ - APIOpts: map[string]interface{}{ - utils.OptsAPIKey: "core12345", - }, - } - if err := dispEngine.RPC.Call(utils.CoreSv1StopMemoryProfiling, - argsStop , &reply); err != nil { - t.Error(err) - } else if reply != utils.OK { - t.Errorf("Unexpected reply returned") - } - - //mem_prof1, mem_prof2 - for i := 1; i <= 2; i++ { - file, err := os.Open(path.Join("/tmp", fmt.Sprintf("mem%v.prof", i))) - if err != nil { - t.Error(err) - } - defer file.Close() - - //compare the size - size, err := file.Stat() - if err != nil { - t.Error(err) - } else if size.Size() < int64(415) { - t.Errorf("Size of MemoryProfile %v is lower that expected", size.Size()) - } - //after we checked that CPUProfile was made successfully, can delete it - if err := os.Remove(path.Join("/tmp", fmt.Sprintf("mem%v.prof", i))); err != nil { - t.Error(err) - } - } - -} diff --git a/dispatchers/core_test.go b/dispatchers/core_test.go deleted file mode 100644 index 12c3363aa..000000000 --- a/dispatchers/core_test.go +++ /dev/null @@ -1,107 +0,0 @@ -/* -Real-time Online/Offline Charging System (OCS) for Telecom & ISP environments -Copyright (C) ITsysCOM GmbH - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see -*/ - -package dispatchers - -import ( - "testing" - - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/utils" -) - -func TestDspCoreSv1StatusNil(t *testing.T) { - cgrCfg := config.NewDefaultCGRConfig() - dspSrv := NewDispatcherService(nil, cgrCfg, nil, nil) - CGREvent := &utils.TenantWithAPIOpts{ - Tenant: "tenant", - } - var reply *map[string]interface{} - result := dspSrv.CoreSv1Status(CGREvent, reply) - expected := "DISPATCHER_ERROR:NO_DATABASE_CONNECTION" - if result == nil || result.Error() != expected { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) - } -} - -func TestDspCoreSv1StatusErrorNil(t *testing.T) { - cgrCfg := config.NewDefaultCGRConfig() - dspSrv := NewDispatcherService(nil, cgrCfg, nil, nil) - cgrCfg.DispatcherSCfg().AttributeSConns = []string{"test"} - CGREvent := &utils.TenantWithAPIOpts{} - var reply *map[string]interface{} - result := dspSrv.CoreSv1Status(CGREvent, reply) - expected := "MANDATORY_IE_MISSING: [ApiKey]" - if result == nil || result.Error() != expected { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) - } -} - -func TestDspCoreSv1PingNil(t *testing.T) { - cgrCfg := config.NewDefaultCGRConfig() - dspSrv := NewDispatcherService(nil, cgrCfg, nil, nil) - CGREvent := &utils.CGREvent{ - Tenant: "tenant", - } - var reply *string - result := dspSrv.CoreSv1Ping(CGREvent, reply) - expected := "DISPATCHER_ERROR:NO_DATABASE_CONNECTION" - if result == nil || result.Error() != expected { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) - } -} - -func TestDspCoreSv1PingErrorNil(t *testing.T) { - cgrCfg := config.NewDefaultCGRConfig() - dspSrv := NewDispatcherService(nil, cgrCfg, nil, nil) - cgrCfg.DispatcherSCfg().AttributeSConns = []string{"test"} - CGREvent := &utils.CGREvent{} - var reply *string - result := dspSrv.CoreSv1Ping(CGREvent, reply) - expected := "MANDATORY_IE_MISSING: [ApiKey]" - if result == nil || result.Error() != expected { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) - } -} - -func TestDspCoreSv1SleepNil(t *testing.T) { - cgrCfg := config.NewDefaultCGRConfig() - dspSrv := NewDispatcherService(nil, cgrCfg, nil, nil) - CGREvent := &utils.DurationArgs{ - Tenant: "tenant", - } - var reply *string - result := dspSrv.CoreSv1Sleep(CGREvent, reply) - expected := "DISPATCHER_ERROR:NO_DATABASE_CONNECTION" - if result == nil || result.Error() != expected { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) - } -} - -func TestDspCoreSv1SleepErrorNil(t *testing.T) { - cgrCfg := config.NewDefaultCGRConfig() - dspSrv := NewDispatcherService(nil, cgrCfg, nil, nil) - cgrCfg.DispatcherSCfg().AttributeSConns = []string{"test"} - CGREvent := &utils.DurationArgs{} - var reply *string - result := dspSrv.CoreSv1Sleep(CGREvent, reply) - expected := "MANDATORY_IE_MISSING: [ApiKey]" - if result == nil || result.Error() != expected { - t.Errorf("\nExpected <%+v>, \nReceived <%+v>", expected, result) - } -} diff --git a/services/dispatchers.go b/services/dispatchers.go index 0438550d7..b94782917 100644 --- a/services/dispatchers.go +++ b/services/dispatchers.go @@ -133,9 +133,6 @@ func (dspS *DispatcherService) Start() (err error) { dspS.server.RpcRegisterName(utils.ConfigSv1, v1.NewDispatcherConfigSv1(dspS.dspS)) - dspS.server.RpcRegisterName(utils.CoreSv1, - v1.NewDispatcherCoreSv1(dspS.dspS)) - dspS.server.RpcRegisterName(utils.RALsV1, v1.NewDispatcherRALsV1(dspS.dspS))