Merge pull request #28 from ramielrowe/usage_api

Usage API
This commit is contained in:
Sandy Walsh 2013-02-13 12:51:04 -08:00
commit e946eba267
3 changed files with 156 additions and 1 deletions

65
stacktach/dbapi.py Normal file

@ -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

@ -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)

@ -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<tenant_id>\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<deployment_id>\d+)/$', 'stacktach.views.home', name='home'),
url(r'^(?P<deployment_id>\d+)/details/(?P<column>\w+)/(?P<row_id>\d+)/$',