[Checkins] SVN: Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/ Refactored to move time formatting calculations to the _timings method. A bit cleaner, I hope, but also easier to test - I picked up a bug from the previous tests.
Charlie Clark
charlie at begeistert.org
Tue Dec 13 18:52:29 UTC 2011
Log message for revision 123805:
Refactored to move time formatting calculations to the _timings method. A bit cleaner, I hope, but also easier to test - I picked up a bug from the previous tests.
Changed:
U Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/activity.py
U Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/tests/test_activity.py
-=-
Modified: Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/activity.py
===================================================================
--- Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/activity.py 2011-12-13 15:25:26 UTC (rev 123804)
+++ Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/activity.py 2011-12-13 18:52:28 UTC (rev 123805)
@@ -37,8 +37,11 @@
class View(object):
- start_time = 'start_time'
- end_time = 'end_time'
+ start_time = ""
+ end_time = ""
+ segment_height = 200
+ time_unit = 1
+ time_fmt = "%.2fs" # microseconds
def __init__(self, context, request):
self.context = context
@@ -65,19 +68,23 @@
return am.getHistoryLength()
def _get_timings(self, analysis):
- """Calculate time intervals and format start and end times"""
- segment_time = 0
- start_time = ''
- end_time = ''
+ """Calculate time format and start and end times"""
if analysis is not None:
segment_time = analysis[0]['end'] - analysis[0]['start']
- start_time = time.strftime("%a, %d %b %Y %H:%M:%S %Z",
+ self.start_time = time.strftime("%a, %d %b %Y %H:%M:%S %Z",
time.gmtime(analysis[0]['start']))
- end_time = time.strftime("%a, %d %b %Y %H:%M:%S %Z",
+ self.end_time = time.strftime("%a, %d %b %Y %H:%M:%S %Z",
time.gmtime(analysis[-1]['end']))
- return start_time, end_time, segment_time
+ if segment_time >= 3600: # hours
+ self.time_unit = 3600
+ self.time_fmt = "%dh"
+ elif segment_time >= 60: # minutes
+ self.time_unit = 60
+ self.time_fmt = "%dm"
+ elif segment_time >= 1: # seconds
+ self.time_fmt = "%ds"
- def _chart_data(self, segment_time, segment_height, analysis):
+ def _chart_data(self, analysis):
"""Utility function to calculate bar heights and time offsets"""
limit = max(((d['stores'] + d['loads']) for d in analysis))
@@ -90,23 +97,12 @@
load_len = 0
if stores > 0:
- store_len = max((segment_height * stores / limit), 1)
+ store_len = max((self.segment_height * stores / limit), 1)
if loads > 0:
- load_len = max((segment_height * loads / limit), 1)
+ load_len = max((self.segment_height * loads / limit), 1)
offset = div['end'] - now # Offset from most recent measurement.
- if segment_time >= 3600:
- # Show hours.
- time_offset = '%dh' % (offset / 3600)
- elif segment_time >= 60:
- # Show minutes.
- time_offset = '%dm' % (offset / 60)
- elif segment_time >= 1:
- # Show seconds.
- time_offset = '%ds' % offset
- else:
- # Show fractions.
- time_offset = '%.2fs' % offset
+ time_offset = self.time_fmt % (offset / self.time_unit)
div.update({'link': 'chart_start=%s&chart_end=%s' % (div['start'], div['end']),
'time_offset': time_offset,
@@ -119,7 +115,7 @@
"""Returns information for generating an activity chart.
Default height is 200 pixels
"""
- segment_height = int(segment_height)
+ self.segment_height = int(segment_height)
am = self._getActivityMonitor()
if am is None:
return
@@ -132,16 +128,16 @@
else:
analysis = am.getActivityAnalysis()
- start_time, end_time, segment_time = self._get_timings(analysis)
+ self._get_timings(analysis)
total_stores, total_loads, total_connections = (
sum(d[k] for d in analysis)
for k in ('stores', 'loads', 'connections')
)
- return {'start_time': start_time,
- 'end_time': end_time,
- 'divs': self._chart_data(segment_time, segment_height, analysis),
+ return {'start_time': self.start_time,
+ 'end_time': self.end_time,
+ 'divs': self._chart_data(analysis),
'total_store_count': total_stores,
'total_load_count': total_loads,
'total_connections': total_connections,
Modified: Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/tests/test_activity.py
===================================================================
--- Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/tests/test_activity.py 2011-12-13 15:25:26 UTC (rev 123804)
+++ Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/tests/test_activity.py 2011-12-13 18:52:28 UTC (rev 123805)
@@ -20,8 +20,8 @@
]
minutes_activity = [
- {'end':3600, 'connections':15, 'start':0, 'stores':250, 'loads':1000},
- {'end':3601, 'connections':15, 'start':86400, 'stores':500, 'loads':2000}
+ {'end':3599, 'connections':15, 'start':0, 'stores':250, 'loads':1000},
+ {'end':7199, 'connections':15, 'start':3600, 'stores':500, 'loads':2000}
]
hours_activity = [
@@ -95,40 +95,40 @@
def test_timings_seconds(self):
view = self._makeOne()
- data = view._get_timings(seconds_activity)
- expected = ('Thu, 01 Jan 1970 00:00:00 CET',
- 'Thu, 01 Jan 1970 00:00:02 CET',
- 1)
- self.assertEqual(data, expected)
+ view._get_timings(seconds_activity)
+ self.assertEqual(view.start_time, 'Thu, 01 Jan 1970 00:00:00 CET')
+ self.assertEqual(view.end_time, 'Thu, 01 Jan 1970 00:00:02 CET')
+ self.assertEqual(view.time_unit, 1)
+ self.assertEqual(view.time_fmt, "%ds")
def test_timings_minutes(self):
view = self._makeOne()
- data = view._get_timings(minutes_activity)
- expected = ('Thu, 01 Jan 1970 00:00:00 CET',
- 'Thu, 01 Jan 1970 01:00:01 CET',
- 3600)
- self.assertEqual(data, expected)
+ view._get_timings(minutes_activity)
+ self.assertEqual(view.start_time, 'Thu, 01 Jan 1970 00:00:00 CET')
+ self.assertEqual(view.end_time, 'Thu, 01 Jan 1970 01:59:59 CET')
+ self.assertEqual(view.time_unit, 60)
+ self.assertEqual(view.time_fmt, "%dm")
def test_timings_hours(self):
view = self._makeOne()
- data = view._get_timings(hours_activity)
- expected = ('Thu, 01 Jan 1970 00:00:00 CET',
- 'Sat, 03 Jan 1970 00:00:00 CET',
- 86400)
- self.assertEqual(data, expected)
+ view._get_timings(hours_activity)
+ self.assertEqual(view.start_time, 'Thu, 01 Jan 1970 00:00:00 CET')
+ self.assertEqual(view.end_time, 'Sat, 03 Jan 1970 00:00:00 CET')
+ self.assertEqual(view.time_unit, 3600)
+ self.assertEqual(view.time_fmt, "%dh")
def test_timings_fractions(self):
view = self._makeOne()
- data = view._get_timings(fractional_activity)
- expected = ('Thu, 01 Jan 1970 00:00:00 CET',
- 'Thu, 01 Jan 1970 00:00:01 CET',
- 0.5)
- self.assertEqual(data, expected)
+ view._get_timings(fractional_activity)
+ self.assertEqual(view.start_time, 'Thu, 01 Jan 1970 00:00:00 CET')
+ self.assertEqual(view.end_time, 'Thu, 01 Jan 1970 00:00:01 CET')
+ self.assertEqual(view.time_unit, 1)
+ self.assertEqual(view.time_fmt, "%.2fs")
def test_chart_data(self):
view = self._makeOne()
- start, end, interval = view._get_timings(seconds_activity)
- data = view._chart_data(interval, 200, seconds_activity).next()
+ view._get_timings(seconds_activity)
+ data = view._chart_data(seconds_activity).next()
expected = {'store_len': 40, 'end': 1, 'load_len': 80,
'connections': 15, 'start': 0, 'link':
'chart_start=0&chart_end=1', 'stores': 5, 'loads': 10,
More information about the checkins
mailing list