Skip to content

Commit 7ded760

Browse files
author
SamSyntax
committed
minor changes, adding port flag
1 parent b84ede1 commit 7ded760

File tree

6 files changed

+38
-15
lines changed

6 files changed

+38
-15
lines changed

loadbalancer.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@ func (s LbServer) Address() string {
2727
}
2828

2929
func (s LbServer) IsAlive() bool {
30+
res, err := http.Get(s.addr)
31+
if err != nil {
32+
fmt.Printf("Server %s - addr: %s is currently offline\n", s.name, s.addr)
33+
return false
34+
}
35+
if res.StatusCode != http.StatusOK {
36+
fmt.Printf("Server %s - addr: %s is currently offline\n", s.name, s.addr)
37+
return false
38+
}
39+
fmt.Printf("Server %s - addr: %s is online\n", s.name, s.addr)
3040
return true
3141
}
3242

@@ -74,7 +84,7 @@ func (lb *LoadBalancer) getWeightedServer() LbServer {
7484
totalServers := len(lb.servers)
7585
for i := 0; i < totalServers; i++ {
7686
server := &lb.servers[lb.roundRobinCount%totalServers]
77-
if server.current < server.weight {
87+
if server.current < server.weight && server.IsAlive() {
7888
server.current++
7989
return *server
8090
}

loader.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func ReadJson(path string) []LbServer {
5858
for k, s := range servers {
5959
lbServer := NewLbServer(s.Addr, s.Weight)
6060
lbServer.name = strconv.Itoa(k)
61-
res = append(res, *lbServer)
61+
res = append(res, *lbServer)
6262
}
6363

6464
return res
@@ -84,7 +84,7 @@ func ReadYaml(path string) []LbServer {
8484
for k, s := range servers {
8585
lbServer := NewLbServer(s.Addr, s.Weight)
8686
lbServer.name = strconv.Itoa(k)
87-
res = append(res, *lbServer)
87+
res = append(res, *lbServer)
8888
}
8989

9090
return res

main.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,44 @@ import (
88
)
99

1010
func main() {
11-
nFlag := flag.Int("amount", 1234, "Enter amount of local servers to be spawned")
11+
12+
// creating flags to pass args
13+
nFlag := flag.Int("amount", 5, "Enter amount of local servers to be spawned")
1214
method := flag.String("method", "rr", "Load balancing method: 'rr - Round Robin | wrr - Weighted Round Robin")
1315
env := flag.String("env", "local", "Specify wether local servers should be started or provide JSON file with addresses of external servers. ")
1416
path := flag.String("path", "./servers.yaml", "Specify a path to servers config file. Either yaml or json. ")
17+
Lbport := flag.String("port", "7000", "Specify port on which load balancer is launched.")
18+
LocalServerPort := flag.Int("srv-port", 8000, "Specify port on which local dev server is launched. (If there are more than 1 server to be launched port number will be incremented by 1 for every local server to be spawned ex. server 0 - :8000; sever 1 - :8001)")
1519

20+
// parsing flags
1621
flag.Parse()
22+
1723
var servers []LbServer
1824
switch *env {
1925
case "external":
2026
servers = Loader(*path)
2127
case "local":
22-
servers = Spawner(*nFlag)
28+
servers = Spawner(*nFlag, *LocalServerPort)
2329
}
2430
var lb *LoadBalancer
2531
switch *method {
2632
case "wrr":
27-
lb = NewLoadBalancer("7000", servers, true)
33+
lb = NewLoadBalancer(*Lbport, servers, true)
2834
case "rr":
29-
lb = NewLoadBalancer("7000", servers, false)
35+
lb = NewLoadBalancer(*Lbport, servers, false)
3036
default:
3137
fmt.Println("Invalid method. Use 'rr' or 'wrr'.")
3238
os.Exit(1)
3339
}
40+
3441
handleRedirect := func(w http.ResponseWriter, r *http.Request) {
3542
lb.ServeProxy(w, r)
3643
}
37-
http.HandleFunc("/", handleRedirect)
3844

45+
// Serving loadbalancer
46+
http.HandleFunc("/", handleRedirect)
3947
fmt.Printf("serving requests at localhost:%s\n", lb.port)
40-
4148
http.ListenAndServe(":"+lb.port, nil)
49+
4250
select {}
4351
}

servers.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[
22
{
33
"addr": "https://facebook.com",
4-
"weight": 2
4+
"weight": 2,
55
},
66
{
77
"addr": "https://twitch.tv",

servers.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
- addr: https://facebook.com
33
weight: 2
4-
- addr: https://twitch.tv
4+
- addr: https://twitch22t.tv
55
weight: 1
66
- addr: https://google.com
77
weight: 3

spawner.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func Server(port, name string, weight int) LbServer {
3232
return *srv
3333

3434
}
35-
func Spawner(amt int) []LbServer {
35+
func Spawner(amt, port int) []LbServer {
3636
servers := make([]LbServer, 0, amt)
3737
weights := []int{5, 2, 3}
3838
for i := 0; i < amt; i++ {
@@ -41,10 +41,15 @@ func Spawner(amt int) []LbServer {
4141
k = 0
4242
}
4343
k++
44-
name := fmt.Sprintf("Server %v", i)
45-
port := ":" + strconv.Itoa(8000+i)
44+
name := fmt.Sprintf("Server %v", i+1)
45+
port := ":" + strconv.Itoa(port+i)
4646
srv := Server(port, name, weights[k])
47-
servers = append(servers, srv)
47+
if srv.IsAlive() {
48+
servers = append(servers, srv)
49+
} else {
50+
continue
51+
}
52+
4853
}
4954
return servers
5055
}

0 commit comments

Comments
 (0)