-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
64 lines (52 loc) · 2.27 KB
/
main.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
package main
import (
"flag"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/rs/zerolog/log"
"predictive-rds-scaler/api"
"predictive-rds-scaler/logutil"
"predictive-rds-scaler/scaler"
"time"
)
var config scaler.Config
func init() {
flag.UintVar(&config.ScaleInStep, "scaleInStep", 1, "Number of reader instances to scale in at a time")
flag.UintVar(&config.ScaleOutStep, "scaleOutStep", 1, "Number of reader instances to scale out at a time")
flag.UintVar(&config.MinInstances, "minInstances", 2, "Minimum number of readers required in the cluster")
flag.UintVar(&config.MaxInstances, "maxInstances", 5, "Maximum number of readers allowed in the cluster")
flag.StringVar(&config.AwsRegion, "awsRegion", "", "AWS region")
flag.StringVar(&config.BoostHours, "boostHours", "", "Comma-separated list of hours to boost minInstances")
flag.StringVar(&config.RdsClusterName, "rdsClusterName", "", "RDS cluster name")
flag.Float64Var(&config.TargetCpuUtil, "targetCpuUtilization", 70.0, "Target CPU utilization percentage")
flag.DurationVar(&config.ScaleOutCooldown, "scaleOutCooldown", 10*time.Minute, "Cooldown time after scaling actions to avoid constant scale up/down activity")
flag.DurationVar(&config.ScaleInCooldown, "scaleInCooldown", 5*time.Minute, "Cooldown time after scaling actions to avoid constant scale up/down activity")
flag.DurationVar(&config.PlanAheadTime, "planAheadTime", 10*time.Minute, "The time to plan ahead when looking up prior CPU utilization")
flag.UintVar(&config.ServerPort, "serverPort", 8041, "Port for the ui server")
flag.Parse()
}
func main() {
logutil.InitLogger()
awsSession, err := session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
})
if err != nil {
log.Fatal().Err(err).Msg("Failed to create AWS session")
}
// Create the logger
logger := logutil.GetLogger()
rdsScaler, err := scaler.New(config, logger, awsSession)
if err != nil {
logger.Fatal().Err(err).Msg("Failed to create scaler")
}
apiServer, err := api.New(config, logger, awsSession)
if err != nil {
logger.Fatal().Err(err).Msg("Failed to create API server")
}
defer rdsScaler.Run()
go func() {
err := apiServer.Serve(config.ServerPort)
if err != nil {
logger.Fatal().Err(err).Msg("Failed to start API server")
}
}()
}