/
http.go
104 lines (82 loc) · 2.97 KB
/
http.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package aws
import (
"net/url"
"time"
"github.com/mozilla-services/reaper/reapable"
log "github.com/mozilla-services/reaper/reaperlog"
"github.com/mozilla-services/reaper/token"
)
// MakeScheduleLink creates a tokenized link scheduling a resource
func makeScheduleLink(region reapable.Region, id reapable.ID, tokenSecret, apiURL, scaleDownSchedule, scaleUpSchedule string) (string, error) {
sched, err := token.Tokenize(tokenSecret,
token.NewScheduleJob(region.String(), id.String(), scaleDownSchedule, scaleUpSchedule))
if err != nil {
return "", err
}
return makeURL(apiURL, "schedule", sched), nil
}
// MakeTerminateLink creates a tokenized link scheduling a resource
func makeTerminateLink(region reapable.Region, id reapable.ID, tokenSecret, apiURL string) (string, error) {
term, err := token.Tokenize(tokenSecret,
token.NewTerminateJob(region.String(), id.String()))
if err != nil {
return "", err
}
return makeURL(apiURL, "terminate", term), nil
}
// MakeIgnoreLink creates a tokenized link scheduling a resource
func makeIgnoreLink(region reapable.Region, id reapable.ID, tokenSecret, apiURL string,
duration time.Duration) (string, error) {
delay, err := token.Tokenize(tokenSecret,
token.NewDelayJob(region.String(), id.String(),
duration))
if err != nil {
return "", err
}
action := "delay_" + duration.String()
return makeURL(apiURL, action, delay), nil
}
// MakeWhitelistLink creates a tokenized link scheduling a resource
func makeWhitelistLink(region reapable.Region, id reapable.ID, tokenSecret, apiURL string) (string, error) {
whitelist, err := token.Tokenize(tokenSecret,
token.NewWhitelistJob(region.String(), id.String()))
if err != nil {
log.Error("Error creating whitelist link: %s", err)
return "", err
}
return makeURL(apiURL, "whitelist", whitelist), nil
}
// MakeStopLink creates a tokenized link scheduling a resource
func makeStopLink(region reapable.Region, id reapable.ID, tokenSecret, apiURL string) (string, error) {
stop, err := token.Tokenize(tokenSecret,
token.NewStopJob(region.String(), id.String()))
if err != nil {
log.Error("Error creating ScaleToZero link: %s", err)
return "", err
}
return makeURL(apiURL, "stop", stop), nil
}
// MakeForceStopLink creates a tokenized link scheduling a resource
func makeForceStopLink(region reapable.Region, id reapable.ID, tokenSecret, apiURL string) (string, error) {
stop, err := token.Tokenize(tokenSecret,
token.NewForceStopJob(region.String(), id.String()))
if err != nil {
log.Error("Error creating ScaleToZero link: %s", err)
return "", err
}
return makeURL(apiURL, "stop", stop), nil
}
func makeURL(host, action, token string) string {
if host == "" {
log.Critical("makeURL: host is empty")
}
action = url.QueryEscape(action)
token = url.QueryEscape(token)
vals := url.Values{}
vals.Add(config.HTTP.Action, action)
vals.Add(config.HTTP.Token, token)
if host[len(host)-1:] == "/" {
return host + "?" + vals.Encode()
}
return host + "/?" + vals.Encode()
}