mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 10:06:24 +05:00
changed project structure
This commit is contained in:
6
src/inquirer/Makefile
Normal file
6
src/inquirer/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
include $(GOROOT)/src/Make.inc
|
||||
|
||||
TARG=inquirer
|
||||
GOFILES=inquirer.go
|
||||
|
||||
include $(GOROOT)/src/Make.cmd
|
||||
52
src/inquirer/inquirer.go
Normal file
52
src/inquirer/inquirer.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/rpc"
|
||||
"registration"
|
||||
//"time"
|
||||
"errors"
|
||||
)
|
||||
|
||||
var raterList *registration.RaterList
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprint(w, "<html><body><ol>")
|
||||
for addr, _ := range raterList.Clients {
|
||||
fmt.Fprint(w, fmt.Sprintf("<li>%s</li>", addr))
|
||||
}
|
||||
fmt.Fprint(w, "</ol></body></html>")
|
||||
}
|
||||
|
||||
func callRater() {
|
||||
var reply float64
|
||||
arg := 9.0
|
||||
err := errors.New("") //not nil value
|
||||
for err != nil {
|
||||
client:= <-raterList.Balancer
|
||||
err = client.Call("Sumer.Square", arg, &reply)
|
||||
if err != nil {
|
||||
log.Print("Got en error from rater... recovering")
|
||||
}
|
||||
}
|
||||
fmt.Println(fmt.Sprintf("Result: %v", reply))
|
||||
}
|
||||
|
||||
func testCallRater(){
|
||||
for i:= 0; i<10; i++ {
|
||||
go callRater()
|
||||
//time.Sleep(1 * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
raterList = registration.NewRaterList()
|
||||
go testCallRater()
|
||||
rpc.Register(raterList)
|
||||
rpc.HandleHTTP()
|
||||
http.HandleFunc("/", handler)
|
||||
log.Print("The server is listening...")
|
||||
http.ListenAndServe(":2000", nil)
|
||||
}
|
||||
51
src/inquirer/registration/registration.go
Normal file
51
src/inquirer/registration/registration.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package registration
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/rpc"
|
||||
"time"
|
||||
)
|
||||
|
||||
type RaterList struct {
|
||||
Clients map[string]*rpc.Client
|
||||
Balancer chan *rpc.Client
|
||||
}
|
||||
|
||||
func NewRaterList() *RaterList {
|
||||
return &RaterList{
|
||||
Clients: make(map[string]*rpc.Client),
|
||||
Balancer: make(chan *rpc.Client),
|
||||
}
|
||||
}
|
||||
|
||||
func (rl *RaterList) RegisterRater(clientAddress string, replay *byte) error {
|
||||
time.Sleep(1 * time.Second) // wait a second for Rater to start serving
|
||||
client, err := rpc.Dial("tcp", clientAddress)
|
||||
if err != nil {
|
||||
log.Panic("Could not connect to client!")
|
||||
}
|
||||
rl.Clients[clientAddress] = client
|
||||
log.Print(fmt.Sprintf("Server %v registered succesfully", clientAddress))
|
||||
rl.startBalance()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (rl *RaterList) UnRegisterRater(clientAddress string, replay *byte) error {
|
||||
client := rl.Clients[clientAddress]
|
||||
client.Close()
|
||||
delete(rl.Clients, clientAddress)
|
||||
log.Print(fmt.Sprintf("Server %v unregistered succesfully", clientAddress))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (rl *RaterList) startBalance() {
|
||||
go func(){
|
||||
for {
|
||||
for addr, client := range rl.Clients {
|
||||
log.Printf("using server %s:", addr)
|
||||
rl.Balancer <- client
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
6
src/rater/Makefile
Normal file
6
src/rater/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
include $(GOROOT)/src/Make.inc
|
||||
|
||||
TARG=inquirer
|
||||
GOFILES=inquirer.go
|
||||
|
||||
include $(GOROOT)/src/Make.cmd
|
||||
37
src/rater/rater.go
Normal file
37
src/rater/rater.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"math"
|
||||
"net"
|
||||
"net/rpc"
|
||||
"registration"
|
||||
)
|
||||
|
||||
var (
|
||||
server = flag.String("server", "127.0.0.1:2000", "target host:port")
|
||||
listen = flag.String("listen", "127.0.0.1:1234", "target host:port")
|
||||
)
|
||||
|
||||
type Sumer int
|
||||
|
||||
func (t *Sumer) Square(n float64, reply *float64) error {
|
||||
*reply = math.Sqrt(n)
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
arith := new(Sumer)
|
||||
rpc.Register(arith)
|
||||
rpc.HandleHTTP()
|
||||
go registration.RegisterToServer(server, listen)
|
||||
//go registration.StopSingnalHandler(server, listen)
|
||||
addr, err1 := net.ResolveTCPAddr("tcp", *listen)
|
||||
l, err2 := net.ListenTCP("tcp", addr)
|
||||
if err1 != nil || err2 != nil {
|
||||
log.Panic("cannot create listener for specified address ", *listen)
|
||||
}
|
||||
rpc.Accept(l)
|
||||
}
|
||||
48
src/rater/registration/registration.go
Normal file
48
src/rater/registration/registration.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package registration
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/rpc"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
func StopSingnalHandler(server, listen *string) {
|
||||
log.Print("Handling stop signals...")
|
||||
sig := <-signal.Incoming
|
||||
if usig, ok := sig.(os.UnixSignal); ok {
|
||||
switch usig {
|
||||
case syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT:
|
||||
log.Printf("Caught signal %v, unregistering from server\n", usig)
|
||||
unregisterFromServer(server, listen)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func unregisterFromServer(server, listen *string) {
|
||||
client, err := rpc.DialHTTP("tcp", *server)
|
||||
if err != nil {
|
||||
log.Panic("Cannot register to server!")
|
||||
}
|
||||
var reply byte
|
||||
log.Print("Unregistering from server ", *server)
|
||||
client.Call("RaterList.UnRegisterRater", *listen, &reply)
|
||||
if err := client.Close(); err != nil {
|
||||
log.Panic("Could not close server unregistration!")
|
||||
}
|
||||
}
|
||||
|
||||
func RegisterToServer(server, listen *string) {
|
||||
client, err := rpc.DialHTTP("tcp", *server)
|
||||
if err != nil {
|
||||
log.Panic("Cannot register to server!")
|
||||
}
|
||||
var reply byte
|
||||
log.Print("Registering to server ", *server)
|
||||
client.Call("RaterList.RegisterRater", *listen, &reply)
|
||||
if err := client.Close(); err != nil {
|
||||
log.Panic("Could not close server registration!")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user