added new logger interface

This commit is contained in:
Radu Ioan Fericean
2012-07-19 14:26:04 +03:00
parent c9cfe8d91d
commit 9d8ec2694f
5 changed files with 124 additions and 35 deletions

View File

@@ -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

View File

@@ -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!")

View File

@@ -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 <http://www.gnu.org/licenses/>
*/
package mediator

View File

@@ -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)

111
timespans/logger.go Normal file
View File

@@ -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 <http://www.gnu.org/licenses/>
*/
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
}