[Checkins] SVN: Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/ Refactored to use more modern Python idioms.

Charlie Clark charlie at begeistert.org
Mon Dec 5 22:55:17 UTC 2011


Log message for revision 123586:
  Refactored to use more modern Python idioms. 
  Might be a little bit more or less efficient depending on how the loops run. 
  Hopefully a bit easier to read. 
  Will need to add tests to make sure it really is producing what it should!
  

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/templates/activity.pt

-=-
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-05 21:16:07 UTC (rev 123585)
+++ Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/activity.py	2011-12-05 22:55:16 UTC (rev 123586)
@@ -15,8 +15,9 @@
 ZODB Activity
 """
 
+import time
+
 from Acquisition import aq_inner
-from DateTime import DateTime
 
 #dummy data
 
@@ -68,6 +69,7 @@
         """Returns information for generating an activity chart.
         Default height is 200 pixels
         """
+        segment_height = int(segment_height)
         am = self._getActivityMonitor()
         if am is None:
             return None
@@ -80,73 +82,63 @@
         else:
             analysis = am.getActivityAnalysis()
 
-        total_loads = 0
-        total_stores = 0
-        total_connections = 0
-        limit = 0
+        segment_time = 0
+        start_time = ''
+        end_time = ''
+        if analysis is not None:
+            segment_time = analysis[0]['end'] - analysis[0]['start']
+            start_time = time.strftime("%a, %d %b %Y %H:%M:%S",
+                                       time.gmtime(analysis[0]['start']))
+            end_time = time.strftime("%a, %d %b %Y %H:%M:%S",
+                                     time.gmtime(analysis[-1]['end']))
+
         divs = []
-        for div in analysis:
-            total_stores = total_stores + div['stores']
-            total_loads = total_loads + div['loads']
-            total_connections = total_connections + div['connections']
-            sum = div['stores'] + div['loads']
-            if sum > limit:
-                limit = sum
 
-        if analysis:
-            segment_time = analysis[0]['end'] - analysis[0]['start']
-        else:
-            segment_time = 0
+        total_stores, total_loads, total_connections = (
+            sum(d[k] for d in analysis)
+            for k in ('stores', 'loads', 'connections')
+        )
 
-        for div in analysis:
-            stores = div['stores']
-            if stores > 0:
-                store_len = max(int(segment_height * stores / limit), 1)
-            else:
+        limit = max(((d['stores'] + d['loads']) for d in analysis))
+        now = analysis[-1]['end']
+
+        def calculated():
+            for div in analysis:
+                stores = div['stores']
+                loads = div['loads']
                 store_len = 0
-            loads = div['loads']
-            if loads > 0:
-                load_len = max(int(segment_height * loads / limit), 1)
-            else:
                 load_len = 0
 
-            t = div['end'] - analysis[-1]['end']  # Show negative numbers.
-            if segment_time >= 3600:
-                # Show hours.
-                time_offset = '%dh' % (t / 3600)
-            elif segment_time >= 60:
-                # Show minutes.
-                time_offset = '%dm' % (t / 60)
-            elif segment_time >= 1:
-                # Show seconds.
-                time_offset = '%ds' % t
-            else:
-                # Show fractions.
-                time_offset = '%.2fs' % t
-            div.update({'link': 'chart_start=%s&chart_end=%s' % (div['start'], div['end']),
-                        'time_offset': time_offset,
-                        'store_len': store_len,
-                        'load_len': load_len,
-                        })
-            divs.append(div)
+                if stores > 0:
+                    store_len = max((segment_height * stores / limit), 1)
+                if loads > 0:
+                    load_len = max((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
 
-        if analysis:
-            start_time = DateTime(divs[0]['start']).aCommonZ()
-            end_time = DateTime(divs[-1]['end']).aCommonZ()
-        else:
-            start_time = ''
-            end_time = ''
+                div.update({'link': 'chart_start=%s&chart_end=%s' % (div['start'], div['end']),
+                            'time_offset': time_offset,
+                            'store_len': store_len,
+                            'load_len': load_len,
+                            })
+                yield div
 
-        res = {'start_time': start_time,
+        return {'start_time': start_time,
                'end_time': end_time,
-               'divs': divs,
+               'divs': calculated,
                'total_store_count': total_stores,
                'total_load_count': total_loads,
                'total_connections': total_connections,
                }
-        return res
-
-    #def getActivityChartData(self):
-        #"""test graphing"""
-        #return activity
\ No newline at end of file

Modified: Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/templates/activity.pt
===================================================================
--- Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/templates/activity.pt	2011-12-05 21:16:07 UTC (rev 123585)
+++ Sandbox/jens/zmi.core/trunk/src/zmi/core/browser/database/templates/activity.pt	2011-12-05 22:55:16 UTC (rev 123586)
@@ -55,7 +55,7 @@
 
 </style>
 </head>
-<body>
+<body tal:define="activity view/getActivityChartData">
 
 <nav>
   <ul>
@@ -77,15 +77,13 @@
   </form>
 
  <h2>Displayed Range</h2>
- <span tal:content="view/start_time"> </span> to<br />
- <span tal:content="view/end_time"></span>
+ <span tal:content="activity/start_time"> </span> to<br />
+ <span tal:content="activity/end_time"></span>
 
   <form method="GET" action="./">
    <input type="submit" name="current_chart" value="Show current chart" />
   </form>
 
-<div id="chart" tal:define="activity view/getActivityChartData">
-
 <table id="chart">
 
  <tr>
@@ -137,7 +135,5 @@
 </tr>
 </table>
 
-</div>
-
 </body>
 </html>
\ No newline at end of file



More information about the checkins mailing list