diff --git a/cmd/cgr-rater/cgr-rater.go b/cmd/cgr-rater/cgr-rater.go index bdbb15591..cd3542dbb 100644 --- a/cmd/cgr-rater/cgr-rater.go +++ b/cmd/cgr-rater/cgr-rater.go @@ -52,7 +52,6 @@ var ( rater_rpc_encoding = GOB // use JSON for RPC encoding balancer_enabled = false - balancer_listen_rater = "127.0.0.1:2000" // Rater server address balancer_listen = "127.0.0.1:2001" // Json RPC server address balancer_rpc_encoding = GOB // use JSON for RPC encoding @@ -99,7 +98,6 @@ func readConfig(configFn string) { rater_rpc_encoding, _ = c.GetString("rater", "rpc_encoding") balancer_enabled, _ = c.GetBool("balancer", "enabled") - balancer_listen_rater, _ = c.GetString("balancer", "listen_rater") balancer_listen, _ = c.GetString("balancer", "listen") balancer_rpc_encoding, _ = c.GetString("balancer", "rpc_encoding") @@ -258,7 +256,6 @@ func main() { } if balancer_enabled { go stopBalancerSingnalHandler() - go listenToRPCRequests(new(RaterServer), balancer_listen_rater, GOB) responder.Bal = bal go listenToRPCRequests(responder, balancer_listen, balancer_rpc_encoding) if rater_enabled { diff --git a/cmd/cgr-rater/rater_test.go b/cmd/cgr-rater/rater_test.go index 4f4f681e8..0d39acd35 100644 --- a/cmd/cgr-rater/rater_test.go +++ b/cmd/cgr-rater/rater_test.go @@ -34,7 +34,6 @@ func TestConfig(t *testing.T) { rater_rpc_encoding != "test" || balancer_enabled != true || - balancer_listen_rater != "test" || balancer_listen != "test" || balancer_rpc_encoding != "test" || @@ -67,7 +66,6 @@ func TestConfig(t *testing.T) { t.Log(rater_listen) t.Log(rater_rpc_encoding) t.Log(balancer_enabled) - t.Log(balancer_listen_rater) t.Log(balancer_listen) t.Log(balancer_rpc_encoding) t.Log(scheduler_enabled) diff --git a/cmd/cgr-rater/registration.go b/cmd/cgr-rater/registration.go index 35e81a0d9..b380f634d 100644 --- a/cmd/cgr-rater/registration.go +++ b/cmd/cgr-rater/registration.go @@ -27,42 +27,8 @@ import ( "os" "os/signal" "syscall" - "time" ) -type RaterServer struct{} - -/* -RPC method that receives a rater address, connects to it and ads the pair to the rater list for balancing -*/ -func (rs *RaterServer) RegisterRater(clientAddress string, replay *int) error { - log.Printf("Started rater %v registration...", clientAddress) - time.Sleep(2 * time.Second) // wait a second for Rater to start serving - client, err := rpc.Dial("tcp", clientAddress) - if err != nil { - log.Print("Could not connect to client!") - return err - } - bal.AddClient(clientAddress, client) - log.Printf("Rater %v registered succesfully.", clientAddress) - return nil -} - -/* -RPC method that recives a rater addres gets the connections and closes it and removes the pair from rater list. -*/ -func (rs *RaterServer) UnRegisterRater(clientAddress string, replay *int) error { - client, ok := bal.GetClient(clientAddress) - if ok { - client.Close() - bal.RemoveClient(clientAddress) - log.Print(fmt.Sprintf("Rater %v unregistered succesfully.", clientAddress)) - } else { - log.Print(fmt.Sprintf("Server %v was not on my watch!", clientAddress)) - } - return nil -} - /* Listens for SIGTERM, SIGINT, SIGQUIT system signals and shuts down all the registered raters. */ @@ -103,7 +69,7 @@ func unregisterFromBalancer() { } var reply int log.Print("Unregistering from balancer ", rater_balancer) - client.Call("RaterServer.UnRegisterRater", rater_listen, &reply) + client.Call("Responder.UnRegisterRater", rater_listen, &reply) if err := client.Close(); err != nil { log.Print("Could not close balancer unregistration!") exitChan <- true @@ -122,7 +88,7 @@ func registerToBalancer() { } var reply int log.Print("Registering to balancer ", rater_balancer) - client.Call("RaterServer.RegisterRater", rater_listen, &reply) + client.Call("Responder.RegisterRater", rater_listen, &reply) if err := client.Close(); err != nil { log.Print("Could not close balancer registration!") exitChan <- true diff --git a/conf/balancer.config b/conf/balancer.config index b1c8c12bf..4c9291b7c 100644 --- a/conf/balancer.config +++ b/conf/balancer.config @@ -21,12 +21,11 @@ redis_db = 10 # redis database number [balancer] enabled = true # Start balancer server listen = 127.0.0.1:2001 # Balancer listen interface -listen_rater = 127.0.0.1:2000 # Balancer listen interface rpc_encoding = gob # use JSON for RPC encoding [rater] enabled = true -listen = 127.0.0.1:2001 # listening address hostort, internal for internal communication only +listen = 127.0.0.1:1234 # listening address hostort, internal for internal communication only balancer = disabled # if defined it will register to balancer as worker rpc_encoding = gob # use JSON for RPC encoding diff --git a/conf/balancer_standalone.config b/conf/balancer_standalone.config index 950c620a3..2dec0685a 100644 --- a/conf/balancer_standalone.config +++ b/conf/balancer_standalone.config @@ -21,14 +21,11 @@ redis_db = 10 # redis database number [balancer] enabled = true # Start balancer server listen = 127.0.0.1:2001 # Balancer listen interface -listen_rater = 127.0.0.1:2000 # Balancer listen interface rpc_encoding = gob # use JSON for RPC encoding [rater] enabled = false -listen = 127.0.0.1:2001 # listening address hostort, internal for internal communication only -balancer = 127.0.0.1:2000 # if defined it will register to balancer as worker -rpc_encoding = gob # use JSON for RPC encoding + [stats_server] enabled = true diff --git a/conf/full.config b/conf/full.config index 0a0e88bd9..b72198d20 100644 --- a/conf/full.config +++ b/conf/full.config @@ -15,18 +15,17 @@ # along with this program. If not, see [global] -redis_server = 127.0.0.1:6379 #redis address hostort +redis_server = 127.0.0.1:6379 #redis address host:port redis_db = 10 # redis database number [balancer] enabled = false # Start balancer server listen = 127.0.0.1:2001 # Balancer listen interface -listen_rater = 127.0.0.1:2000 # Balancer listen interface rpc_encoding = gob # use JSON for RPC encoding [rater] enabled = true -listen = 127.0.0.1:2001 # listening address hostort, internal for internal communication only +listen = 127.0.0.1:2001 # listening address host:port, internal for internal communication only balancer = disabled # if defined it will register to balancer as worker rpc_encoding = gob # use JSON for RPC encoding @@ -50,8 +49,8 @@ enabled = true [session_manager] enabled = true rater = 127.0.0.1:2000 #address where to access rater. Can be internal, direct rater address or the address of a balancer -freeswitch_server = localhost:8021 # freeswitch address hostort -freeswitch_pass = ClueCon # freeswitch address hostort +freeswitch_server = localhost:8021 # freeswitch address host:port +freeswitch_pass = ClueCon # freeswitch address host:port rpc_encoding = gob # use JSON for RPC encoding [stats_server] diff --git a/conf/rater.config b/conf/rater.config index 6b3e34218..c1ac6ad27 100644 --- a/conf/rater.config +++ b/conf/rater.config @@ -20,6 +20,6 @@ redis_db = 10 # redis database number [rater] enabled = true -listen = 127.0.0.1:2001 # listening address hostort, internal for internal communication only -balancer = 127.0.0.1:2000 # if defined it will register to balancer as worker +listen = 127.0.0.1:1234 # listening address host:port, internal for internal communication only +balancer = 127.0.0.1:2001 # if defined it will register to balancer as worker rpc_encoding = gob # use JSON for RPC encoding diff --git a/conf/rater_standalone.config b/conf/rater_standalone.config index a81dcc42b..62d2e71a2 100644 --- a/conf/rater_standalone.config +++ b/conf/rater_standalone.config @@ -15,12 +15,12 @@ # along with this program. If not, see [global] -redis_server = 127.0.0.1:6379 #redis address hostort +redis_server = 127.0.0.1:6379 #redis address host:port redis_db = 10 # redis database number [rater] enabled = true -listen = 127.0.0.1:2001 # listening address hostort, internal for internal communication only +listen = 127.0.0.1:2001 # listening address host:port, internal for internal communication only balancer = disabled # if defined it will register to balancer as worker rpc_encoding = gob # use JSON for RPC encoding diff --git a/conf/scheduler.config b/conf/scheduler.config index a0af8ac4f..0d8491151 100644 --- a/conf/scheduler.config +++ b/conf/scheduler.config @@ -15,12 +15,12 @@ # along with this program. If not, see [global] -redis_server = 127.0.0.1:6379 #redis address hostort +redis_server = 127.0.0.1:6379 #redis address host:port redis_db = 10 # redis database number [rater] enabled = true -listen = 127.0.0.1:2001 # listening address hostort, internal for internal communication only +listen = 127.0.0.1:2001 # listening address host:port, internal for internal communication only balancer = disabled # if defined it will register to balancer as worker rpc_encoding = gob # use JSON for RPC encoding diff --git a/conf/session_manager.config b/conf/session_manager.config index 2fe7fdc27..9327f9f84 100644 --- a/conf/session_manager.config +++ b/conf/session_manager.config @@ -15,19 +15,19 @@ # along with this program. If not, see [global] -redis_server = 127.0.0.1:6379 #redis address hostort +redis_server = 127.0.0.1:6379 #redis address host:port redis_db = 10 # redis database number [rater] enable = true -listen = 127.0.0.1:2001 # listening address hostort, internal for internal communication only +listen = 127.0.0.1:2001 # listening address host:port, internal for internal communication only balancer = disabled # if defined it will register to balancer as worker rpc_encoding = gob # use JSON for RPC encoding [session_manager] enabled = true rater = internal #address where to access rater. Can be internal, direct rater address or the address of a balancer -freeswitch_server = localhost:8021 # freeswitch address hostort -freeswitch_pass = ClueCon # freeswitch address hostort +freeswitch_server = localhost:8021 # freeswitch address host:port +freeswitch_pass = ClueCon # freeswitch address host:port rpc_encoding = gob # use JSON for RPC encoding diff --git a/data/test.config b/data/test.config index fc1c054dc..c7127673c 100644 --- a/data/test.config +++ b/data/test.config @@ -15,18 +15,17 @@ # along with this program. If not, see [global] -redis_server = test #redis address hostort +redis_server = test #redis address host:port redis_db = 1 # redis database number [balancer] enabled = true # Start balancer server listen = test # Balancer listen interface -listen_rater = test # Balancer listen interface rpc_encoding = test # use JSON for RPC encoding [rater] enabled = true -listen = test # listening address hostort, internal for internal communication only +listen = test # listening address host:port, internal for internal communication only balancer = test # if defined it will register to balancer as worker rpc_encoding = test # use JSON for RPC encoding @@ -50,8 +49,8 @@ enabled = true [session_manager] enabled = true rater = test #address where to access rater. Can be internal, direct rater address or the address of a balancer -freeswitch_server = test # freeswitch address hostort -freeswitch_pass = test # freeswitch address hostort +freeswitch_server = test # freeswitch address host:port +freeswitch_pass = test # freeswitch address host:port rpc_encoding = test # use JSON for RPC encoding [stats_server] diff --git a/timespans/responder.go b/timespans/responder.go index ecd19c2ed..8bf70191b 100644 --- a/timespans/responder.go +++ b/timespans/responder.go @@ -23,6 +23,7 @@ import ( "fmt" "github.com/cgrates/cgrates/balancer" "log" + "net/rpc" "reflect" "runtime" "strings" @@ -198,6 +199,37 @@ func (rs *Responder) callMethod(key *CallDescriptor, method string) (reply float return } +/* +RPC method that receives a rater address, connects to it and ads the pair to the rater list for balancing +*/ +func (rs *Responder) RegisterRater(clientAddress string, replay *int) error { + log.Printf("Started rater %v registration...", clientAddress) + time.Sleep(2 * time.Second) // wait a second for Rater to start serving + client, err := rpc.Dial("tcp", clientAddress) + if err != nil { + log.Print("Could not connect to client!") + return err + } + rs.Bal.AddClient(clientAddress, client) + log.Printf("Rater %v registered succesfully.", clientAddress) + return nil +} + +/* +RPC method that recives a rater addres gets the connections and closes it and removes the pair from rater list. +*/ +func (rs *Responder) UnRegisterRater(clientAddress string, replay *int) error { + client, ok := rs.Bal.GetClient(clientAddress) + if ok { + client.Close() + rs.Bal.RemoveClient(clientAddress) + log.Print(fmt.Sprintf("Rater %v unregistered succesfully.", clientAddress)) + } else { + log.Print(fmt.Sprintf("Server %v was not on my watch!", clientAddress)) + } + return nil +} + // Reflection worker type for not standalone balancer type ResponderWorker struct{}