Skip to content

Commit b4029c5

Browse files
committed
feat: add support for backup-vault changes
1 parent d1d01a6 commit b4029c5

File tree

4 files changed

+106
-1
lines changed

4 files changed

+106
-1
lines changed

fixtures/samples.json

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,5 +440,54 @@
440440
"creationDate": "2020-06-24T23:18:15.318Z",
441441
"state": "CREATED"
442442
}
443+
},
444+
{
445+
"version": "0",
446+
"id": "d415609e-5f35-d9a2-76d1-613683e4e024",
447+
"detail-type": "Backup Vault State Change",
448+
"source": "aws.backup",
449+
"account": "1112233445566",
450+
"time": "2020-06-24T23:18:19Z",
451+
"region": "us-west-2",
452+
"resources": [
453+
"arn:aws:backup:us-west-2:1112233445566:backup-vault:d8864642-155c-4283-a168-a04f40e12c97"
454+
],
455+
"detail": {
456+
"backupVaultName": "d8864642-155c-4283-a168-a04f40e12c97",
457+
"state": "CREATED"
458+
}
459+
},
460+
{
461+
"version": "0",
462+
"id": "1a2b3cd4-5e6f-7g8h-9i0j-123456k7l890",
463+
"detail-type": "Backup Vault State Change",
464+
"source": "aws.backup",
465+
"account": "1112233445566",
466+
"time": "2020-06-24T23:18:19Z",
467+
"region": "us-west-2",
468+
"resources": [
469+
"arn:aws:backup:us-west-2:1112233445566:backup-vault:nameOfTestBackup"
470+
],
471+
"detail": {
472+
"backupVaultName": "vaultName",
473+
"state": "MODIFIED",
474+
"isLocked": "true"
475+
}
476+
},
477+
{
478+
"version": "0",
479+
"id": "344bccc1-6d2e-da93-3adf-b3f82460294d",
480+
"detail-type": "Backup Vault State Change",
481+
"source": "aws.backup",
482+
"account": "1112233445566",
483+
"time": "2020-06-22T02:42:37Z",
484+
"region": "us-west-2",
485+
"resources": [
486+
"arn:aws:backup:us-west-2:1112233445566:backup-vault:e8189629-1f8e-4ed2-af7d-b32415d04db1"
487+
],
488+
"detail": {
489+
"backupVaultName": "e8189629-1f8e-4ed2-af7d-b32415d04db1",
490+
"state": "DELETED"
443491
}
492+
}
444493
]

internal/app/app.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ func (a *App) ParseEvent(e awsEvent.CloudWatchEvent) (events.StateChangeEvent, e
2929
return events.NewBackupJobStateChange(e.Detail)
3030
case "Backup Plan State Change":
3131
return events.NewBackupPlanStateChange(e.Detail)
32+
case "Backup Vault State Change":
33+
return events.NewBackupVaultStateChange(e.Detail)
3234
case "Copy Job State Change":
3335
return events.NewCopyJobStateChange(e.Detail)
3436
case "Restore Job State Change":

internal/events/backup-plan.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,6 @@ func NewBackupPlanStateChange(raw json.RawMessage) (*BackupPlanStateChange, erro
4545
if err := json.Unmarshal(raw, &sce); err != nil {
4646
return &BackupPlanStateChange{}, err
4747
}
48-
sce.StatusMessage = "Backup plan for AWS Backup service was changed. Please confirm it was intended."
48+
sce.StatusMessage = "AWS Backup service backup plan was changed. Please confirm it was intended."
4949
return &sce, nil
5050
}

internal/events/backup-vault.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package events
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
7+
"github.com/slack-go/slack"
8+
)
9+
10+
type BackupVaultStateChange struct {
11+
StateChangeEvent
12+
BackupVaultId string `json:"backupVaultId"`
13+
State string `json:"state"`
14+
IsLocked string `json:"isLocked"`
15+
StatusMessage string `json:"statusMessage"`
16+
Raw string `json:"-"`
17+
}
18+
19+
func (sce *BackupVaultStateChange) SlackMessage() (slack.MsgOption, slack.MsgOption) {
20+
var blocks []slack.Block
21+
22+
header := slack.NewHeaderBlock(slack.NewTextBlockObject("plain_text", "Backup Vault Change", false, false))
23+
blocks = append(blocks, header)
24+
25+
var details []*slack.TextBlockObject
26+
details = append(details, slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*State*\n%s", sce.State), false, false))
27+
details = append(details, slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("*Locked*\n%s", sce.IsLocked), false, false))
28+
blocks = append(blocks, slack.NewSectionBlock(nil, details, nil))
29+
30+
if sce.StatusMessage != "" {
31+
desc := slack.NewSectionBlock(
32+
slack.NewTextBlockObject("mrkdwn", fmt.Sprintf("```\n%s\n```", sce.StatusMessage), false, false),
33+
nil, nil,
34+
)
35+
blocks = append(blocks, desc)
36+
}
37+
return slack.MsgOptionText(sce.StatusMessage, false), slack.MsgOptionBlocks(blocks...)
38+
}
39+
40+
func (sce *BackupVaultStateChange) IsAlertable() bool {
41+
return true
42+
}
43+
44+
func NewBackupVaultStateChange(raw json.RawMessage) (*BackupVaultStateChange, error) {
45+
var sce BackupVaultStateChange
46+
if err := json.Unmarshal(raw, &sce); err != nil {
47+
return &BackupVaultStateChange{}, err
48+
}
49+
if sce.IsLocked == "" {
50+
sce.IsLocked = "false"
51+
}
52+
sce.StatusMessage = "AWS Backup service backup vault was changed. Please confirm it was intended."
53+
return &sce, nil
54+
}

0 commit comments

Comments
 (0)