[Checkins] SVN: lovely.remotetask/trunk/ more enhancements on
logging during startup
Bernd Roessl
bernd.roessl at lovelysystems.com
Mon Oct 8 18:46:06 EDT 2007
Log message for revision 80722:
more enhancements on logging during startup
Changed:
U lovely.remotetask/trunk/CHANGES.txt
U lovely.remotetask/trunk/setup.py
U lovely.remotetask/trunk/src/lovely/remotetask/README.txt
U lovely.remotetask/trunk/src/lovely/remotetask/service.py
U lovely.remotetask/trunk/src/lovely/remotetask/tests.py
-=-
Modified: lovely.remotetask/trunk/CHANGES.txt
===================================================================
--- lovely.remotetask/trunk/CHANGES.txt 2007-10-08 21:12:33 UTC (rev 80721)
+++ lovely.remotetask/trunk/CHANGES.txt 2007-10-08 22:46:06 UTC (rev 80722)
@@ -2,8 +2,8 @@
Changes for lovely.remotetask
=============================
-after:
-======
+2007/10/08 0.2.8:
+=================
- enhanced logging during startup
Modified: lovely.remotetask/trunk/setup.py
===================================================================
--- lovely.remotetask/trunk/setup.py 2007-10-08 21:12:33 UTC (rev 80721)
+++ lovely.remotetask/trunk/setup.py 2007-10-08 22:46:06 UTC (rev 80722)
@@ -3,7 +3,7 @@
setup (
name='lovely.remotetask',
- version='0.2.7',
+ version='0.2.8',
author = "Lovely Systems",
author_email = "office at lovelysystems.com",
description = "A remotetask client utiltiy for zope 3",
Modified: lovely.remotetask/trunk/src/lovely/remotetask/README.txt
===================================================================
--- lovely.remotetask/trunk/src/lovely/remotetask/README.txt 2007-10-08 21:12:33 UTC (rev 80721)
+++ lovely.remotetask/trunk/src/lovely/remotetask/README.txt 2007-10-08 22:46:06 UTC (rev 80722)
@@ -104,7 +104,7 @@
The ``add()`` function schedules the task called "echo" to be executed with
the specified arguments. The method returns a job id with which we can inquire
-about the job.
+about the job.
>>> service.getStatus(jobid)
'queued'
@@ -148,6 +148,10 @@
registered at the root. We test this use-case in a separate footnote so that
the flow of this document is not broken. [#1]_
+To get a clean logging environment let's clead the logging stack::
+
+ >>> log_info.clear()
+
On Zope startup the IDatabaseOpenedEvent is being fired, and will call
the bootStrap method:
@@ -171,11 +175,24 @@
>>> service.isProcessing()
True
+Checking out the logging will prove the started service::
+
+ >>> print log_info
+ lovely.remotetask INFO
+ handling event IStartRemoteTasksEvent
+ lovely.remotetask INFO
+ service TestTaskService1 on site site1 started
+ lovely.remotetask ERROR
+ site site2 not found
+ lovely.remotetask INFO
+ service RootTaskService on site root started
+
The verification for the jobs in the root-level service is done in another
footnote [#2]_
-To deal with a lot of services in one sites it possible to use asterisks (*)
-to start services. In case of using site@* means start all services in that site::
+To deal with a lot of services in one sites it will be possible to use
+asterisks (*) to start services. In case of using site@* means start all
+services in that site::
But first stop all processing services::
@@ -187,6 +204,10 @@
>>> root_service.isProcessing()
False
+And reset the logger::
+
+ >>> log_info.clear()
+
Reset the product configuration with the asterisked service names::
>>> servicenames = ('site1@*')
@@ -205,9 +226,18 @@
>>> root_service.isProcessing()
False
-To deal with a lot of services in a lot of sites it possible to use asterisks (*)
-to start services. In case of using *@* means start all services on all sites::
+Let's checkout the logging::
+ >>> print log_info
+ lovely.remotetask INFO
+ handling event IStartRemoteTasksEvent
+ lovely.remotetask INFO
+ service TestTaskService1 on site site1 started
+
+To deal with a lot of services in a lot of sites it possible to use
+asterisks (*) to start services. In case of using *@* means start all
+services on all sites::
+
>>> service.stopProcessing()
>>> service.isProcessing()
False
@@ -220,6 +250,10 @@
>>> getAutostartServiceNames()
['*@*']
+...and reset the logger::
+
+ >>> log_info.clear()
+
And fire the event again. All services should be started now::
>>> bootStrapSubscriber(event)
@@ -230,6 +264,88 @@
>>> root_service.isProcessing()
True
+Let's checkout the logging::
+
+ >>> print log_info
+ lovely.remotetask INFO
+ handling event IStartRemoteTasksEvent
+ lovely.remotetask INFO
+ service RootTaskService on site root started
+ lovely.remotetask INFO
+ service TestTaskService1 on site site1 started
+
+
+To deal with a specific service in a lot of sites it possible to use
+asterisks (*) to start services. In case of using *@service means start the
+service called `service` on all sites::
+
+ >>> service.stopProcessing()
+ >>> service.isProcessing()
+ False
+
+ >>> root_service.stopProcessing()
+ >>> root_service.isProcessing()
+ False
+
+Reset the product configuration with the asterisked service names::
+
+ >>> servicenames = ('*@TestTaskService1')
+ >>> config.mapping['autostart'] = servicenames
+ >>> setProductConfigurations([config])
+ >>> getAutostartServiceNames()
+ ['*@TestTaskService1']
+
+...and reset the logger::
+
+ >>> log_info.clear()
+
+And fire the event again. All services should be started now::
+
+ >>> bootStrapSubscriber(event)
+
+ >>> service.isProcessing()
+ True
+
+ >>> root_service.isProcessing()
+ False
+
+Let's checkout the logging::
+
+ >>> print log_info
+ lovely.remotetask INFO
+ handling event IStartRemoteTasksEvent
+ lovely.remotetask INFO
+ service TestTaskService1 on site site1 started
+
+In case of configuring a directive which does not match any service on
+any site logging will show a warning message::
+
+ >>> service.stopProcessing()
+ >>> service.isProcessing()
+ False
+
+ >>> servicenames = ('*@Foo')
+ >>> config.mapping['autostart'] = servicenames
+ >>> setProductConfigurations([config])
+ >>> getAutostartServiceNames()
+ ['*@Foo']
+
+ >>> log_info.clear()
+
+ >>> bootStrapSubscriber(event)
+
+ >>> service.isProcessing()
+ False
+
+ >>> root_service.isProcessing()
+ False
+
+ >>> print log_info
+ lovely.remotetask INFO
+ handling event IStartRemoteTasksEvent
+ lovely.remotetask WARNING
+ no services started by directive *@Foo
+
Finally stop processing and kill the thread. We'll call service.process()
manually as we don't have the right environment in the tests.
Modified: lovely.remotetask/trunk/src/lovely/remotetask/service.py
===================================================================
--- lovely.remotetask/trunk/src/lovely/remotetask/service.py 2007-10-08 21:12:33 UTC (rev 80721)
+++ lovely.remotetask/trunk/src/lovely/remotetask/service.py 2007-10-08 22:46:06 UTC (rev 80722)
@@ -354,13 +354,20 @@
component.queryUtility(interfaces.ITaskService,
context=site,
name=serviceName))]
- for name, service in services:
+ serviceCount=0
+ for srvname, service in services:
if service is not None and not service.isProcessing():
service.startProcessing()
- log.info('service %s on site %s started' % (name,
- csName))
+ serviceCount += 1
+ msg = 'service %s on site %s started'
+ log.info(msg % (srvname, csName))
else:
- log.error('service %s on site %s not found' % (name,
- csName))
+ if siteName != "*" and serviceName != "*":
+ msg = 'service %s on site %s not found'
+ log.error(msg % (srvname, csName))
else:
- log.error('site %s not found' % csName)
+ log.error('site %s not found' % siteName)
+
+ if (siteName == "*" or serviceName == "*") and serviceCount == 0:
+ msg = 'no services started by directive %s'
+ log.warn(msg % name)
Modified: lovely.remotetask/trunk/src/lovely/remotetask/tests.py
===================================================================
--- lovely.remotetask/trunk/src/lovely/remotetask/tests.py 2007-10-08 21:12:33 UTC (rev 80721)
+++ lovely.remotetask/trunk/src/lovely/remotetask/tests.py 2007-10-08 22:46:06 UTC (rev 80722)
@@ -18,19 +18,27 @@
__docformat__ = "reStructuredText"
import doctest
+import logging
import unittest
from zope.app.testing import placelesssetup
from zope.app.testing.setup import (placefulSetUp,
placefulTearDown)
from zope.testing.doctestunit import DocFileSuite
from zope.testing.doctest import INTERPRET_FOOTNOTES
+from zope.testing.loggingsupport import InstalledHandler
+
def setUp(test):
root = placefulSetUp(site=True)
test.globs['root'] = root
+ log_info = InstalledHandler('lovely.remotetask')
+ test.globs['log_info'] = log_info
+
def tearDown(test):
placefulTearDown()
+ log_info = test.globs['log_info']
+ log_info.uninstall()
def test_suite():
return unittest.TestSuite((
More information about the Checkins
mailing list