graphite-project/graphite-web — pull request #519 by brutasse (2013-12-09 21:33:41+00:00)
Title: Pluggable storage finders

The current master of graphite-web supports reading metrics from ceres and whisper. It just needs a small level of configuration to be able to use graphite-web with arbitrary storage backends.

In this pull request:

* `Store`, `CeresFinder` and `StandardFinder` configure themselves automatically upon instanciation. They only need to read their config from the django settings.
* I introduced a new `STORAGE_FINDERS` setting. This is a list of dotted paths to the finder classes to use. If I'm not mistaken the codebase currently supports fetching metrics from different finders at the same time so I left this as a list. The default value is the exact equivalent to the code in current master.
* I moved `match_entries` to `graphite.utils` be able to use graphite-web with a custom, external finder *without* having to install whisper or carbon.

This branch was written for integrating @pyr's cassandra-based backend, cyanite. I can successfully use graphite-web with the [python client package](https://pypi.python.org/pypi/cyanite) I wrote and the following settings:

```python
STORAGE_FINDERS = (
'cyanite.CyaniteFinder',
)

CYANITE_URL = os.environ.get('CYANITE_URL', 'http://127.0.0.1:8080')
```

This feature lets people integrate graphite-web with any time series database/backend without having to modify graphite-web itself.

I can squash the commits into one if that's desired, but I'll wait for final input about this patch first to avoid unnecessary force-pushes.