Browse Source

Stresstests: Show human numbers/sizes

Ask Solem 11 years ago
parent
commit
c2c71dbf20
3 changed files with 32 additions and 11 deletions
  1. 18 1
      celery/utils/debug.py
  2. 14 3
      funtests/stress/stress.py
  3. 0 7
      funtests/stress/stress_data.py

+ 18 - 1
celery/utils/debug.py

@@ -106,8 +106,25 @@ def sample(x, n, k=0):
         k += j
 
 
+UNITS = (
+    (2 ** 40.0, 'TB'),
+    (2 ** 30.0, 'GB'),
+    (2 ** 20.0, 'MB'),
+    (2 ** 10.0, 'kB'),
+    (0.0, '{0!d}b'),
+)
+
+
+def hfloat(f, p=5):
+    i = int(f)
+    return i if i == f else '{0:.{p}}'.format(f, p=p)
+
+
 def humanbytes(s):
-    return '{0}MB'.format(format_d(s // 1024))
+    return next(
+        hfloat(s / div if div else s) + unit
+        for div, unit in UNITS if s >= div
+    )
 
 
 def mem_rss():

+ 14 - 3
funtests/stress/stress.py

@@ -17,8 +17,9 @@ from celery import Celery, group, VERSION_BANNER
 from celery.bin.base import Command, Option
 from celery.exceptions import TimeoutError, SoftTimeLimitExceeded
 from celery.five import range, values
-from celery.utils.debug import blockdetection
+from celery.utils.debug import blockdetection, humanbytes
 from celery.utils.text import pluralize
+from celery.utils.timeutils import humanize_seconds
 
 # Should be run with workers running using these options:
 #
@@ -34,7 +35,17 @@ from celery.utils.text import pluralize
 #
 #  7) celery -A stress worker -c1 --maxtasksperchild=1 -- celery.acks_late=1
 
-from stress_data import Data
+class Data(object):
+
+    def __init__(self, label, data):
+        self.label = label
+        self.data = data
+
+    def __str__(self):
+        return '<Data: {0} {1}>'.format(
+            self.label, humanbytes(len(self.data)),
+        )
+    __unicode__ = __repr__ = __str__
 
 BIG = Data("BIG", 'x' * 2 ** 20 * 8)
 SMALL = Data("SMALL", 'e' * 1024)
@@ -241,7 +252,7 @@ class Suite(object):
             finally:
                 print('{0} {1} iterations in {2}s'.format(
                     'failed after' if failed else 'completed',
-                    i + 1, time() - t,
+                    i + 1, humanize_seconds(time() - t),
                 ))
 
     def termbysig(self):

+ 0 - 7
funtests/stress/stress_data.py

@@ -1,7 +0,0 @@
-class Data(object):
-    def __init__(self, label, data):
-        self.label = label
-        self.data = data
-    def __str__(self):
-        return 'Data(%s)' % self.label
-    __unicode__ = __repr__ = __str__