From 95a32e5df98a14145a2feec920bb9d7d4353c38c Mon Sep 17 00:00:00 2001 From: Andrew Melton Date: Fri, 1 Feb 2013 15:31:34 -0500 Subject: [PATCH 1/2] Starting usage api impl --- stacktach/dbapi.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++ stacktach/urls.py | 6 +++++ 2 files changed, 71 insertions(+) create mode 100644 stacktach/dbapi.py diff --git a/stacktach/dbapi.py b/stacktach/dbapi.py new file mode 100644 index 0000000..6d5f0ab --- /dev/null +++ b/stacktach/dbapi.py @@ -0,0 +1,65 @@ +import decimal +import json + +from django.forms.models import model_to_dict +from django.http import HttpResponse + +import datetime_to_decimal +import models + + +def rsp(data): + return HttpResponse(json.dumps(data)) + + +def list_usage_launches(request): + filter_args = {} + if 'instance' in request.GET: + filter_args['instance'] = request.GET['instance'] + + if len(filter_args) > 0: + objects = models.InstanceUsage.objects.filter(**filter_args) + else: + objects = models.InstanceUsage.objects.all() + + dicts = _convert_model_list(objects.order_by("launched_at")) + return rsp({'launches': dicts}) + + +def list_usage_deletes(request): + filter_args = {} + if 'instance' in request.GET: + filter_args['instance'] = request.GET['instance'] + + if len(filter_args) > 0: + objects = models.InstanceDeletes.objects.filter(**filter_args) + else: + objects = models.InstanceDeletes.objects.all() + + dicts = _convert_model_list(objects.order_by("launched_at")) + return rsp({'deletes': dicts}) + + +def list_usage_exists(request): + filter_args = {} + if 'instance' in request.GET: + filter_args['instance'] = request.GET['instance'] + + if len(filter_args) > 0: + objects = models.InstanceExists.objects.filter(**filter_args) + else: + objects = models.InstanceExists.objects.all() + + dicts = _convert_model_list(objects.order_by("id")) + return rsp({'exists': dicts}) + + +def _convert_model_list(list): + converted = [] + for item in list: + dict = model_to_dict(item) + for key in dict: + if isinstance(dict[key], decimal.Decimal): + dict[key] = str(datetime_to_decimal.dt_from_decimal(dict[key])) + converted.append(dict) + return converted diff --git a/stacktach/urls.py b/stacktach/urls.py index 212cdea..ea86157 100644 --- a/stacktach/urls.py +++ b/stacktach/urls.py @@ -19,6 +19,12 @@ urlpatterns = patterns('', url(r'stacky/kpi/$', 'stacktach.stacky_server.do_kpi'), url(r'stacky/kpi/(?P\d+)/$', 'stacktach.stacky_server.do_kpi'), + url(r'db/usage/launches/$', + 'stacktach.dbapi.list_usage_launches'), + url(r'db/usage/deletes/$', + 'stacktach.dbapi.list_usage_deletes'), + url(r'db/usage/exists/$', 'stacktach.dbapi.list_usage_exists'), + url(r'^(?P\d+)/$', 'stacktach.views.home', name='home'), url(r'^(?P\d+)/details/(?P\w+)/(?P\d+)/$', 'stacktach.views.details', name='details'), From 4742a033de115a947d709165fa592b78a5696ebb Mon Sep 17 00:00:00 2001 From: Andrew Melton Date: Mon, 4 Feb 2013 13:11:14 -0500 Subject: [PATCH 2/2] Adding stacky api for usage --- stacktach/dbapi.py | 2 +- stacktach/stacky_server.py | 80 +++++++++++++++++++++++++++++++++++++- stacktach/urls.py | 6 +++ 3 files changed, 86 insertions(+), 2 deletions(-) diff --git a/stacktach/dbapi.py b/stacktach/dbapi.py index 6d5f0ab..6f01a1a 100644 --- a/stacktach/dbapi.py +++ b/stacktach/dbapi.py @@ -9,7 +9,7 @@ import models def rsp(data): - return HttpResponse(json.dumps(data)) + return HttpResponse(json.dumps(data), content_type="application/json") def list_usage_launches(request): diff --git a/stacktach/stacky_server.py b/stacktach/stacky_server.py index 327bb25..994729c 100644 --- a/stacktach/stacky_server.py +++ b/stacktach/stacky_server.py @@ -72,7 +72,7 @@ def sec_to_time(diff): def rsp(data): - return HttpResponse(json.dumps(data)) + return HttpResponse(json.dumps(data), content_type="application/json") def do_deployments(request): @@ -297,3 +297,81 @@ def do_kpi(request, tenant_id=None): results.append([event, sec_to_time(track.duration), uuid, end_event.deployment.name]) return rsp(results) + + +def do_list_usage_launches(request): + + filter_args = {} + if 'instance' in request.GET: + filter_args['instance'] = request.GET['instance'] + + if len(filter_args) > 0: + launches = models.InstanceUsage.objects.filter(**filter_args) + else: + launches = models.InstanceUsage.objects.all() + + results = [] + results.append(["UUID", "Launched At", "Instance Type Id"]) + + for launch in launches: + launched = None + if launch.launched_at: + launched = str(dt.dt_from_decimal(launch.launched_at)) + results.append([launch.instance, launched, launch.instance_type_id]) + + return rsp(results) + + +def do_list_usage_deletes(request): + + filter_args = {} + if 'instance' in request.GET: + filter_args['instance'] = request.GET['instance'] + + if len(filter_args) > 0: + deletes = models.InstanceDeletes.objects.filter(**filter_args) + else: + deletes = models.InstanceDeletes.objects.all() + + results = [] + results.append(["UUID", "Launched At", "Deleted At"]) + + for delete in deletes: + launched = None + if delete.launched_at: + launched = str(dt.dt_from_decimal(delete.launched_at)) + deleted = None + if delete.deleted_at: + deleted = str(dt.dt_from_decimal(delete.deleted_at)) + results.append([delete.instance, launched, deleted]) + + return rsp(results) + + +def do_list_usage_exists(request): + + filter_args = {} + if 'instance' in request.GET: + filter_args['instance'] = request.GET['instance'] + + if len(filter_args) > 0: + exists = models.InstanceExists.objects.filter(**filter_args) + else: + exists = models.InstanceExists.objects.all() + + results = [] + results.append(["UUID", "Launched At", "Deleted At", "Instance Type Id", + "Message ID", "Status"]) + + for exist in exists: + launched = None + if exist.launched_at: + launched = str(dt.dt_from_decimal(exist.launched_at)) + deleted = None + if exist.deleted_at: + deleted = str(dt.dt_from_decimal(exist.deleted_at)) + results.append([exist.instance, launched, deleted, + exist.instance_type_id, exist.message_id, + exist.status]) + + return rsp(results) diff --git a/stacktach/urls.py b/stacktach/urls.py index ea86157..59c6098 100644 --- a/stacktach/urls.py +++ b/stacktach/urls.py @@ -18,6 +18,12 @@ urlpatterns = patterns('', 'stacktach.stacky_server.do_watch'), url(r'stacky/kpi/$', 'stacktach.stacky_server.do_kpi'), url(r'stacky/kpi/(?P\d+)/$', 'stacktach.stacky_server.do_kpi'), + url(r'stacky/usage/launches/$', + 'stacktach.stacky_server.do_list_usage_launches'), + url(r'stacky/usage/deletes/$', + 'stacktach.stacky_server.do_list_usage_deletes'), + url(r'stacky/usage/exists/$', + 'stacktach.stacky_server.do_list_usage_exists'), url(r'db/usage/launches/$', 'stacktach.dbapi.list_usage_launches'),