Skip to content

Commit 5fc4e89

Browse files
committed
feat: Added AWS autoscaling
1 parent 6d92e64 commit 5fc4e89

File tree

4 files changed

+111
-4
lines changed

4 files changed

+111
-4
lines changed

go.mod

+6-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ require (
1010
github.com/aws/aws-sdk-go-v2/service/s3 v1.45.0
1111
)
1212

13+
require github.com/aws/aws-sdk-go-v2/service/autoscaling v1.38.0 // indirect
14+
1315
require (
1416
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.42.5
1517
github.com/aws/aws-sdk-go-v2/service/cloudwatchevents v1.21.6
@@ -23,12 +25,12 @@ require (
2325
)
2426

2527
require (
26-
github.com/aws/aws-sdk-go-v2 v1.24.1
28+
github.com/aws/aws-sdk-go-v2 v1.25.0
2729
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 // indirect
2830
github.com/aws/aws-sdk-go-v2/credentials v1.16.4 // indirect
2931
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.5 // indirect
30-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 // indirect
31-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 // indirect
32+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.0 // indirect
33+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.0 // indirect
3234
github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1 // indirect
3335
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4 // indirect
3436
github.com/aws/aws-sdk-go-v2/service/apigateway v1.21.6
@@ -45,5 +47,5 @@ require (
4547
github.com/aws/aws-sdk-go-v2/service/sso v1.17.3 // indirect
4648
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.1 // indirect
4749
github.com/aws/aws-sdk-go-v2/service/sts v1.25.4 // indirect
48-
github.com/aws/smithy-go v1.19.0 // indirect
50+
github.com/aws/smithy-go v1.20.0 // indirect
4951
)

go.sum

+10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ github.com/aws/aws-sdk-go-v2 v1.24.0 h1:890+mqQ+hTpNuw0gGP6/4akolQkSToDJgHfQE7Aw
22
github.com/aws/aws-sdk-go-v2 v1.24.0/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4=
33
github.com/aws/aws-sdk-go-v2 v1.24.1 h1:xAojnj+ktS95YZlDf0zxWBkbFtymPeDP+rvUQIH3uAU=
44
github.com/aws/aws-sdk-go-v2 v1.24.1/go.mod h1:LNh45Br1YAkEKaAqvmE1m8FUx6a5b/V0oAKV7of29b4=
5+
github.com/aws/aws-sdk-go-v2 v1.25.0 h1:sv7+1JVJxOu/dD/sz/csHX7jFqmP001TIY7aytBWDSQ=
6+
github.com/aws/aws-sdk-go-v2 v1.25.0/go.mod h1:G104G1Aho5WqF+SR3mDIobTABQzpYV0WxMsKxlMggOA=
57
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 h1:ZY3108YtBNq96jNZTICHxN1gSBSbnvIdYwwqnvCV4Mc=
68
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1/go.mod h1:t8PYl/6LzdAqsU4/9tz28V/kU+asFePvpOMkdul0gEQ=
79
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.4 h1:OCs21ST2LrepDfD3lwlQiOqIGp6JiEUqG84GzTDoyJs=
@@ -16,16 +18,22 @@ github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9 h1:v+HbZaCGmOwnTTVS86
1618
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.9/go.mod h1:Xjqy+Nyj7VDLBtCMkQYOw1QYfAEZCVLrfI0ezve8wd4=
1719
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10 h1:vF+Zgd9s+H4vOXd5BMaPWykta2a6Ih0AKLq/X6NYKn4=
1820
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.10/go.mod h1:6BkRjejp/GR4411UGqkX8+wFMbFbqsUIimfK4XjOKR4=
21+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.0 h1:NPs/EqVO+ajwOoq56EfcGKa3L3ruWuazkIw1BqxwOPw=
22+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.0/go.mod h1:D+duLy2ylgatV+yTlQ8JTuLfDD0BnFvnQRc+o6tbZ4M=
1923
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9 h1:N94sVhRACtXyVcjXxrwK1SKFIJrA9pOJ5yu2eSHnmls=
2024
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.9/go.mod h1:hqamLz7g1/4EJP+GH5NBhcUMLjW+gKLQabgyz6/7WAU=
2125
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10 h1:nYPe006ktcqUji8S2mqXf9c/7NdiKriOwMvWQHgYztw=
2226
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.10/go.mod h1:6UV4SZkVvmODfXKql4LCbaZUpF7HO2BX38FgBf9ZOLw=
27+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.0 h1:ks7KGMVUMoDzcxNWUlEdI+/lokMFD136EL6DWmUOV80=
28+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.0/go.mod h1:hL6BWM/d/qz113fVitZjbXR0E+RCTU1+x+1Idyn5NgE=
2329
github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1 h1:uR9lXYjdPX0xY+NhvaJ4dD8rpSRz5VY81ccIIoNG+lw=
2430
github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY=
2531
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4 h1:40Q4X5ebZruRtknEZH/bg91sT5pR853F7/1X9QRbI54=
2632
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.4/go.mod h1:u77N7eEECzUv7F0xl2gcfK/vzc8wcjWobpy+DcrLJ5E=
2733
github.com/aws/aws-sdk-go-v2/service/apigateway v1.21.6 h1:ePPaOVn92r5n8Neecdpy93hDmR0PBH6H6b7VQCE5vKE=
2834
github.com/aws/aws-sdk-go-v2/service/apigateway v1.21.6/go.mod h1:P/zwE9uiC6eK/kL3CS60lxTTVC2zAvaS4iW31io41V4=
35+
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.38.0 h1:BnElrrgowaG50hoUCbBc5lq5XX7Fr7F4nvZovCDjevk=
36+
github.com/aws/aws-sdk-go-v2/service/autoscaling v1.38.0/go.mod h1:6ioQn0JPZSvTdXmnUAQa9h7x8m+KU63rkgiAD1ZLnqc=
2937
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.42.5 h1:5+m0XrCIwjjeP4f3AdC1wyQBc2ClIJi2mP4e3Wkdgvw=
3038
github.com/aws/aws-sdk-go-v2/service/cloudformation v1.42.5/go.mod h1:oPk8ZMctRUtGC13pOE83Zp0baZgJsmzuKm4IRR+zQOI=
3139
github.com/aws/aws-sdk-go-v2/service/cloudfront v1.31.0 h1:D8FSJvBDs+WLHjZiN1brxI4Vn9OmjhqlIG3mobYFsnA=
@@ -78,6 +86,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.25.4 h1:yEvZ4neOQ/KpUqyR+X0ycUTW/kVR
7886
github.com/aws/aws-sdk-go-v2/service/sts v1.25.4/go.mod h1:feTnm2Tk/pJxdX+eooEsxvlvTWBvDm6CasRZ+JOs2IY=
7987
github.com/aws/smithy-go v1.19.0 h1:KWFKQV80DpP3vJrrA9sVAHQ5gc2z8i4EzrLhLlWXcBM=
8088
github.com/aws/smithy-go v1.19.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
89+
github.com/aws/smithy-go v1.20.0 h1:6+kZsCXZwKxZS9RfISnPc4EXlHoyAkm2hPuM8X2BrrQ=
90+
github.com/aws/smithy-go v1.20.0/go.mod h1:uo5RKksAl4PzhqaAbjd4rLgFoq5koTsQKYuGe7dklGc=
8191
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
8292
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
8393
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=

services/awshandler/autoscaling.go

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package awshandler
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
8+
"github.com/Cloud-Code-AI/cloudstate/services/utils"
9+
"github.com/aws/aws-sdk-go-v2/aws"
10+
"github.com/aws/aws-sdk-go-v2/service/autoscaling"
11+
"github.com/aws/aws-sdk-go-v2/service/autoscaling/types"
12+
)
13+
14+
type autoscalingInfo struct {
15+
AutoScalingGroups []types.AutoScalingGroup `json:"groups"`
16+
AutoScalingInstances []types.AutoScalingInstanceDetails `json:"instances"`
17+
LaunchConfigurations []types.LaunchConfiguration `json:"metric_streams"`
18+
}
19+
20+
// Gets all the AutoScaling Data for a given regions and
21+
// stores the results in output/{region}/autoscaling/metrics.json file
22+
func ListAutoscalingFn(sdkConfig aws.Config, parentpath string) {
23+
const maxItems = 50
24+
25+
// Create autoscaling service client
26+
client := autoscaling.NewFromConfig(sdkConfig)
27+
data := autoscalingInfo{
28+
AutoScalingGroups: getAutoScalingGroups(client),
29+
AutoScalingInstances: getAutoScalingInstances(client),
30+
LaunchConfigurations: getLaunchConfigurations(client),
31+
}
32+
33+
const (
34+
path = "/autoscaling/data.json"
35+
)
36+
37+
stats := addAutoscalingStats(data)
38+
output := BasicTemplate{
39+
Data: data,
40+
Stats: stats,
41+
}
42+
43+
filepath := parentpath + sdkConfig.Region + path
44+
45+
err := utils.WriteJSONToFile(filepath, output)
46+
if err != nil {
47+
fmt.Println("Error writing autoscaling data")
48+
}
49+
50+
}
51+
52+
func addAutoscalingStats(inp autoscalingInfo) interface{} {
53+
s := make(map[string]float64)
54+
s["autoscaling_groups"] = float64(len(inp.AutoScalingGroups))
55+
s["autoscaling_instances"] = float64(len(inp.AutoScalingInstances))
56+
s["launch_configurations"] = float64(len(inp.LaunchConfigurations))
57+
return s
58+
}
59+
60+
func getAutoScalingGroups(client *autoscaling.Client) []types.AutoScalingGroup {
61+
// Retrieve the AutoScaling dashboard
62+
result, err := client.DescribeAutoScalingGroups(context.TODO(), &autoscaling.DescribeAutoScalingGroupsInput{})
63+
if err != nil {
64+
log.Fatalf("Unable to retrieve autoscaling groups, %v", err)
65+
}
66+
var groups []types.AutoScalingGroup
67+
// TODO: Add pagination updates
68+
groups = result.AutoScalingGroups
69+
return groups
70+
}
71+
72+
func getAutoScalingInstances(client *autoscaling.Client) []types.AutoScalingInstanceDetails {
73+
// Retrieve the AutoScaling Instances
74+
result, err := client.DescribeAutoScalingInstances(context.TODO(), &autoscaling.DescribeAutoScalingInstancesInput{})
75+
if err != nil {
76+
log.Fatalf("Unable to retrieve autoscaling instances, %v", err)
77+
}
78+
var instances []types.AutoScalingInstanceDetails
79+
// TODO: Add pagination updates
80+
instances = result.AutoScalingInstances
81+
return instances
82+
}
83+
84+
func getLaunchConfigurations(client *autoscaling.Client) []types.LaunchConfiguration {
85+
// Retrieve the AutoScaling LaunchConfigurations
86+
result, err := client.DescribeLaunchConfigurations(context.TODO(), &autoscaling.DescribeLaunchConfigurationsInput{})
87+
if err != nil {
88+
log.Fatalf("Unable to retrieve autoscaling configs, %v", err)
89+
}
90+
var configs []types.LaunchConfiguration
91+
// TODO: Add pagination updates
92+
configs = result.LaunchConfigurations
93+
return configs
94+
}

services/awshandler/initialize.go

+1
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ func StoreAWSData(region string, outFolder string) {
103103
ECRMetaData(sdkConfig, parentpath)
104104
codebuildMetadata(sdkConfig, parentpath)
105105
ListVpcFn(sdkConfig, parentpath)
106+
ListAutoscalingFn(sdkConfig, parentpath)
106107

107108
}
108109

0 commit comments

Comments
 (0)