timings table now uses Decimal diff as well

This commit is contained in:
Sandy Walsh
2012-10-31 12:26:58 -03:00
parent 71895341fe
commit 8695cbabcf
4 changed files with 37 additions and 49 deletions

View File

@@ -75,6 +75,4 @@ class Timing(models.Model):
start_when = models.DecimalField(null=True, max_digits=20, decimal_places=6) start_when = models.DecimalField(null=True, max_digits=20, decimal_places=6)
end_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 = models.DecimalField(null=True, max_digits=20, decimal_places=6)
diff_seconds = models.IntegerField(default=0)
diff_usecs = models.IntegerField(default=0)

View File

@@ -9,8 +9,8 @@ import datetime_to_decimal as dt
import models import models
import views import views
SECS_PER_HOUR = 60 * 60
SECS_PER_DAY = 60 * 60 * 24 SECS_PER_DAY = SECS_PER_HOUR * 24
def get_event_names(): def get_event_names():
@@ -35,45 +35,36 @@ def get_deployments():
return models.Deployment.objects.all().order_by('name') 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) lifecycles = models.Lifecycle.objects.filter(instance=uuid)
results = [] results = []
results.append(["?", "Event", "Time (secs)"])
for lc in lifecycles: for lc in lifecycles:
timings = models.Timing.objects.filter(lifecycle=lc) timings = models.Timing.objects.filter(lifecycle=lc)
if not timings: if not timings:
continue continue
this = []
this.append(["?", "Event", "Time (secs)"])
for t in timings: for t in timings:
state = "?" state = "?"
show_time = 'n/a'
if t.start_raw: if t.start_raw:
state = 'S' state = 'S'
if t.end_raw: if t.end_raw:
sate = 'E' state = 'E'
if t.start_raw and t.end_raw: if t.start_raw and t.end_raw:
state = "." state = "."
this.append([state, t.name, sec_to_time(seconds_from_timing(t))]) show_time = sec_to_time(t.diff)
results.append(this) results.append([state, t.name, show_time])
return results return results
def seconds_from_timedelta(days, seconds, usecs): def sec_to_time(diff):
us = usecs / 1000000.0 seconds = int(diff)
return (days * SECS_PER_DAY) + seconds + us usec = diff - seconds
days = seconds / SECS_PER_DAY
seconds -= (days * SECS_PER_DAY)
def seconds_from_timing(t): hours = seconds / SECS_PER_HOUR
return seconds_from_timedelta(t.diff_days, t.diff_seconds, t.diff_usecs) seconds -= (hours * SECS_PER_HOUR)
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))
minutes = seconds / 60 minutes = seconds / 60
seconds -= (minutes * 60) seconds -= (minutes * 60)
usec = ('%.2f' % usec).lstrip('0') usec = ('%.2f' % usec).lstrip('0')
@@ -127,18 +118,21 @@ def do_uuid(request):
return rsp(results) return rsp(results)
def do_timings_uuid(request):
uuid = request.GET['uuid']
return rsp(get_timings_for_uuid(uuid))
def do_timings(request): def do_timings(request):
name = request.GET['name'] name = request.GET['name']
results = [] results = []
results.append([name, "Time"]) results.append([name, "Time"])
timings = models.Timing.objects.select_related().filter(name=name) \ timings = models.Timing.objects.select_related().filter(name=name) \
.exclude(Q(start_raw=None) | Q(end_raw=None)) \ .exclude(Q(start_raw=None) | Q(end_raw=None)) \
.order_by('diff_days', 'diff_seconds', .order_by('diff')
'diff_usecs')
for t in timings: for t in timings:
seconds = seconds_from_timing(t) results.append([t.lifecycle.instance, sec_to_time(t.diff)])
results.append([t.lifecycle.instance, sec_to_time(seconds)])
return rsp(results) return rsp(results)

View File

@@ -4,18 +4,19 @@ from django.conf.urls.defaults import patterns, include, url
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', 'stacktach.views.welcome', name='welcome'), url(r'^$', 'stacktach.views.welcome', name='welcome'),
url(r'stacky/deployments', 'stacktach.stacky_server.do_deployments'), url(r'stacky/deployments/$', 'stacktach.stacky_server.do_deployments'),
url(r'stacky/events', 'stacktach.stacky_server.do_events'), url(r'stacky/events/$', 'stacktach.stacky_server.do_events'),
url(r'stacky/hosts', 'stacktach.stacky_server.do_hosts'), url(r'stacky/hosts/$', 'stacktach.stacky_server.do_hosts'),
url(r'stacky/uuid', 'stacktach.stacky_server.do_uuid'), url(r'stacky/uuid/$', 'stacktach.stacky_server.do_uuid'),
url(r'stacky/timings', 'stacktach.stacky_server.do_timings'), url(r'stacky/timings/$', 'stacktach.stacky_server.do_timings'),
url(r'stacky/summary', 'stacktach.stacky_server.do_summary'), url(r'stacky/timings/uuid$', 'stacktach.stacky_server.do_timings_uuid'),
url(r'stacky/request', 'stacktach.stacky_server.do_request'), url(r'stacky/summary/$', 'stacktach.stacky_server.do_summary'),
url(r'stacky/show/(?P<event_id>\d+)', url(r'stacky/request/$', 'stacktach.stacky_server.do_request'),
url(r'stacky/show/(?P<event_id>\d+)/$',
'stacktach.stacky_server.do_show'), 'stacktach.stacky_server.do_show'),
url(r'stacky/watch/(?P<deployment_id>\d+)', url(r'stacky/watch/(?P<deployment_id>\d+)/$',
'stacktach.stacky_server.do_watch'), '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<deployment_id>\d+)/$', 'stacktach.views.home', name='home'), 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+)/$', url(r'^(?P<deployment_id>\d+)/details/(?P<column>\w+)/(?P<row_id>\d+)/$',

View File

@@ -142,15 +142,10 @@ def aggregate(raw):
else: else:
timing.end_raw = raw timing.end_raw = raw
timing.end_when = raw.when timing.end_when = raw.when
end = dt.dt_from_decimal(timing.end_when)
# We could have missed start so watch out ... # We could have missed start so watch out ...
if timing.start_when and end: if timing.start_when:
start = dt.dt_from_decimal(timing.start_when) timing.diff = timing.end_when - timing.start_when
diff = end - start
timing.diff_days = diff.days
timing.diff_seconds = diff.seconds
timing.diff_usecs = diff.microseconds
timing.save() timing.save()