Skip to content

Commit

Permalink
feat: Add support for mapping account id to name when in organizations
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreZiviani committed Apr 15, 2023
1 parent 31ab0b4 commit add0cf3
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 9 deletions.
6 changes: 5 additions & 1 deletion exporter/health.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,11 @@ func (m Metrics) extractResources(resources []healthTypes.AffectedEntity) string

func (m Metrics) extractAccounts(accounts []string) string {
if len(accounts) > 0 {
return strings.Join(accounts, ",")
if m.organizationEnabled {
return strings.Join(m.getAccountsNameFromIds(accounts), ",")
} else {
return strings.Join(accounts, ",")
}
} else {
return "All accounts in region"
}
Expand Down
3 changes: 3 additions & 0 deletions exporter/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ func (m *Metrics) init(ctx context.Context, c *cli.Context) {
m.slackApi = slack.New(m.slackToken)

m.organizationEnabled = m.HealthOrganizationEnabled(ctx)
if m.organizationEnabled {
m.GetOrgAccountsName(ctx)
}

m.tz, err = time.LoadLocation(os.Getenv("TZ"))
if err != nil {
Expand Down
35 changes: 35 additions & 0 deletions exporter/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/aws/aws-sdk-go-v2/service/health"
healthTypes "github.com/aws/aws-sdk-go-v2/service/health/types"
"github.com/aws/aws-sdk-go-v2/service/organizations"
)

func (m *Metrics) GetOrgEvents() []HealthEvent {
Expand Down Expand Up @@ -114,3 +115,37 @@ func (m Metrics) getAffectedEntitiesForOrg(ctx context.Context, event healthType
enrichedEvent.AffectedResources = append(enrichedEvent.AffectedResources, resources.Entities...)
}
}

func (m *Metrics) GetOrgAccountsName(ctx context.Context) {
org := organizations.NewFromConfig(m.awsconfig)
pag := organizations.NewListAccountsPaginator(
org,
&organizations.ListAccountsInput{},
)

m.accountNames = make(map[string]string, 0)

for pag.HasMorePages() {
accounts, err := pag.NextPage(ctx)
if err != nil {
panic(err.Error())
}

for _, account := range accounts.Accounts {
m.accountNames[*account.Id] = *account.Name
}
}
}

func (m Metrics) getAccountsNameFromIds(ids []string) []string {
names := make([]string, len(ids))
for i, account := range ids {
if name, ok := m.accountNames[account]; ok {
names[i] = name
} else {
names[i] = account
}
}

return names
}
2 changes: 2 additions & 0 deletions exporter/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ type Metrics struct {
ignoreEvents []string
ignoreResources []string
ignoreResourceEvent []string

accountNames map[string]string
}

type HealthEvent struct {
Expand Down
11 changes: 6 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@ module github.com/AndreZiviani/aws-health-exporter
go 1.19

require (
github.com/aws/aws-sdk-go-v2 v1.17.7
github.com/aws/aws-sdk-go-v2 v1.17.8
github.com/aws/aws-sdk-go-v2/config v1.18.7
github.com/aws/aws-sdk-go-v2/credentials v1.13.7
github.com/aws/aws-sdk-go-v2/service/ec2 v1.77.0
github.com/aws/aws-sdk-go-v2/service/health v1.16.6
github.com/aws/aws-sdk-go-v2/service/organizations v1.19.4
github.com/aws/aws-sdk-go-v2/service/pricing v1.17.5
github.com/aws/aws-sdk-go-v2/service/sts v1.17.7
github.com/prometheus/client_golang v1.14.0
github.com/sirupsen/logrus v1.9.0
github.com/slack-go/slack v0.12.1
Expand All @@ -18,15 +21,13 @@ require (
)

require (
github.com/aws/aws-sdk-go-v2/credentials v1.13.7 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.32 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.26 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.11.28 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.11 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.17.7 // indirect
github.com/aws/smithy-go v1.13.5 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
Expand Down
11 changes: 8 additions & 3 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
github.com/aws/aws-sdk-go-v2 v1.17.3/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2 v1.17.7 h1:CLSjnhJSTSogvqUGhIC6LqFKATMRexcxLZ0i/Nzk9Eg=
github.com/aws/aws-sdk-go-v2 v1.17.7/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2 v1.17.8 h1:GMupCNNI7FARX27L7GjCJM8NgivWbRgpjNI/hOQjFS8=
github.com/aws/aws-sdk-go-v2 v1.17.8/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2/config v1.18.7 h1:V94lTcix6jouwmAsgQMAEBozVAGJMFhVj+6/++xfe3E=
github.com/aws/aws-sdk-go-v2/config v1.18.7/go.mod h1:OZYsyHFL5PB9UpyS78NElgKs11qI/B5KJau2XOJDXHA=
github.com/aws/aws-sdk-go-v2/credentials v1.13.7 h1:qUUcNS5Z1092XBFT66IJM7mYkMwgZ8fcC8YDIbEwXck=
github.com/aws/aws-sdk-go-v2/credentials v1.13.7/go.mod h1:AdCcbZXHQCjJh6NaH3pFaw8LUeBFn5+88BZGMVGuBT8=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21 h1:j9wi1kQ8b+e0FBVHxCqCGo4kxDU175hoDHcWAi0sauU=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.21/go.mod h1:ugwW57Z5Z48bpvUyZuaPy4Kv+vEfJWnIrky7RmkBvJg=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27/go.mod h1:a1/UpzeyBBerajpnP5nGZa9mGzsBn5cOKxm6NWQsvoI=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31 h1:sJLYcS+eZn5EeNINGHSCRAwUJMFVqklwkH36Vbyai7M=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31/go.mod h1:QT0BqUvX1Bh2ABdTGnjqEjvjzrCfIniM9Sc8zn9Yndo=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.32 h1:dpbVNUjczQ8Ae3QKHbpHBpfvaVkRdesxpTOe9pTouhU=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.32/go.mod h1:RudqOgadTWdcS3t/erPQo24pcVEoYyqj/kKW5Vya21I=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21/go.mod h1:+Gxn8jYn5k9ebfHEqlhrMirFjSW0v0C9fI+KN5vk2kE=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25 h1:1mnRASEKnkqsntcxHaysxwgVoUUp5dkiB+l3llKnqyg=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25/go.mod h1:zBHOPwhBc3FlQjQJE/D3IfPWiWaQmT06Vq9aNukDo0k=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.26 h1:QH2kOS3Ht7x+u0gHCh06CXL/h6G8LQJFpZfFBYBNboo=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.26/go.mod h1:vq86l7956VgFr0/FWQ2BWnK07QC3WYsepKzy33qqY5U=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28 h1:KeTxcGdNnQudb46oOl4d90f2I33DF/c6q3RnZAmvQdQ=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.28/go.mod h1:yRZVr/iT0AqyHeep00SZ4YfBAKojXz08w3XMBscdi0c=
github.com/aws/aws-sdk-go-v2/service/ec2 v1.77.0 h1:m6HYlpZlTWb9vHuuRHpWRieqPHWlS0mvQ90OJNrG/Nk=
Expand All @@ -21,6 +24,8 @@ github.com/aws/aws-sdk-go-v2/service/health v1.16.6 h1:qwbNYWGgcfqlBb6ZNbB2pBDia
github.com/aws/aws-sdk-go-v2/service/health v1.16.6/go.mod h1:q1i79Qt6zxIFVzQQrnrGrn7xl1CMRrXX7foTuuKXSn8=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21 h1:5C6XgTViSb0bunmU57b3CT+MhxULqHH2721FVA+/kDM=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.21/go.mod h1:lRToEJsn+DRA9lW4O9L9+/3hjTkUzlzyzHqn8MTds5k=
github.com/aws/aws-sdk-go-v2/service/organizations v1.19.4 h1:zDYlPD6AUmVRA0MUa4zY6qN/g8dOvptfk2JfW7jFFEk=
github.com/aws/aws-sdk-go-v2/service/organizations v1.19.4/go.mod h1:JwocX44NP3XrNrxinPbTvuWxH0JBriJZT/LFPsL7rNU=
github.com/aws/aws-sdk-go-v2/service/pricing v1.17.5 h1:89yKwg+Kn3jgjcpxzmbZYH0O+I2+HjEcILIQrLkj8ik=
github.com/aws/aws-sdk-go-v2/service/pricing v1.17.5/go.mod h1:1YtXjD073MNbQvowCxfSsdhGUCJQOt04FVDcs8uYCmI=
github.com/aws/aws-sdk-go-v2/service/sso v1.11.28 h1:gItLq3zBYyRDPmqAClgzTH8PBjDQGeyptYGHIwtYYNA=
Expand Down

0 comments on commit add0cf3

Please sign in to comment.