agent: |
HeIQP6AhU6er8R7Tc0kdAverage CPU Utilizations of all AWS EC2 Instances
Average CPU Utilizations of all AWS EC2 Instances
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
inputs
outputs
import boto3
from datetime import datetime, timedelta
from botocore.exceptions import NoCredentialsError, PartialCredentialsError, BotoCoreError, ClientError, EndpointConnectionError, DataNotFoundError
# AWS credentials
creds = _get_creds(cred_label)['creds']
access_key = creds['username']
secret_key = creds['password']
if locals().get('instances_list') is None:
instances_list = []
# Function to fetch CPU utilization for a given instance
def fetch_cpu_utilization(instance_id, region, start_time, end_time):
try:
cloudwatch = boto3.client('cloudwatch', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=region)
response = cloudwatch.get_metric_data(
MetricDataQueries=[
{
'Id': 'cpuUtilization',
'MetricStat': {
'Metric': {
'Namespace': 'AWS/EC2',
'MetricName': 'CPUUtilization',
'Dimensions': [{'Name': 'InstanceId', 'Value': instance_id}]
},
'Period': 3600, # one hour
'Stat': 'Average',
},
'ReturnData': True,
},
],
StartTime=start_time,
EndTime=end_time
)
return response['MetricDataResults'][0]['Timestamps'], response['MetricDataResults'][0]['Values']
except Exception as e:
print(f"Error getting CPU utilization for instance {instance_id}: {e}")
return [], []
# Main plotting logic
def plot_cpu_utilization(instances_list, lookback_days=7):
end_time = datetime.utcnow()
start_time = end_time - timedelta(days=lookback_days)
for instance in instances_list:
if instance['State'] != 'running':
continue
timestamps, cpu_values = fetch_cpu_utilization(instance['InstanceId'], instance['Region'], start_time, end_time)
# Check if data is available
if timestamps:
context.plot.add_trace(
name=f"Instance {instance['InstanceId']}",
xpts=timestamps, # x-axis points
ypts=cpu_values, # y-axis points
tracetype="line"
)
# Set plot properties
context.plot.xlabel = 'Date'
context.plot.ylabel = 'Average CPU Utilization (%)'
context.plot.title = f'CPU Utilization per EC2 Instance (Last {lookback_days} Days)'
# Execute the plotting function
plot_cpu_utilization(instances_list)
copied