<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Project><name>repoze.profile</name>
<shortdesc>Aggregate profiling for WSGI requests</shortdesc>
<description>repoze.profile README
=====================

This package provides a WSGI middleware component which aggregates
profiling data across *all* requests to the WSGI application.  It
provides a web GUI for viewing profiling data.

Installation
------------

Install using setuptools, e.g. (within a virtualenv)::

 $ easy_install repoze.profile

Configuration via Python
------------------------

Wire up the middleware in your application::

 from repoze.profile.profiler import AccumulatingProfileMiddleware
 middleware = AccumulatingProfileMiddleware(
                app,
                log_filename='/foo/bar.log',
                cachegrind_filename='/foo/cachegrind.out.bar',
                discard_first_request=True,
                flush_at_shutdown=True,
                path='/__profile__'
               )

The configuration options are as follows::

 - ``log_filename`` is the name of the file to which the accumulated
   profiler statistics are logged.

 - ``cachegrind_filename`` is the optional name of the file to which
   the accumulated profiler statistics are logged in the KCachegrind
   format.

 - If ``discard_first_request`` to true (the default), then the
   middleware discards the statistics for the first request:  the
   rationale is that there are a bunch of lazy / "first time"
   initializations which distort measurement of the application's
   normal performance.

 - If ``flush_at_shutdown`` is true (the default), profiling data will
   be deleted when the middleware instance disappears (via its
   __del__).  If it's false, profiling data will not be deleted.

 - ``path`` is the URL path to the profiler UI.  It defaults to
   ``/__profile__``.

Once you have some profiling data, you can visit ``path`` in your
browser to see a user interface displaying profiling statistics
(e.g. ``http://localhost:8080/__profile__``).

Configuration via Paste
-----------------------

Wire the middleware into a pipeline in your Paste configuration, for
example::

 [filter:profile]
 use = egg:repoze.profile#profile
 log_filename = myapp.profile
 cachegrind_filename = cachegrind.out.myapp
 discard_first_request = true
 path = /__profile__
 flush_at_shutdown = true
 ...

 [pipeline:main]
 pipeline = egg:Paste#cgitb
            egg:Paste#httpexceptions
            profile
            myapp

Once you have some profiling data, you can visit ``path`` in your
browser to see a user interface displaying profiling statistics.

Reporting Bugs / Development Versions
-------------------------------------

Visit http://bugs.repoze.org to report bugs.  Visit
http://svn.repoze.org to download development or tagged versions.



Changelog
=========

1.0 (unreleased)
----------------

- Relax the pinned requirement on elementtree &lt; 1.2.7.

0.9 (2009-05-10)
----------------

- Made the `pyprof2calltree` dependency conditional on the Python version.
  This package depends on Python &gt;= 2.5.

0.8 (2009-02-25)
----------------

- Added optional support for directly writing out the profiling data in the
  KCacheGrind format.

- Avoid a dependency on `elementtree` when used with Python 2.5 and later.
  In those Python versions we used the built-in xml.etree support.

0.7 (2009-02-08)
----------------

- ``discard_first_request = true`` did not work!

- Added tests for ``discard_first_request`` and ``flush_at_shutdown``.

- Converted CHANGES.txt to ReST.

- Bump ez_setup.py version.

0.6 (2008-08-21)
----------------

- ``discard_first_request = false`` did not work.

- Clearing the profile data from the user interface did not properly
   discard profiler state.

0.5 (2008-06-11)
----------------

- Initial PyPI release.

0.4 (2008-05-07)
----------------

- Remove dependency-link to http://dist.repoze.org to prevent
  easy_install from adding that to its search path.

- Incorporated a patch from Alec Flett &lt;alecf@metaweb.com&gt; to uses
  ``cProfile``, if available, rather than pure Python ``profile``.

- Bump ez_setup.py version.

0.3 (2008-02-20)
----------------

- Added compatibility with Python 2.5.

- Made setup.py depend explicitly on ElementTree 1.2.6: meld needs it
  but meld isn't a setuptools package.

0.2 (2008-02-20)
----------------

- Added a browser UI.

- Added a knob to control discard at shutdown.

0.1 (2008-02-08)
----------------

- Initial release.</description>
<homepage rdf:resource="http://www.repoze.org" />
<maintainer><foaf:Person><foaf:name>Agendaless Consulting</foaf:name>
<foaf:mbox_sha1sum>077af4d52387f179a077d47e9bb8c9583a170f6a</foaf:mbox_sha1sum></foaf:Person></maintainer>
<release><Version><revision>1.0</revision></Version></release>
</Project></rdf:RDF>