[Erp5-report] r38033 leonardo - in /erp5/trunk/utils/Products.LongRequestLogger/Products/Lo...

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Aug 26 13:53:10 CEST 2010


Author: leonardo
Date: Thu Aug 26 13:53:08 2010
New Revision: 38033

URL: http://svn.erp5.org?rev=38033&view=rev
Log:
add time information and retry count to request logging

Modified:
    erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py
    erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py

Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py
URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py?rev=38033&r1=38032&r2=38033&view=diff
==============================================================================
--- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py [utf8] (original)
+++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/dumper.py [utf8] Thu Aug 26 13:53:08 2010
@@ -57,19 +57,20 @@ log.propagate = False
 handler = NullHandler()
 log.addHandler(handler)
 
+formatter = logging.Formatter("%(asctime)s - %(message)s")
+
 DEFAULT_TIMEOUT = 2
 DEFAULT_INTERVAL = 1
 
 def do_enable():
     global handler
-    # this function is not exactly threadsafe, but it shouldn't matter.
+    # this function is not exactly thread-safe, but it shouldn't matter.
     # The worse that can happen is that a change in longrequestlogger_file
-    # will interfere with an already running request and stop or change its
-    # logging destination.
+    # will stop or change the logging destination of an already running request
     logfile = os.environ.get('longrequestlogger_file')
     if logfile:
         if logfile != 'null':
-            # to immitate FileHandler
+            # to imitate FileHandler
             logfile = os.path.abspath(logfile)
         if handler.baseFilename != logfile:
             log.removeHandler(handler)
@@ -78,6 +79,7 @@ def do_enable():
                 handler = NullHandler()
             else:
                 handler = logging.FileHandler(logfile)
+                handler.formatter = formatter
             log.addHandler(handler)
         return log # which is also True as boolean
     return None # so that Dumpers know they are disabled
@@ -93,6 +95,7 @@ def get_configuration():
 REQUEST_FORMAT = """
 request:
 URL: %(method)s %(url)s
+retry count: %(retries)s
 form: %(form)s
 other: %(other)s
 """.strip()

Modified: erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py
URL: http://svn.erp5.org/erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py?rev=38033&r1=38032&r2=38033&view=diff
==============================================================================
--- erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py [utf8] (original)
+++ erp5/trunk/utils/Products.LongRequestLogger/Products/LongRequestLogger/tests/testLongRequestLogger.py [utf8] Thu Aug 26 13:53:08 2010
@@ -124,6 +124,7 @@ check_publishing_1_interval_log = Simple
 Products.LongRequestLogger.dumper WARNING
   Thread ...: Running for 2.0 secs; request:
 URL: GET http://localhost
+retry count: 0
 form: {}
 other: {'ACTUAL_URL': 'http://localhost',
  'PARENTS': [],
@@ -152,6 +153,7 @@ Traceback:
 Products.LongRequestLogger.dumper WARNING
   Thread ...: Running for 3.0 secs; request:
 URL: GET http://localhost
+retry count: 0
 form: {}
 other: {'ACTUAL_URL': 'http://localhost',
  'PARENTS': [],
@@ -182,6 +184,7 @@ Traceback:
 check_request_formating = SimpleOutputChecker('''
 request:
 URL: GET http://localhost/foo/bar
+retry count: 0
 form: {}
 other: {'RESPONSE': HTTPResponse(''),
  'SERVER_URL': 'http://localhost',
@@ -189,6 +192,30 @@ other: {'RESPONSE': HTTPResponse(''),
  'method': 'GET'}
 ''')
 
+check_monitor_environment_log = SimpleOutputChecker('''
+Products.LongRequestLogger.dumper WARNING
+  Thread ...: Running for 3.5 secs; [No request]
+Traceback:
+...
+  File ".../LongRequestLogger/tests/common.py", line 41, in sleep
+    self._sleep1()
+  File ".../LongRequestLogger/tests/common.py", line 44, in _sleep1
+    self._sleep2()
+  File ".../LongRequestLogger/tests/common.py", line 47, in _sleep2
+    time.sleep(self.interval)
+Products.LongRequestLogger.dumper WARNING
+  Thread ...: Running for 5.5 secs; [No request]
+Traceback:
+...
+  File ".../LongRequestLogger/tests/common.py", line 41, in sleep
+    self._sleep1()
+  File ".../LongRequestLogger/tests/common.py", line 44, in _sleep1
+    self._sleep2()
+  File ".../LongRequestLogger/tests/common.py", line 47, in _sleep2
+    time.sleep(self.interval)
+''')
+
+
 config_env_variables = dict(
     longrequestlogger_file='null',
     longrequestlogger_timeout=None,
@@ -310,7 +337,7 @@ class TestLongRequestLogger(unittest.Tes
         m.stop()
         check_monitor_2_intervals_log(str(self.loghandler))
 
-    def testMonitorDisabled(self):
+    def testMonitorConfigurationDisabled(self):
         from Products.LongRequestLogger.monitor import Monitor
         os.environ['longrequestlogger_file'] = ''
         m = Monitor()
@@ -328,7 +355,15 @@ class TestLongRequestLogger(unittest.Tes
         self.assertFalse(self.loghandler.records)
 
     def testMonitorWithEnvorinmentConfigutation(self):
-        self.fail('TODO')
+        from Products.LongRequestLogger.monitor import Monitor
+        os.environ['longrequestlogger_timeout'] = '3.5'
+        os.environ['longrequestlogger_interval'] = '2'
+        m = Monitor()
+        s = Sleeper(m.timeout + m.interval + 0.5) 
+        # sleep a little more than the timeout to be on the safe side
+        s.sleep()
+        m.stop()
+        check_monitor_environment_log(str(self.loghandler))
 
     def testIsPatched(self):
         import ZPublisher.Publish




More information about the Erp5-report mailing list