Skip to content

Commit 32a8933

Browse files
committed
Load Balancer registration
1 parent 5a0d419 commit 32a8933

10 files changed

Lines changed: 126 additions & 81 deletions

File tree

cmd/lb/main.go

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"fmt"
5+
"github.com/serverledge-faas/serverledge/internal/node"
56
"log"
67
"os"
78
"os/signal"
@@ -14,7 +15,6 @@ import (
1415
"github.com/serverledge-faas/serverledge/internal/config"
1516
"github.com/serverledge-faas/serverledge/internal/lb"
1617
"github.com/serverledge-faas/serverledge/internal/registration"
17-
"github.com/serverledge-faas/serverledge/utils"
1818
)
1919

2020
func registerTerminationHandler(e *echo.Echo) {
@@ -44,19 +44,12 @@ func main() {
4444
}
4545
config.ReadConfiguration(configFileName)
4646

47-
// TODO: split Area in Region + Type (e.g., cloud/lb/edge)
48-
region := config.GetString(config.REGISTRY_AREA, "ROME")
49-
registry := &registration.Registry{Area: "lb/" + region}
47+
myArea := config.GetString(config.REGISTRY_AREA, "ROME")
48+
node.LocalNode = node.NewIdentifier(myArea)
5049

51-
defaultAddressStr := "127.0.0.1"
52-
address, err := utils.GetOutboundIp()
53-
if err == nil {
54-
defaultAddressStr = address.String()
55-
}
56-
registration.RegisteredLocalIP = config.GetString(config.API_IP, defaultAddressStr)
57-
58-
if _, err := registry.RegisterToEtcd(); err != nil {
59-
log.Printf("Could not register to Etcd: %v\n", err)
50+
err := registration.RegisterLoadBalancer()
51+
if err != nil {
52+
log.Fatal(err)
6053
}
6154

6255
e := echo.New()
@@ -66,5 +59,5 @@ func main() {
6659
// Register a signal handler to cleanup things on termination
6760
registerTerminationHandler(e)
6861

69-
lb.StartReverseProxy(e, region)
62+
lb.StartReverseProxy(e, myArea)
7063
}

cmd/serverledge/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func main() {
3333
myArea := config.GetString(config.REGISTRY_AREA, "ROME")
3434
node.LocalNode = node.NewIdentifier(myArea)
3535

36-
err := registration.RegisterToEtcd()
36+
err := registration.RegisterNode()
3737
if err != nil {
3838
log.Fatal(err)
3939
}

internal/api/api.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ func GetServerStatus(c echo.Context) error {
238238
loadAvgValues = []float64{loadAvg.LoadAverage1, loadAvg.LoadAverage5, loadAvg.LoadAverage10}
239239
}
240240

241+
// TODO: use a different type
241242
response := registration.StatusInformation{
242243
Url: registration.SelfRegistration.RemoteURL,
243244
AvailableWarmContainers: node.WarmStatus(),

internal/lb/lb.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import (
99
"os"
1010
"time"
1111

12-
"github.com/serverledge-faas/serverledge/internal/config"
13-
"github.com/serverledge-faas/serverledge/internal/registration"
1412
"github.com/labstack/echo/v4"
1513
"github.com/labstack/echo/v4/middleware"
14+
"github.com/serverledge-faas/serverledge/internal/config"
15+
"github.com/serverledge-faas/serverledge/internal/registration"
1616
)
1717

1818
var currentTargets []*middleware.ProxyTarget
@@ -42,20 +42,20 @@ func StartReverseProxy(e *echo.Echo, region string) {
4242
}
4343

4444
func getTargets(region string) ([]*middleware.ProxyTarget, error) {
45-
cloudNodes, err := registration.GetCloudNodes(region)
45+
cloudNodes, err := registration.GetAllInArea(region, false)
4646
if err != nil {
4747
return nil, err
4848
}
4949

5050
targets := make([]*middleware.ProxyTarget, 0, len(cloudNodes))
51-
for _, addr := range cloudNodes {
52-
log.Printf("Found target: %v\n", addr)
51+
for _, target := range cloudNodes {
52+
log.Printf("Found target: %v\n", target.Key)
5353
// TODO: etcd should NOT contain URLs, but only host and port...
54-
parsedUrl, err := url.Parse(addr)
54+
parsedUrl, err := url.Parse(target.RemoteURL)
5555
if err != nil {
5656
return nil, err
5757
}
58-
targets = append(targets, &middleware.ProxyTarget{Name: addr, URL: parsedUrl})
58+
targets = append(targets, &middleware.ProxyTarget{Name: target.Key, URL: parsedUrl})
5959
}
6060

6161
log.Printf("Found %d targets\n", len(targets))

internal/metrics/retriever.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ func MetricsRetriever() {
121121
api := v1.NewAPI(client)
122122
ctx := context.Background()
123123

124-
ticker := time.NewTicker(time.Duration(config.GetInt(config.METRICS_RETRIEVER_INTERVAL, 5)) * time.Second)
124+
ticker := time.NewTicker(time.Duration(config.GetInt(config.METRICS_RETRIEVER_INTERVAL, 60)) * time.Second)
125125
defer ticker.Stop()
126126

127127
for {
@@ -131,34 +131,34 @@ func MetricsRetriever() {
131131
query := fmt.Sprintf("%s{node=\"%s\"}", COMPLETIONS, node.LocalNode)
132132
completionsPerFunction, err := retrieveByFunction(query, api, ctx)
133133
if err != nil {
134-
log.Printf("Error in retrieveByFunction: %v\n", err)
134+
log.Printf("Error in retrieveByFunction: %v", err)
135135
}
136136
retrievedMetrics.Completions = completionsPerFunction
137137

138138
query = fmt.Sprintf("%s_sum{node=\"%s\"}/%s_count{node=\"%s\"}",
139139
EXECUTION_TIME, node.LocalNode, EXECUTION_TIME, node.LocalNode)
140140
avgFunDuration, err := retrieveByFunction(query, api, ctx)
141141
if err != nil {
142-
log.Printf("Error in retrieveByFunction: %v\n", err)
142+
log.Printf("Error in retrieveByFunction: %v", err)
143143
}
144144
retrievedMetrics.AvgExecutionTime = avgFunDuration
145145

146146
query = fmt.Sprintf("%s_sum{}/%s_count{}", EXECUTION_TIME, EXECUTION_TIME)
147147
avgFunDurationAllNodes, err := retrieveByFunctionAndNode(query, api, ctx)
148148
if err != nil {
149-
log.Printf("Error in retrieveByFunction: %v\n", err)
149+
log.Printf("Error in retrieveByFunction: %v", err)
150150
}
151151
retrievedMetrics.AvgExecutionTimeAllNodes = avgFunDurationAllNodes
152152

153153
query = fmt.Sprintf("%s_sum{}/%s_count{}", OUTPUT_SIZE, OUTPUT_SIZE)
154154
avgOutputSize, err := retrieveByFunction(query, api, ctx)
155155
if err != nil {
156-
log.Printf("Error in retrieveByFunction: %v\n", err)
156+
log.Printf("Error in retrieveByFunction: %v", err)
157157
}
158158
retrievedMetrics.AvgOutputSize = avgOutputSize
159159

160-
fmt.Println("All queries completed")
161-
fmt.Println(retrievedMetrics)
160+
//fmt.Println("All queries completed")
161+
//fmt.Println(retrievedMetrics)
162162

163163
}
164164
}

0 commit comments

Comments
 (0)