diff --git a/sysadmin/cloudwatch.py b/sysadmin/cloudwatch.py new file mode 100644 index 00000000..44a9be18 --- /dev/null +++ b/sysadmin/cloudwatch.py @@ -0,0 +1,76 @@ +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) + diff --git a/sysadmin/loadtest.py b/sysadmin/loadtest.py new file mode 100644 index 00000000..c1da2dd3 --- /dev/null +++ b/sysadmin/loadtest.py @@ -0,0 +1,12 @@ +import threading +import datetime + +class ThreadClass(threading.Thread): + def run(self): + now = datetime.datetime.now() + print "%s says Hello World at time: %s" % (self.getName(), now) + +for i in range(10): + t = ThreadClass() + t.start() + \ No newline at end of file