diff --git a/stacktach/dbapi.py b/stacktach/dbapi.py new file mode 100644 index 0000000..6f01a1a --- /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), content_type="application/json") + + +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/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 212cdea..59c6098 100644 --- a/stacktach/urls.py +++ b/stacktach/urls.py @@ -18,6 +18,18 @@ 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'), + 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+)/$',