Gerrit plugin for triggering a general configuration and runtime health check

Clone this repo:
  1. 1c530ec Adapt RestAPI apply() method to Gerrit master by Luca Milanesio · 4 weeks ago master
  2. 9791354 Reformat with GJF by Luca Milanesio · 4 weeks ago
  3. 5828df0 Merge branch 'stable-3.0' by Tiago Palma · 3 months ago
  4. 9e9a286 Adapt to the latest Gerrit master changes by Marcin Czech · 3 months ago
  5. 341787b Merge branch 'stable-2.16' into stable-3.0 by Tiago Palma · 4 months ago stable-3.0 v3.0

Plugin to verify the Gerrit health status

Allow having a single entry point to check the availability of the services that Gerrit exposes.

How to build

Clone or link this plugin to the plugins directory of Gerrit‘s source tree, and then run bazel build on the plugin’s directory.

Example:

git clone --recursive https://gerrit.googlesource.com/gerrit
git clone https://gerrit.googlesource.com/plugins/healthcheck
pushd gerrit/plugins && ln -s ../../healthcheck . && popd
cd gerrit && bazel build plugins/healthcheck

The output plugin jar is created in:

bazel-genfiles/plugins/healthcheck/healthcheck.jar

How to install

Copy the healthcheck.jar into the Gerrit's /plugins directory and wait for the plugin to be automatically loaded.

How to use

The healthcheck plugin exposes a single endpoint under its root URL and provides a JSON output of the Gerrit health status.

The HTTP status code returned indicates whether Gerrit is healthy (HTTP status 200) or has some issues (HTTP status 500).

The HTTP response payload is a JSON output that contains the details of the checks performed.

  • ts: epoch timestamp in millis of the test
  • elapsed: elapsed time in millis to perform the check
  • querychanges: check that Gerrit can query changes
  • reviewdb: check that Gerrit can connect and query ReviewDb
  • projectslist: check that Gerrit can list projects
  • jgit: check that Gerrit can access repositories

Each check returns a JSON payload with the following information:

  • ts: epoch timestamp in millis of the individual check

  • elapsed: elapsed time in millis to complete the check

  • result: result of the health check

    • passed: the check passed successfully
    • disabled: the check was disabled
    • failed: the check failed with an error
    • timeout: the check took too long and timed out

Example of a healthy Gerrit response:

GET /config/server/healthcheck~status

200 OK
Content-Type: application/json

)]}'
{
  "ts": 139402910202,
  "elapsed": 100,
  "querychanges": {
    "ts": 139402910202,
    "elapsed": 20,
    "result": "passed"
  },
  "reviewdb": {
    "ts": 139402910202,
    "elapsed": 50,
    "result": "passed"
  },
  "projectslist": {
    "ts": 139402910202,
    "elapsed": 100,
    "result": "passed"
  },
  "jgit": {
    "ts": 139402910202,
    "elapsed": 80,
    "result": "passed"
  }
}

Example of a Gerrit instance with the projects list timing out:

GET /config/server/healthcheck~status

500 ERROR
Content-Type: application/json

)]}'
{
  "ts": 139402910202,
  "elapsed": 100,
  "querychanges": {
    "ts": 139402910202,
    "elapsed": 20,
    "result": "passed"
  },
  "reviewdb": {
    "ts": 139402910202,
    "elapsed": 50,
    "result": "passed"
  },
  "projectslist": {
    "ts": 139402910202,
    "elapsed": 100,
    "result": "timeout"
  },
  "jgit": {
    "ts": 139402910202,
    "elapsed": 80,
    "result": "passed"
  }
}

Metrics

As for all other endpoints in Gerrit, some metrics are automatically emitted when the /config/server/healthcheck~status endpoint is hit (thanks to the Dropwizard library).

Some additional metrics are also produced to give extra insights on their result about results and latency of healthcheck sub component, such as jgit, reviewdb, etc.

More information can be found in the config.md file.