From 9d8ec2694f4710ac78803a99330f14b8ea9b036a Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Thu, 19 Jul 2012 14:26:04 +0300 Subject: [PATCH] added new logger interface --- cmd/cgr-rater/cgr-rater.go | 2 +- cmd/cgr-rater/registration.go | 14 ++--- mediator/mediator.go | 19 ------ timespans/calldesc.go | 13 ++-- timespans/logger.go | 111 ++++++++++++++++++++++++++++++++++ 5 files changed, 124 insertions(+), 35 deletions(-) delete mode 100644 mediator/mediator.go create mode 100644 timespans/logger.go diff --git a/cmd/cgr-rater/cgr-rater.go b/cmd/cgr-rater/cgr-rater.go index 7a06ccdae..39f1336cc 100644 --- a/cmd/cgr-rater/cgr-rater.go +++ b/cmd/cgr-rater/cgr-rater.go @@ -38,7 +38,7 @@ var ( redissrv = flag.String("redissrv", "127.0.0.1:6379", "redis address host:port") redisdb = flag.Int("redisdb", 10, "redis database number") listen = flag.String("listen", "127.0.0.1:1234", "listening address host:port") - standalone = flag.Bool("standalone", false, "start standalone server (no balancer)") + standalone = flag.Bool("standalone", false, "start standalone server (no balancer, default false)") freeswitch = flag.Bool("freeswitch", false, "connect to freeswitch server") json = flag.Bool("json", false, "use JSON for RPC encoding") storage Responder diff --git a/cmd/cgr-rater/registration.go b/cmd/cgr-rater/registration.go index 998ca49f3..ae374d622 100644 --- a/cmd/cgr-rater/registration.go +++ b/cmd/cgr-rater/registration.go @@ -36,7 +36,7 @@ func StopSingnalHandler(server, listen *string, sg timespans.StorageGetter) { signal.Notify(c, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT) sig := <-c - log.Printf("Caught signal %v, unregistering from server\n", sig) + log.Printf("Caught signal %v, unregistering from balancer\n", sig) unregisterFromServer(server, listen) sg.Close() os.Exit(1) @@ -48,14 +48,14 @@ Connects to the inquirer and calls unregister RPC method. func unregisterFromServer(server, listen *string) { client, err := rpc.DialHTTP("tcp", *server) if err != nil { - log.Print("Cannot contact the server!") + log.Print("Cannot contact the balancer!") os.Exit(1) } var reply int - log.Print("Unregistering from server ", *server) + log.Print("Unregistering from balancer ", *server) client.Call("RaterServer.UnRegisterRater", *listen, &reply) if err := client.Close(); err != nil { - log.Print("Could not close server unregistration!") + log.Print("Could not close balancer unregistration!") os.Exit(1) } } @@ -66,14 +66,14 @@ Connects to the inquirer and rehisters the rater to the server. func RegisterToServer(server, listen *string) { client, err := rpc.DialHTTP("tcp", *server) if err != nil { - log.Print("Cannot contact the server!") + log.Print("Cannot contact the balancer!") os.Exit(1) } var reply int - log.Print("Registering to server ", *server) + log.Print("Registering to balancer ", *server) client.Call("RaterServer.RegisterRater", *listen, &reply) if err := client.Close(); err != nil { - log.Print("Could not close server registration!") + log.Print("Could not close balancer registration!") os.Exit(1) } log.Print("Registration finished!") diff --git a/mediator/mediator.go b/mediator/mediator.go deleted file mode 100644 index 1e206c1eb..000000000 --- a/mediator/mediator.go +++ /dev/null @@ -1,19 +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 -*/ - -package mediator diff --git a/timespans/calldesc.go b/timespans/calldesc.go index 81077355b..6ebb7c0ec 100644 --- a/timespans/calldesc.go +++ b/timespans/calldesc.go @@ -21,18 +21,15 @@ package timespans import ( "errors" "fmt" - "log" - "log/syslog" "math" - "os" "time" ) func init() { var err error - logger, err = syslog.NewLogger(syslog.LOG_ALERT, log.LstdFlags) + logger, err = NewSyslogLogger() if err != nil { - logger = log.New(os.Stderr, "", log.LstdFlags) + logger = new(StdLogger) } } @@ -45,7 +42,7 @@ const ( var ( storageGetter StorageGetter - logger *log.Logger + logger LoggerInterface ) /* @@ -285,7 +282,7 @@ func (cd *CallDescriptor) GetCost() (*CallCost, error) { Cost: cost, ConnectFee: connectionFee, Timespans: timespans} - logger.Printf("Get Cost: %v => %v", cd, cc) + logger.Info(fmt.Sprintf("Get Cost: %v => %v", cd, cc)) return cc, err } @@ -340,7 +337,7 @@ func (cd *CallDescriptor) GetMaxSessionTime() (seconds float64, err error) { func (cd *CallDescriptor) Debit() (cc *CallCost, err error) { cc, err = cd.GetCost() if err != nil { - logger.Printf("error getting cost %v", err) + logger.Err(fmt.Sprintf("error getting cost %v", err)) } if userBalance, err := cd.getUserBalance(); err == nil && userBalance != nil { defer storageGetter.SetUserBalance(userBalance) diff --git a/timespans/logger.go b/timespans/logger.go new file mode 100644 index 000000000..eea92e78b --- /dev/null +++ b/timespans/logger.go @@ -0,0 +1,111 @@ +/* +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 +*/ + +package timespans + +import ( + "log" + "log/syslog" +) + +type LoggerInterface interface { + Alert(m string) error + Close() error + Crit(m string) error + Debug(m string) error + Emerg(m string) error + Err(m string) error + Info(m string) error + Notice(m string) error + Warning(m string) error +} + +type SyslogLogger struct { + *syslog.Writer +} + +func NewSyslogLogger() (*SyslogLogger, error) { + logger, err := syslog.New(syslog.LOG_INFO, "CGRateS") + return &SyslogLogger{logger}, err +} + +func (sl *SyslogLogger) Alert(m string) (err error) { + return sl.Alert(m) +} +func (sl *SyslogLogger) Close() error { + return sl.Close() +} +func (sl *SyslogLogger) Crit(m string) (err error) { + return sl.Crit(m) +} +func (sl *SyslogLogger) Debug(m string) (err error) { + return sl.Debug(m) +} +func (sl *SyslogLogger) Emerg(m string) (err error) { + return sl.Emerg(m) +} +func (sl *SyslogLogger) Err(m string) (err error) { + return sl.Err(m) +} +func (sl *SyslogLogger) Info(m string) (err error) { + return sl.Info(m) +} +func (sl *SyslogLogger) Notice(m string) (err error) { + return sl.Notice(m) +} +func (sl *SyslogLogger) Warning(m string) (err error) { + return sl.Warning(m) +} + +type StdLogger struct{} + +func (sl *StdLogger) Alert(m string) (err error) { + log.Print("[ALERT]" + m) + return +} +func (sl *StdLogger) Close() (err error) { + return +} +func (sl *StdLogger) Crit(m string) (err error) { + log.Print("[CRITICAL]" + m) + return +} +func (sl *StdLogger) Debug(m string) (err error) { + log.Print("[DEBUG]" + m) + return +} +func (sl *StdLogger) Emerg(m string) (err error) { + log.Print("[EMERGENCY]" + m) + return +} +func (sl *StdLogger) Err(m string) (err error) { + log.Print("[ERROR]" + m) + return +} +func (sl *StdLogger) Info(m string) (err error) { + log.Print("[INFO]" + m) + return +} +func (sl *StdLogger) Notice(m string) (err error) { + log.Print("[NOTICE]" + m) + return +} +func (sl *StdLogger) Warning(m string) (err error) { + log.Print("[WARNING]" + m) + return +}