From 8695cbabcfa9229da1040b6cb4ea58d511ed2f8d Mon Sep 17 00:00:00 2001 From: Sandy Walsh Date: Wed, 31 Oct 2012 12:26:58 -0300 Subject: [PATCH] timings table now uses Decimal diff as well --- stacktach/models.py | 4 +-- stacktach/stacky_server.py | 52 +++++++++++++++++--------------------- stacktach/urls.py | 21 +++++++-------- stacktach/views.py | 9 ++----- 4 files changed, 37 insertions(+), 49 deletions(-) diff --git a/stacktach/models.py b/stacktach/models.py index 82e5c56..7a536c3 100644 --- a/stacktach/models.py +++ b/stacktach/models.py @@ -75,6 +75,4 @@ class Timing(models.Model): start_when = models.DecimalField(null=True, max_digits=20, decimal_places=6) end_when = models.DecimalField(null=True, max_digits=20, decimal_places=6) - diff_days = models.IntegerField(default=0) - diff_seconds = models.IntegerField(default=0) - diff_usecs = models.IntegerField(default=0) + diff = models.DecimalField(null=True, max_digits=20, decimal_places=6) diff --git a/stacktach/stacky_server.py b/stacktach/stacky_server.py index bdbbb1f..7351a86 100644 --- a/stacktach/stacky_server.py +++ b/stacktach/stacky_server.py @@ -9,8 +9,8 @@ import datetime_to_decimal as dt import models import views - -SECS_PER_DAY = 60 * 60 * 24 +SECS_PER_HOUR = 60 * 60 +SECS_PER_DAY = SECS_PER_HOUR * 24 def get_event_names(): @@ -35,49 +35,40 @@ def get_deployments(): return models.Deployment.objects.all().order_by('name') -def show_timings_for_uuid(uuid): +def get_timings_for_uuid(uuid): lifecycles = models.Lifecycle.objects.filter(instance=uuid) results = [] + results.append(["?", "Event", "Time (secs)"]) for lc in lifecycles: timings = models.Timing.objects.filter(lifecycle=lc) if not timings: continue - this = [] - this.append(["?", "Event", "Time (secs)"]) for t in timings: state = "?" + show_time = 'n/a' if t.start_raw: state = 'S' if t.end_raw: - sate = 'E' + state = 'E' if t.start_raw and t.end_raw: state = "." - this.append([state, t.name, sec_to_time(seconds_from_timing(t))]) - results.append(this) + show_time = sec_to_time(t.diff) + results.append([state, t.name, show_time]) return results -def seconds_from_timedelta(days, seconds, usecs): - us = usecs / 1000000.0 - return (days * SECS_PER_DAY) + seconds + us - - -def seconds_from_timing(t): - return seconds_from_timedelta(t.diff_days, t.diff_seconds, t.diff_usecs) - - -def sec_to_time(fseconds): - seconds = int(fseconds) - usec = fseconds - seconds - days = seconds / (60 * 60 * 24) - seconds -= (days * (60 * 60 * 24)) - hours = seconds / (60 * 60) - seconds -= (hours * (60 * 60)) +def sec_to_time(diff): + seconds = int(diff) + usec = diff - seconds + days = seconds / SECS_PER_DAY + seconds -= (days * SECS_PER_DAY) + hours = seconds / SECS_PER_HOUR + seconds -= (hours * SECS_PER_HOUR) minutes = seconds / 60 seconds -= (minutes * 60) usec = ('%.2f' % usec).lstrip('0') - return "%dd %02d:%02d:%02d%s" % (days, hours, minutes, seconds, usec) + return "%dd %02d:%02d:%02d %s" % (days, hours, minutes, seconds, usec) def rsp(data): @@ -127,18 +118,21 @@ def do_uuid(request): return rsp(results) +def do_timings_uuid(request): + uuid = request.GET['uuid'] + return rsp(get_timings_for_uuid(uuid)) + + def do_timings(request): name = request.GET['name'] results = [] results.append([name, "Time"]) timings = models.Timing.objects.select_related().filter(name=name) \ .exclude(Q(start_raw=None) | Q(end_raw=None)) \ - .order_by('diff_days', 'diff_seconds', - 'diff_usecs') + .order_by('diff') for t in timings: - seconds = seconds_from_timing(t) - results.append([t.lifecycle.instance, sec_to_time(seconds)]) + results.append([t.lifecycle.instance, sec_to_time(t.diff)]) return rsp(results) diff --git a/stacktach/urls.py b/stacktach/urls.py index 5948d94..867b9ae 100644 --- a/stacktach/urls.py +++ b/stacktach/urls.py @@ -4,18 +4,19 @@ from django.conf.urls.defaults import patterns, include, url urlpatterns = patterns('', url(r'^$', 'stacktach.views.welcome', name='welcome'), - url(r'stacky/deployments', 'stacktach.stacky_server.do_deployments'), - url(r'stacky/events', 'stacktach.stacky_server.do_events'), - url(r'stacky/hosts', 'stacktach.stacky_server.do_hosts'), - url(r'stacky/uuid', 'stacktach.stacky_server.do_uuid'), - url(r'stacky/timings', 'stacktach.stacky_server.do_timings'), - url(r'stacky/summary', 'stacktach.stacky_server.do_summary'), - url(r'stacky/request', 'stacktach.stacky_server.do_request'), - url(r'stacky/show/(?P\d+)', + url(r'stacky/deployments/$', 'stacktach.stacky_server.do_deployments'), + url(r'stacky/events/$', 'stacktach.stacky_server.do_events'), + url(r'stacky/hosts/$', 'stacktach.stacky_server.do_hosts'), + url(r'stacky/uuid/$', 'stacktach.stacky_server.do_uuid'), + url(r'stacky/timings/$', 'stacktach.stacky_server.do_timings'), + url(r'stacky/timings/uuid$', 'stacktach.stacky_server.do_timings_uuid'), + url(r'stacky/summary/$', 'stacktach.stacky_server.do_summary'), + url(r'stacky/request/$', 'stacktach.stacky_server.do_request'), + url(r'stacky/show/(?P\d+)/$', 'stacktach.stacky_server.do_show'), - url(r'stacky/watch/(?P\d+)', + url(r'stacky/watch/(?P\d+)/$', 'stacktach.stacky_server.do_watch'), - url(r'stacky/kpi', 'stacktach.stacky_server.do_kpi'), + url(r'stacky/kpi/$', 'stacktach.stacky_server.do_kpi'), url(r'^(?P\d+)/$', 'stacktach.views.home', name='home'), url(r'^(?P\d+)/details/(?P\w+)/(?P\d+)/$', diff --git a/stacktach/views.py b/stacktach/views.py index 89a2d4c..098cbac 100644 --- a/stacktach/views.py +++ b/stacktach/views.py @@ -142,15 +142,10 @@ def aggregate(raw): else: timing.end_raw = raw timing.end_when = raw.when - end = dt.dt_from_decimal(timing.end_when) # We could have missed start so watch out ... - if timing.start_when and end: - start = dt.dt_from_decimal(timing.start_when) - diff = end - start - timing.diff_days = diff.days - timing.diff_seconds = diff.seconds - timing.diff_usecs = diff.microseconds + if timing.start_when: + timing.diff = timing.end_when - timing.start_when timing.save()