-
Notifications
You must be signed in to change notification settings - Fork 1
/
main_service.go
90 lines (72 loc) · 1.78 KB
/
main_service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package main
import (
"fmt"
"os"
"time"
"scale-experiment/appscaler"
"scale-experiment/cf"
"scale-experiment/scalerservice"
"go-bro/broker"
"go-bro/config"
)
var api = cf.NewApi(os.Getenv("DOMAIN"), os.Getenv("USER"), os.Getenv("PASS"), false, false)
var scaler = appscaler.New(api)
func main() {
allApps := map[string]string{}
go startLoop(allApps)
startBroker(allApps)
}
//Check all apps that wants to be auto-scaled
func startLoop(list map[string]string) {
for {
for _, app := range list {
checkApp(app)
}
time.Sleep(1 * time.Second)
}
}
func startBroker(allApps map[string]string) {
config := config.FromJson("config.json")
b := broker.New(config.Username, config.Password, config.Plans)
for _, serviceConfig := range config.Services {
fmt.Printf("Registering Service Broker %+v \n", serviceConfig)
service := scalerservice.New(allApps)
b.RegisterService(serviceConfig.Id, service)
}
b.Listen(getAddr())
}
func mainWithoutBroker() {
apps := []string{os.Getenv("GUID")}
for {
for _, app := range apps {
checkApp(app)
}
time.Sleep(2 * time.Second)
}
}
//Check if the app need to be scaled up or down
func checkApp(app string) {
fmt.Println("=> Checking app", app)
summary, err := scaler.GetSummary(app)
if err != nil {
fmt.Println(" Could not get stats: " + err.Error())
return
}
// fmt.Printf(" summary: %+v\n", summary)
newInstancesCount := scaler.ProposedInstances(summary)
if newInstancesCount == summary.Instances {
return
}
err = scaler.ScaleAppTo(app, newInstancesCount)
if err != nil {
fmt.Println(" error when scaling." + err.Error())
}
fmt.Printf(" Scaled to: %d. Summary: %+v\n", newInstancesCount, summary)
}
func getAddr() string {
port := os.Getenv("PORT")
if port == "" {
return ":3000"
}
return ":" + port
}