[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