devtools/devctl.py
changeset 374 89225b187eb8
parent 373 0c931b2e2a68
child 396 76d593bd4221
--- a/devtools/devctl.py	Thu Jan 08 16:56:23 2009 +0100
+++ b/devtools/devctl.py	Thu Jan 08 18:26:39 2009 +0100
@@ -176,6 +176,7 @@
                     add_msg(w, '%s_description' % objid)
                     add_msg(w, objid)
                     done.add(objid)
+
                     
 def defined_in_library(libschema, etype, rtype, tetype, x):
     """return true if the given relation definition exists in cubicweb's library"""
@@ -478,9 +479,54 @@
                 break
         return includes
     
+
+class ExamineLogCommand(Command):
+    """Examine a rql log file.
+
+    usage: python exlog.py < rql.log
+
+    will print out the following table
+
+      total execution time || number of occurences || rql query
+
+    sorted by descending total execution time
+
+    chances are the lines at the top are the ones that will bring
+    the higher benefit after optimisation. Start there.
+    """
+    name = 'exlog'
+    options = (
+        )
+    
+    def run(self, args):
+        if args:
+            raise BadCommandUsage("no argument expected")
+        import re
+        requests = {}
+        for line in sys.stdin:
+            if not ' WHERE ' in line:
+                continue
+            #sys.stderr.write( line )
+            rql, time = line.split('--')
+            rql = re.sub("(\'\w+': \d*)", '', rql)
+            req = requests.setdefault(rql, [])
+            time.strip()
+            chunks = time.split()
+            cputime = float(chunks[-3])
+            req.append( cputime )
+
+        stat = []
+        for rql, times in requests.items():
+            stat.append( (sum(times), len(times), rql) )
+
+        stat.sort()
+        stat.reverse()
+        for time, occ, rql in stat:
+            print time, occ, rql
         
 register_commands((UpdateCubicWebCatalogCommand,
                    UpdateTemplateCatalogCommand,
                    LiveServerCommand,
                    NewCubeCommand,
+                   ExamineLogCommand,
                    ))