Compute APDEX from Apache-style logs.

Overview
========

Parses Apache-style logs and generates several statistics useful to website
developers:

- APDEX (Application Performance inDEX, see http://www.apdex.org) ratio
  (plotted)

- hit count (plotted)

- HTTP status codes, with optional detailed output of the most frequent URLs
  per error status code, along with their most frequent referers

- Hottest pages (pages which use rendering time the most)

- ERP5 sites: per-module statistics, with module and document views separated

Some parsing performance figures:

On a 2.3Ghz Corei5, apachedex achieves 97000 lines/s (
pypy-c-jit-62994-bd32583a3f11-linux64) and 43000 lines/s (CPython 2.7).

Requirements
============

Dependencies
------------

As such, apachedex has no dependencies outside of standard python 2.7
installation.
But generated output needs a few javascript files which come from other
projects:

- jquery.js

- jquery.flot.js

- jquery.flot.time.js (official flot plugin)

- jquery.flot.axislabels.js (third-party flot plugin)

If you installed apachedex (using an egg or with a distribution's package) you
should have them already.
If you are running from repository, you need to fetch them first::

  python setup.py deps

Input
-----

All default "combined" log format fields are supported (more can easily be
added), plus %D.

Mandatory fields are (in any order) `%t`, `%r` (for request's URL), `%>s`,
`%{Referer}i`, `%D`. Just tell apachedex the value from your apache log
configuration (see `--logformat` argument documentation).

Input files may be provided gzip'ed.

Output
------

The output is HTML + CSS + JS, so you need a web browser to read it.

Usage
=====

A few usage examples. See embedded help (-h/--help) for further options.

Most basic usage::

  apachedex --default website access.log

Generate stand-alone output (suitable for inclusion in a mail, for example)::

  apachedex --default website --js-embed access.log --out attachment.html

A log file with requests for 2 websites for which individual stats are
desired, and hits outside those base urls are ignored::

  apachedex --base /site1 /site2

A log file with a site section to ignore. Order does not matter::

  apachedex --skip-base /ignored --default website

A mix of both above examples. Order matters !::

  apachedex --skip-base /site1/ignored --base /site1 /site2
