Let's talk a bit …
Posts tagged Zope 3
Zope – how long does it take to serve a request?
Oct 27th
For the moment only a reverse proxy (apache, ngnix) or a browser can show you how long a request took to be processed.
For monitoring or debugging purpose you might want to know what zope instance is slow.
The default access zope log file give you such a log format:
127.0.0.1 - Anonymous [27/Oct/2010:16:44:04 +0100] "GET / HTTP/1.1" 200 1957 "" "Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.2.11) Gecko/20101013 Ubuntu/10.10 (maverick) Firefox/3.6.11"
which doesn’t give you any information about how fast zope was to serve that request.
At the moment there is no way to add this number of seconds in the log format of zope 2. Unfortunately the zope http server (ZServer & medusa) cannot be easily overridden or monkey patched.
Here is a patch to apply on your zope 2 buildout to have such a log format:
127.0.0.1 0.008843 - Anonymous [27/Oct/2010:16:45:41 +0100] "GET / HTTP/1.1" 200 1957 "" "Mozilla/5.0 (X11; U; Linux x86_64; fr; rv:1.9.2.11) Gecko/20101013 Ubuntu/10.10 (maverick) Firefox/3.6.11"
You see here that it took 0.008843 seconds to compute the page on that zope instance.
Thanks to this number of seconds we have monitoring checks (using Nagios 3) and monitoring graph (using Cacti) of each instances within our zeo’s.
To apply the patch, install omelette in your buildout and run this command in the root of your buildout:
patch -p0 < responsetime-212.diff
It will patch the required methods in ZServer to give you the number of seconds the request took to be processed. A patch might sound (and is) hacky but that’s the easiest way to change such a low level module.
Maybe we should give the possiblility to have this in log format in Zope 2.1 / 2.13 default config ?
Zope 3 dependencies in Zope 2 buildout
Dec 10th
Describe a buildout recipe to avoid fetching zope 3 libraries when installing eggs with zope 3 depedencies in a zope 2 buildout
I got tired removing zope.interface, zope.component, zope.deferredimport, zope.event, … of my eggs folder inside my buildout when installing package such as z3c.sqlalchemy in my Zope2 / Plone buildouts …
After the discussion on Zope3-users list and thanks to Jim lights, I wrote a really simple recipe which just create egg links to zope libraries in your develop-eggs so that setuptools can see that the dependencies are
already satisfied.
So if you list your zope library :
$ ls yourbuildout/parts/yourzope2/lib/python/zope app configuration documenttemplate exceptions i18n __init__.py pagetemplate schema structuredtext testbrowser viewlet cachedescriptors contentprovider dottedname formlib i18nmessageid interface proxy security tal testing component deprecation event hookable index modulealias publisher server tales thread
You will get
$ ls yourbuildout/develop-eggs zope.app.component.egg-info zope.app.security.egg-info zope.dottedname.egg-info zope.interface.egg-info zope.structuredtext.egg-info zope.app.egg-info zope.app.testing.egg-info zope.event.egg-info zope.modulealias.egg-info zope.tal.egg-info zope.app.event.egg-info zope.cachedescriptors.egg-info zope.exceptions.egg-info zope.pagetemplate.egg-info zope.tales.egg-info zope.app.i18n.egg-info zope.component.egg-info zope.formlib.egg-info zope.proxy.egg-info zope.testbrowser.egg-info zope.app.interface.egg-info zope.configuration.egg-info zope.hookable.egg-info zope.publisher.egg-info zope.testing.egg-info zope.app.pagetemplate.egg-info zope.contentprovider.egg-info zope.i18n.egg-info zope.schema.egg-info zope.thread.egg-info zope.app.publisher.egg-info zope.deprecation.egg-info zope.i18nmessageid.egg-info zope.security.egg-info zope.viewlet.egg-info zope.app.schema.egg-info zope.documenttemplate.egg-info zope.index.egg-info zope.server.egg-info
Where each of these file will be seen for setuptools as an egg:
$ cat yourbuildout/develop-eggs/zope.app.component.egg-info Metadata-Version: 1.0 Name: zope.app.component Version: 0.0
Sure this might look like an ugly hook but I can’t wait for zope 2 eggification …