| # Replication-status |
| |
| Record and display the repository's replication status without having to dig |
| into the Gerrit replication_log |
| |
| Consumes replication events and updates a cache with the latest replication |
| status of specific refs to specific remotes. |
| |
| ## Dependencies |
| |
| The @PLUGIN@ depends on the [replication plugin](https://gerrit.googlesource.com/plugins/replication/). |
| Check the [configuration section](./src/main/resources/Documentation/config.md) for more details. |
| |
| ## REST API |
| |
| The cache information is then exposed via a project's resource REST endpoint: |
| |
| ```bash |
| curl -v --user <user> '<gerrit-server>/a/projects/<project-name>/remotes/<remote-url>/replication-status' |
| ``` |
| |
| * <project-name>: an (url-encoded) project repository |
| * <remote-url>: an (url-encoded) remote URL for the replication |
| |
| For instance, to assess the replication status of the project `some/project` to |
| the |
| `https://github.com/some/project.git` URL, the following endpoint should be |
| called: |
| |
| ```bash |
| curl -v --user <user> '<gerrit-server>/a/projects/some%2Fproject/remotes/https%3A%2F%2Fgithub.com%2Fsome%2Fproject.git/replication-status' |
| ``` |
| |
| A payload, similar to this may be returned: |
| |
| ``` |
| { |
| "remotes": { |
| "https://github.com/some/project.git": { |
| "status": { |
| "refs/changes/01/1/meta": { |
| "type": "PUSH", |
| "status": "SUCCEEDED", |
| "when": 1626688830 |
| }, |
| "refs/changes/03/3/meta": { |
| "type": "PUSH", |
| "status": "SUCCEEDED", |
| "when": 1626688854 |
| }, |
| "refs/changes/03/3/1": { |
| "type": "PUSH", |
| "status": "SUCCEEDED", |
| "when": 1626688854 |
| }, |
| "refs/changes/02/2/1": { |
| "type": "PUSH", |
| "status": "SUCCEEDED", |
| "when": 1626688844 |
| }, |
| "refs/changes/02/2/meta": { |
| "type": "PUSH", |
| "status": "SUCCEEDED", |
| "when": 1626688844 |
| }, |
| "refs/changes/01/1/1": { |
| "type": "PUSH", |
| "status": "SUCCEEDED", |
| "when": 1626688830 |
| }, |
| "refs/changes/04/4/meta": { |
| "type": "PULL", |
| "status": "SUCCEEDED", |
| "when": 1628000641 |
| }, |
| "refs/changes/04/4/1": { |
| "type": "PULL", |
| "status": "SUCCEEDED", |
| "when": 1628000641 |
| } |
| } |
| } |
| }, |
| "status": "OK", |
| "project": "some/project" |
| } |
| ``` |
| |
| ### HTTP status |
| |
| The endpoint returns different HTTP response code depending on the result: |
| |
| * 200 OK - The endpoint was called successfully, and a payload returned |
| * 404 Not Found - Project was not found |
| * 500 Failure - An unexpected server error occurred |
| * 403 Forbidden - The user has no permission to query the endpoint. Only |
| Administrators and project owners are allowed |
| |
| ### Overall status |
| |
| The REST-API response shows a `status` field, which shows the overall |
| replication-status of the projects for the specified remote. |
| |
| - `OK` - all the refs have successfully replicated |
| - `FAILED` - Some refs have not replicated successfully |
| |
| ### TODO |
| |
| * Does not consume pull-replication events. |