/
event.go
75 lines (59 loc) · 1.29 KB
/
event.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
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/cloudwatchevents"
)
const (
STATUS_FAIL string = "fail"
STATUS_INFO string = "info"
STATUS_PASS string = "pass"
)
func chooseStatusMessage() string {
if userDataStatus != "" {
return userDataStatus
}
if statusFail {
return STATUS_FAIL
}
if statusPass {
return STATUS_PASS
}
if statusInfo {
return STATUS_INFO
}
return STATUS_INFO
}
func emitEvent(message string) error {
sess := session.Must(session.NewSession(aws.NewConfig().
WithMaxRetries(3),
))
var err error
if instance_id == "" {
instance_id, err = retrieveInstanceId(sess)
if err != nil {
return err
}
}
event_svc := cloudwatchevents.New(sess)
status := chooseStatusMessage()
detail := fmt.Sprintf("{ \"Status\": \"%s\", \"Message\": \"%s\"}", status, message)
detailType := "User Data"
request_entry := cloudwatchevents.PutEventsRequestEntry{
Detail: &detail,
DetailType: &detailType,
Resources: []*string{&instance_id},
Source: &project,
}
input := cloudwatchevents.PutEventsInput{
Entries: []*cloudwatchevents.PutEventsRequestEntry{
&request_entry,
},
}
_, err = event_svc.PutEvents(&input)
if err != nil {
return err
}
return nil
}