mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
better register/unregister
This commit is contained in:
@@ -48,9 +48,8 @@ var (
|
||||
balancer_web_status_server = "127.0.0.1:8000" // Web server address
|
||||
balancer_json = false // use JSON for RPC encoding
|
||||
|
||||
scheduler_enabled = false
|
||||
scheduler_standalone = false // run standalone (no other service)
|
||||
scheduler_json = false
|
||||
scheduler_enabled = false
|
||||
scheduler_json = false
|
||||
|
||||
sm_enabled = false
|
||||
sm_standalone = false // run standalone
|
||||
@@ -96,7 +95,6 @@ func readConfig(configFn string) {
|
||||
balancer_json, _ = c.GetBool("balancer", "json")
|
||||
|
||||
scheduler_enabled, _ = c.GetBool("scheduler", "enabled")
|
||||
scheduler_standalone, _ = c.GetBool("scheduler", "standalone")
|
||||
scheduler_json, _ = c.GetBool("scheduler", "json")
|
||||
|
||||
sm_enabled, _ = c.GetBool("session_manager", "enabled")
|
||||
@@ -117,27 +115,6 @@ func readConfig(configFn string) {
|
||||
mediator_password, _ = c.GetString("mediator", "password")
|
||||
}
|
||||
|
||||
func resolveStandaloneConfilcts() {
|
||||
if balancer_standalone {
|
||||
rater_standalone = false
|
||||
}
|
||||
if scheduler_standalone {
|
||||
rater_standalone = false
|
||||
balancer_standalone = false
|
||||
}
|
||||
if sm_standalone {
|
||||
rater_standalone = false
|
||||
balancer_standalone = false
|
||||
scheduler_standalone = false
|
||||
}
|
||||
if mediator_standalone {
|
||||
rater_standalone = false
|
||||
balancer_standalone = false
|
||||
scheduler_standalone = false
|
||||
sm_standalone = false
|
||||
}
|
||||
}
|
||||
|
||||
func listenToRPCRequests(responder interface{}, rpcAddress string, json bool) {
|
||||
l, err := net.Listen("tcp", rpcAddress)
|
||||
defer l.Close()
|
||||
@@ -179,7 +156,9 @@ func main() {
|
||||
flag.Parse()
|
||||
runtime.GOMAXPROCS(runtime.NumCPU())
|
||||
readConfig(*config)
|
||||
resolveStandaloneConfilcts()
|
||||
if balancer_standalone {
|
||||
rater_standalone = false
|
||||
}
|
||||
getter, err := timespans.NewRedisStorage(redis_server, redis_db)
|
||||
if err != nil {
|
||||
timespans.Logger.Crit("Could not connect to redis, exiting!")
|
||||
@@ -189,8 +168,8 @@ func main() {
|
||||
timespans.SetStorageGetter(getter)
|
||||
|
||||
if !rater_standalone && !balancer_enabled {
|
||||
go registerToBalancer(rater_balancer_server, rater_listen)
|
||||
go stopRaterSingnalHandler(rater_balancer_server, rater_listen, getter)
|
||||
go registerToBalancer()
|
||||
go stopRaterSingnalHandler()
|
||||
}
|
||||
if !balancer_enabled {
|
||||
go listenToRPCRequests(&Responder{new(DirectResponder)}, rater_listen, rater_json)
|
||||
@@ -202,5 +181,13 @@ func main() {
|
||||
go listenToHttpRequests()
|
||||
}
|
||||
|
||||
if scheduler_enabled {
|
||||
go func() {
|
||||
loadActionTimings()
|
||||
go reloadSchedulerSingnalHandler()
|
||||
s.loop()
|
||||
}()
|
||||
}
|
||||
|
||||
<-exitChan
|
||||
}
|
||||
|
||||
@@ -41,18 +41,15 @@ func TestConfig(t *testing.T) {
|
||||
balancer_json != true ||
|
||||
|
||||
scheduler_enabled != true ||
|
||||
scheduler_standalone != true ||
|
||||
scheduler_json != true ||
|
||||
|
||||
sm_enabled != true ||
|
||||
sm_standalone != true ||
|
||||
sm_api_server != "test" ||
|
||||
sm_freeswitch_server != "test" ||
|
||||
sm_freeswitch_pass != "test" ||
|
||||
sm_json != true ||
|
||||
|
||||
mediator_enabled != true ||
|
||||
mediator_standalone != true ||
|
||||
mediator_cdr_file != "test" ||
|
||||
mediator_result_file != "test" ||
|
||||
mediator_host != "test" ||
|
||||
@@ -71,16 +68,13 @@ func TestConfig(t *testing.T) {
|
||||
t.Log(balancer_listen_api)
|
||||
t.Log(balancer_json)
|
||||
t.Log(scheduler_enabled)
|
||||
t.Log(scheduler_standalone)
|
||||
t.Log(scheduler_json)
|
||||
t.Log(sm_enabled)
|
||||
t.Log(sm_standalone)
|
||||
t.Log(sm_api_server)
|
||||
t.Log(sm_freeswitch_server)
|
||||
t.Log(sm_freeswitch_pass)
|
||||
t.Log(sm_json)
|
||||
t.Log(mediator_enabled)
|
||||
t.Log(mediator_standalone)
|
||||
t.Log(mediator_cdr_file)
|
||||
t.Log(mediator_result_file)
|
||||
t.Log(mediator_host)
|
||||
|
||||
@@ -80,30 +80,30 @@ func stopBalancerSingnalHandler() {
|
||||
/*
|
||||
Listens for the SIGTERM, SIGINT, SIGQUIT system signals and gracefuly unregister from balancer and closes the storage before exiting.
|
||||
*/
|
||||
func stopRaterSingnalHandler(server, listen string, sg timespans.StorageGetter) {
|
||||
func stopRaterSingnalHandler() {
|
||||
log.Print("Handling stop signals...")
|
||||
c := make(chan os.Signal)
|
||||
signal.Notify(c, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT)
|
||||
sig := <-c
|
||||
|
||||
log.Printf("Caught signal %v, unregistering from balancer\n", sig)
|
||||
unregisterFromBalancer(server, listen)
|
||||
sg.Close()
|
||||
unregisterFromBalancer()
|
||||
exitChan <- true
|
||||
}
|
||||
|
||||
/*
|
||||
Connects to the balancer and calls unregister RPC method.
|
||||
*/
|
||||
func unregisterFromBalancer(server, listen string) {
|
||||
client, err := rpc.DialHTTP("tcp", server)
|
||||
func unregisterFromBalancer() {
|
||||
client, err := rpc.Dial("tcp", rater_balancer_server)
|
||||
if err != nil {
|
||||
log.Print("Cannot contact the balancer!")
|
||||
exitChan <- true
|
||||
return
|
||||
}
|
||||
var reply int
|
||||
log.Print("Unregistering from balancer ", server)
|
||||
client.Call("RaterServer.UnRegisterRater", listen, &reply)
|
||||
log.Print("Unregistering from balancer ", rater_balancer_server)
|
||||
client.Call("RaterServer.UnRegisterRater", rater_listen, &reply)
|
||||
if err := client.Close(); err != nil {
|
||||
log.Print("Could not close balancer unregistration!")
|
||||
exitChan <- true
|
||||
@@ -113,18 +113,35 @@ func unregisterFromBalancer(server, listen string) {
|
||||
/*
|
||||
Connects to the balancer and rehisters the rater to the server.
|
||||
*/
|
||||
func registerToBalancer(server, listen string) {
|
||||
client, err := rpc.DialHTTP("tcp", server)
|
||||
func registerToBalancer() {
|
||||
client, err := rpc.Dial("tcp", rater_balancer_server)
|
||||
if err != nil {
|
||||
log.Print("Cannot contact the balancer!")
|
||||
exitChan <- true
|
||||
return
|
||||
}
|
||||
var reply int
|
||||
log.Print("Registering to balancer ", server)
|
||||
client.Call("RaterServer.RegisterRater", listen, &reply)
|
||||
log.Print("Registering to balancer ", rater_balancer_server)
|
||||
client.Call("RaterServer.RegisterRater", rater_listen, &reply)
|
||||
if err := client.Close(); err != nil {
|
||||
log.Print("Could not close balancer registration!")
|
||||
exitChan <- true
|
||||
}
|
||||
log.Print("Registration finished!")
|
||||
}
|
||||
|
||||
// Listens for the HUP system signal and gracefuly reloads the timers from database.
|
||||
func reloadSchedulerSingnalHandler() {
|
||||
timespans.Logger.Info("Handling HUP signal...")
|
||||
for {
|
||||
c := make(chan os.Signal)
|
||||
signal.Notify(c, syscall.SIGHUP)
|
||||
sig := <-c
|
||||
|
||||
timespans.Logger.Info(fmt.Sprintf("Caught signal %v, reloading action timings.\n", sig))
|
||||
loadActionTimings()
|
||||
// check the tip of the queue for new actions
|
||||
restartLoop <- 1
|
||||
timer.Stop()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,11 +31,7 @@ listen_rater = 127.0.0.1:2000 # Rater server address
|
||||
listen_api = 127.0.0.1:2001 # Json RPC server address
|
||||
web_status_server = 127.0.0.1:8000 # Web server address (for status)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[scheduler]
|
||||
enabled = false
|
||||
standalone = false # run standalone (no other service)
|
||||
json = false # use JSON for RPC encoding
|
||||
ON for RPC encoding
|
||||
|
||||
[session_manager]
|
||||
enabled = false
|
||||
@@ -24,30 +24,8 @@ balancer_server = 127.0.0.1:2000 # balancer address host:port
|
||||
listen_api = 127.0.0.1:1234 # listening address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[balancer]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
listen_rater = 127.0.0.1:2000 # Rater server address
|
||||
listen_api = 127.0.0.1:2001 # Json RPC server address
|
||||
web_status_server = 127.0.0.1:8000 # Web server address (for status)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[scheduler]
|
||||
enabled = false
|
||||
standalone = false # run standalone (no other service)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[session_manager]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
api_server = 127.0.0.1:2000 # balancer address host:port
|
||||
freeswitch_server = localhost:8021 # freeswitch address host:port
|
||||
freeswitch_pass = ClueCon # freeswitch address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[mediator]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
cdr_file = Master.csv # Freeswitch Master CSV CDR file.
|
||||
result_file = out.csv # Generated file containing CDR and price info.
|
||||
host = localhost # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
|
||||
@@ -20,38 +20,9 @@ redis_db = 10 # redis database number
|
||||
|
||||
[rater]
|
||||
standalone = true # start standalone server (no balancer)
|
||||
balancer_server = 127.0.0.1:2000 # balancer address host:port
|
||||
listen_api = 127.0.0.1:1234 # listening address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[balancer]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
listen_rater = 127.0.0.1:2000 # Rater server address
|
||||
listen_api = 127.0.0.1:2001 # Json RPC server address
|
||||
web_status_server = 127.0.0.1:8000 # Web server address (for status)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[scheduler]
|
||||
enabled = false
|
||||
standalone = false # run standalone (no other service)
|
||||
enabled = true
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[session_manager]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
api_server = 127.0.0.1:2000 # balancer address host:port
|
||||
freeswitch_server = localhost:8021 # freeswitch address host:port
|
||||
freeswitch_pass = ClueCon # freeswitch address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[mediator]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
cdr_file = Master.csv # Freeswitch Master CSV CDR file.
|
||||
result_file = out.csv # Generated file containing CDR and price info.
|
||||
host = localhost # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
port = 5432 # The port to bind to.
|
||||
db = cgrates # The name of the database to connect to.
|
||||
user = # The user to sign in as.
|
||||
password = # The user's password.
|
||||
@@ -1,57 +0,0 @@
|
||||
# Rating system designed to be used in VoIP Carriers World
|
||||
# Copyright (C) 2012 Radu Ioan Fericean
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>
|
||||
|
||||
[global]
|
||||
redis_server = 127.0.0.1:6379 #redis address host:port
|
||||
redis_db = 10 # redis database number
|
||||
|
||||
[rater]
|
||||
standalone = true # start standalone server (no balancer)
|
||||
balancer_server = 127.0.0.1:2000 # balancer address host:port
|
||||
listen_api = 127.0.0.1:1234 # listening address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[balancer]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
listen_rater = 127.0.0.1:2000 # Rater server address
|
||||
listen_api = 127.0.0.1:2001 # Json RPC server address
|
||||
web_status_server = 127.0.0.1:8000 # Web server address (for status)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[scheduler]
|
||||
enabled = false
|
||||
standalone = false # run standalone (no other service)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[session_manager]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
api_server = 127.0.0.1:2000 # balancer address host:port
|
||||
freeswitch_server = localhost:8021 # freeswitch address host:port
|
||||
freeswitch_pass = ClueCon # freeswitch address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[mediator]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
cdr_file = Master.csv # Freeswitch Master CSV CDR file.
|
||||
result_file = out.csv # Generated file containing CDR and price info.
|
||||
host = localhost # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
port = 5432 # The port to bind to.
|
||||
db = cgrates # The name of the database to connect to.
|
||||
user = # The user to sign in as.
|
||||
password = # The user's password.
|
||||
@@ -24,34 +24,10 @@ balancer_server = 127.0.0.1:2000 # balancer address host:port
|
||||
listen_api = 127.0.0.1:1234 # listening address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[balancer]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
listen_rater = 127.0.0.1:2000 # Rater server address
|
||||
listen_api = 127.0.0.1:2001 # Json RPC server address
|
||||
web_status_server = 127.0.0.1:8000 # Web server address (for status)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[scheduler]
|
||||
enabled = false
|
||||
standalone = false # run standalone (no other service)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[session_manager]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
api_server = 127.0.0.1:2000 # balancer address host:port
|
||||
freeswitch_server = localhost:8021 # freeswitch address host:port
|
||||
freeswitch_pass = ClueCon # freeswitch address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[mediator]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
cdr_file = Master.csv # Freeswitch Master CSV CDR file.
|
||||
result_file = out.csv # Generated file containing CDR and price info.
|
||||
host = localhost # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
port = 5432 # The port to bind to.
|
||||
db = cgrates # The name of the database to connect to.
|
||||
user = # The user to sign in as.
|
||||
password = # The user's password.
|
||||
@@ -1,57 +0,0 @@
|
||||
# Rating system designed to be used in VoIP Carriers World
|
||||
# Copyright (C) 2012 Radu Ioan Fericean
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>
|
||||
|
||||
[global]
|
||||
redis_server = 127.0.0.1:6379 #redis address host:port
|
||||
redis_db = 10 # redis database number
|
||||
|
||||
[rater]
|
||||
standalone = true # start standalone server (no balancer)
|
||||
balancer_server = 127.0.0.1:2000 # balancer address host:port
|
||||
listen_api = 127.0.0.1:1234 # listening address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[balancer]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
listen_rater = 127.0.0.1:2000 # Rater server address
|
||||
listen_api = 127.0.0.1:2001 # Json RPC server address
|
||||
web_status_server = 127.0.0.1:8000 # Web server address (for status)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[scheduler]
|
||||
enabled = false
|
||||
standalone = false # run standalone (no other service)
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[session_manager]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
api_server = 127.0.0.1:2000 # balancer address host:port
|
||||
freeswitch_server = localhost:8021 # freeswitch address host:port
|
||||
freeswitch_pass = ClueCon # freeswitch address host:port
|
||||
json = false # use JSON for RPC encoding
|
||||
|
||||
[mediator]
|
||||
enabled = false
|
||||
standalone = false # run standalone
|
||||
cdr_file = Master.csv # Freeswitch Master CSV CDR file.
|
||||
result_file = out.csv # Generated file containing CDR and price info.
|
||||
host = localhost # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
port = 5432 # The port to bind to.
|
||||
db = cgrates # The name of the database to connect to.
|
||||
user = # The user to sign in as.
|
||||
password = # The user's password.
|
||||
@@ -34,12 +34,10 @@ json = true # use JSON for RPC encoding
|
||||
|
||||
[scheduler]
|
||||
enabled = true
|
||||
standalone = true # run standalone (no other service)
|
||||
json = true # use JSON for RPC encoding
|
||||
|
||||
[session_manager]
|
||||
enabled = true
|
||||
standalone = true # run standalone
|
||||
api_server = test # balancer address host:port
|
||||
freeswitch_server = test # freeswitch address host:port
|
||||
freeswitch_pass = test # freeswitch address host:port
|
||||
@@ -47,7 +45,6 @@ json = true # use JSON for RPC encoding
|
||||
|
||||
[mediator]
|
||||
enabled = true
|
||||
standalone = true # run standalone
|
||||
cdr_file = test # Freeswitch Master CSV CDR file.
|
||||
result_file = test # Generated file containing CDR and price info.
|
||||
host = test # The host to connect to. Values that start with / are for UNIX domain sockets.
|
||||
|
||||
Reference in New Issue
Block a user