77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
|
from pprint import pprint
|
||
|
import boto
|
||
|
|
||
|
# connect up parts of the Amazon infrastructure
|
||
|
|
||
|
ec2 = boto.connect_ec2()
|
||
|
cw = boto.connect_cloudwatch()
|
||
|
rds = boto.connect_rds()
|
||
|
|
||
|
def all_instances():
|
||
|
reservations = ec2.get_all_instances()
|
||
|
instances = [i for r in reservations for i in r.instances]
|
||
|
return instances
|
||
|
|
||
|
def all_zones():
|
||
|
print ec2.get_all_zones()
|
||
|
|
||
|
def all_rds():
|
||
|
return rds.get_all_dbinstances()
|
||
|
|
||
|
def instance(tag_name):
|
||
|
try:
|
||
|
return ec2.get_all_instances(filters={'tag:Name' : tag_name})[0].instances[0]
|
||
|
except Exception, e:
|
||
|
return None
|
||
|
|
||
|
def console_output(instance):
|
||
|
"""returnn console output of instance"""
|
||
|
try:
|
||
|
return instance.get_console_output().output
|
||
|
except Exception, e:
|
||
|
return None
|
||
|
|
||
|
def instance_metrics(instance):
|
||
|
"""metrics that apply to given instance"""
|
||
|
metrics = cw.list_metrics()
|
||
|
my_metrics = []
|
||
|
|
||
|
for metric in metrics:
|
||
|
if 'InstanceId' in metric.dimensions:
|
||
|
if instance.id in metric.dimensions['InstanceId']:
|
||
|
my_metrics.append(metric)
|
||
|
|
||
|
return my_metrics
|
||
|
|
||
|
# how to get average CPU utilization of web1?
|
||
|
# filter(lambda x: x.name == 'CPUUtilization', m)
|
||
|
# metric.query(start_time, end_time,'Average', period=6000)
|
||
|
|
||
|
def instance_metric(instance, metric_name):
|
||
|
m = instance_metrics(instance)
|
||
|
return filter(lambda x: x.name == metric_name, m)
|
||
|
|
||
|
def launch_time(instance):
|
||
|
return boto.utils.parse_ts(instance.launch_time)
|
||
|
|
||
|
def max_cpu(instance):
|
||
|
pass
|
||
|
|
||
|
|
||
|
def stats_for_instances(instances=None):
|
||
|
"""return basic stats for input instances"""
|
||
|
if instances is None:
|
||
|
instances = all_instances()
|
||
|
stats = []
|
||
|
for instance in instances:
|
||
|
instance.update() # to get latest update
|
||
|
stats.append((instance.id, instance.key_name, instance.state, instance.ip_address, instance.dns_name))
|
||
|
|
||
|
return stats
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
pprint (stats_for_instances(all_instances()))
|
||
|
web1 = instance('web1')
|
||
|
print instance_metrics(web1)
|
||
|
|