Graphite Metrics Reporter Configuration
=======================================

File `@PLUGIN@.config`
-------------------------

The optional file `$site_path/etc/@PLUGIN@.config` is a Git-style
config file that controls the settings for the @PLUGIN@ plugin.

graphite.host
:	Hostname of the Graphite server. Mandatory. If not specified,
	the plugin does not report to any Graphite instance.

graphite.port
:	Port number of the Graphite server. Defaults to `2003`.

graphite.prefix
:	Prefix to use when reporting metrics. Defaults to `gerrit.`
	suffixed with the hostname of `localhost`.

graphite.rate
:	Reporting rate in seconds. May be specified in common time
	units such as 'm', 's', 'ms', etc, but will be converted
	to seconds. The lowest supported rate is `1 s`.
	Defaults to `60 s`.

graphite.excludeMetrics
:	Regex pattern used to exclude metrics from the report.

	The matching is done against the Gerrit metrics names as documented on
	['Metrics'](@URL@Documentation/metrics.html). The pattern matching is done
	internally using `regex.Matcher.matches()` and can match anywhere (not
    necessarly starting at the beginning of the metric name)

    By default no metric is excluded.

	For examples:

	To exclude all metrics matching `cache` at some place in their key, use:
    `excludeMetrics = cache.*`

    To exclude multiple metrics:
	```
    [graphite]
        excludeMetrics = ^http/server/rest_api/.*
        excludeMetrics = ^license/cla_check_count
        excludeMetrics = ^plugin/latency/.*
        excludeMetrics = ^reviewer_suggestion/.*
        excludeMetrics = ^sequence/next_id_latency.*
    ```
