-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrds_parser_secrets_removed.py
120 lines (100 loc) · 4.94 KB
/
rds_parser_secrets_removed.py
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import boto3
import pandas as pd
import datetime
from itertools import chain
from sqlalchemy import create_engine
import constants
available_regions=['us-east-2', 'us-east-1', 'us-west-1', 'us-west-2', 'ap-south-1', 'ap-northeast-2', 'ap-southeast-1', 'ap-southeast-2', 'ap-northeast-1', 'ca-central-1', 'eu-central-1', 'eu-west-1', 'eu-west-2', 'eu-west-3', 'eu-north-1', 'sa-east-1']
aws_access_key_id=
aws_secret_access_key=
metrics_end_time=datetime.datetime.utcnow()
metrics_start_time=metrics_end_time - datetime.timedelta(hours=240)
MetricDataQueries_db=MetricDataQueries_db=[
{
'Id': 'fetching_data_for_something',
'Expression': "SEARCH('{AWS/RDS,DBInstanceIdentifier} MetricName=\"DatabaseConnections\"', 'Average', 86400)",
'ReturnData': True
},
]
MetricDataQueries_cpu=[
{
'Id': 'fetching_data_for_something',
'Expression': "SEARCH('{AWS/RDS,DBInstanceIdentifier} MetricName=\"CPUUtilization\"', 'Average', 86400)",
'ReturnData': True
},
]
final_metric_list=[]
def create_instance_dictionary(i,region):
rds_dict={}
rds_dict['DBInstanceIdentifier']=i['DBInstanceIdentifier']
rds_dict['DBInstanceClass']=i['DBInstanceClass']
rds_dict['Engine']=i['Engine']=i['Engine']
rds_dict['DBInstanceStatus']=i['DBInstanceStatus']
rds_dict['MasterUsername']=i['MasterUsername']
rds_dict['AllocatedStorage']=i['AllocatedStorage']
rds_dict['InstanceCreateTime']=i['InstanceCreateTime']
rds_dict['AvailabilityZone']=i['AvailabilityZone']
rds_dict['region'] =region
rds_dict['type'] = 'RDS'
rds_dict['userid'] = 'cogscaledev'
return rds_dict
def rds_parsing():
ins_arr=[]
for region in available_regions:
print(region)
rds = boto3.client('rds', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key,region_name=region)
db_instances=rds.describe_db_instances()
for dbinstance in db_instances['DBInstances']:
ins_dict = create_instance_dictionary(dbinstance,region)
ins_arr.append(ins_dict)
return ins_arr
final_list=rds_parsing()
df=pd.DataFrame(final_list)
#print(final_list)
def calculate_metrics(metrics,x,region):
metrics_list = []
for i in metrics['MetricDataResults']:
d = {}
e = {}
keys = i['Timestamps']
values = i['Values']
e = dict(zip(keys, values))
d[x] = e
d['instance'] = i['Label']
d['region']=region
metrics_list.append(d)
return metrics_list
def rds_cloud_watch_parsing():
final_metric_list_db=[]
final_metric_list_cpu=[]
for region in available_regions:
temp_list_db=[]
cloud_watch_object = boto3.client('cloudwatch', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, region_name=region)
metrics = cloud_watch_object.get_metric_data(MetricDataQueries=MetricDataQueries_db,StartTime=metrics_start_time,EndTime=metrics_end_time,
ScanBy='TimestampDescending',MaxDatapoints=100000)
temp_list_db=calculate_metrics(metrics,'DatabaseConnections',region)
final_metric_list_db.append(temp_list_db)
for region in available_regions:
temp_list_cpu=[]
cloud_watch_object = boto3.client('cloudwatch', aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key, region_name=region)
metrics = cloud_watch_object.get_metric_data(MetricDataQueries=MetricDataQueries_cpu,
StartTime=metrics_start_time, EndTime=metrics_end_time,
ScanBy='TimestampDescending', MaxDatapoints=100000)
temp_list_cpu = calculate_metrics(metrics,'CPUUtilization',region)
final_metric_list_cpu.append(temp_list_cpu)
return final_metric_list_db,final_metric_list_cpu
final_metric_list_db,final_metric_list_cpu=rds_cloud_watch_parsing()
final_metric_list_db = list(chain.from_iterable(final_metric_list_db))
final_metric_list_cpu = list(chain.from_iterable(final_metric_list_cpu))
final_metric_list_db=pd.DataFrame(final_metric_list_db)
final_metric_list_cpu=pd.DataFrame(final_metric_list_cpu)
#print(final_metric_list_db)
#print(final_metric_list_cpu)
new_df=pd.merge(pd.merge(df, final_metric_list_db, how='left', left_on=['DBInstanceIdentifier'], right_on=['instance']), final_metric_list_cpu, how='left',left_on=['DBInstanceIdentifier'], right_on=['instance'])
new_df=new_df.drop(['region','instance_x','region_y','instance_y'],axis=1)
new_df=new_df.rename(columns={'region_x':'region'})
print(new_df)
engine = create_engine('postgresql://{}:{}@{}:{}/{}'.format(constants.user, constants.password, constants.host, constants.port, constants.db))
resp = new_df.to_sql('aws_reporting', engine, if_exists='replace', index=False, chunksize=1000, method='multi')
print(resp)