@PLUGIN@ configuration
======================

The @PLUGIN@
------------

The plugin does not require any configuration at all and exposes an HTTP
endpoint for querying the service status.

```
GET /config/server/healthcheck~status

)]}'
{
  "ts": 139402910202,
  "elapsed": 120,
  "blockedthreads": {
    "ts": 139402910202,
    "elapsed": 30,
    "result": "passed"
  },
  "querychanges": {
    "ts": 139402910202,
    "elapsed": 20,
    "result": "passed"
  },
  "projectslist": {
    "ts": 139402910202,
    "elapsed": 40,
    "result": "passed"
  },
  "auth": {
    "ts": 139402910202,
    "elapsed": 30,
    "result": "passed"
  }
}
```

Settings
--------

The plugin allows to customize its behaviour through a specific
`healthcheck.config` file in the `$GERRIT_SITE/etc` directory.

Each section of the form `[healthcheck "<checkName>"]` can tailor the
behaviour of an individual `<checkName>`. The section `[healthcheck]`
defines the global defaults valid for all checks.

The following check names are available:

- `querychanges`: check the ability to query changes. `Enabled` by default.
- `jgit` : check connectivity to the filesystem and ability to open a JGit ref and object. `Enabled` by default.
- `gitspace`: Checks that sufficient disk space is available on the volume where Git repositories are stored. `Disabled`
   by default.
- `projectslist` : check the ability to list projects with their descriptions. `Enabled` by default.
- `auth`: check the ability to authenticate with username and password. `Enabled` by default.
- `activeworkers`: check the number of active worker threads and the ability to create a new one. `Enabled` by default.
- `httpactiveworkers`: check the number of active HTTP worker threads and the ability. `Enabled` by default.
   to create a new one
- `deadlock` : check if Java deadlocks are reported by the JVM. `Enabled` by default.
- `blockedthreads` : check the number of blocked threads. `Enabled` by default.
- `changesindex` : check if the lucene based changes indexes (open and closed) are operable
   (examines index lock files). `Enabled` by default.

Each check name can be disabled by setting the `enabled` parameter to **false**,
by default this parameter is set to **true**

The following parameters are available:

- `healthcheck.<checkName>.timeout` : Specific timeout (msec) for the
  healthcheck to complete. Zero means that there is no timeout.

  Default: 500

- `healthcheck.<checkName>.query` : Query to be executed for extracting
   elements from the check.

  Default: status:open

- `healthcheck.<checkName>.limit` : Maximum number of elements to retrieve from
  the the check results.

  Default: 10

- `healthcheck.jgit.project` : A project name to check for accessibility of its refs/meta/config.
   Multiple occurrences are allowed to configure more projects, in addition
   to the default ones that are always included.

  Default: All-Projects, All-Users

- `healthcheck.gitspace.minFreeDiskPercent` : Minimum acceptable percentage of free disk space
   before the check fails.

   Default: 10

 - `healthcheck.auth.username` : Username to use for authentication

   Default: healthcheck

 - `healthcheck.auth.password` : Password to use for authentication
 
   Default: no password

 - `healthcheck.activeworkers.threshold` : Percent of queue occupancy above which queue is
    considered as full.

   Default: 80

 - `healthcheck.blockedthreads.threshold` : Percent of all threads that are blocked above which instance
   is considered as unhealthy.

   Default: 50

By default `healthcheck.blockedthreads` is calculated as ratio of BLOCKED threads against the all
Gerrit threads. It might be not sufficient for instance in case of `SSH-Interactive-Worker` threads
that could be all blocked making effectively a Gerrit instance unhealthy (neither fetch nor push
would succeed) but the threshold could be still not reached. Therefore one can fine tune the check
by putting detailed configuration for one or more thread groups (all threads that have the name
starting with a given prefix) to be checked according to the following template:

```
[healthcheck "blockedthreads"]
    threshold = [prefix]=[XX]
```

Note that in case when specific thread groups are configured all threads are no longer checked.

* **Example 1:** _check if BLOCKED threads are above the limit of 70_

   ```
   [healthcheck "blockedthreads"]
       threshold = 70
   ```

* **Example 2:** _check if BLOCKED `foo` threads are above the 33 limit_

   ```
   [healthcheck "blockedthreads"]
       threshold = foo=45
   ```

* **Example 3:** _check if BLOCKED `foo` threads are above the 33 limit and if BLOCKED `bar`_
  _threads are above the the 60 limit_

   ```
   [healthcheck "blockedthreads"]
      threshold = foo=33
      threshold = bar=60
   ```
