# 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.

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-name>/replication-status'
```

* <project-name>: an (url-encoded) project repository
* <remote-name>: an (url-encoded) remote name for the replication

For instance, to assess the replication status of the project `some/project` to
the
`https://github.com/some/project.git` URL with the replication configuration:

```
[remote "github-replication"]
    url = https://github.com/${name}.git
```

the following endpoint should be called:

```bash
curl -v --user <user> '<gerrit-server>/a/projects/some%2Fproject/remotes/github-replication/replication-status'
```

A payload, similar to this may be returned:

```
{
  "remotes": {
    "https://github.com/some/project.git": {
      "status": {
        "refs/changes/01/1/meta": {
          "status": "SUCCEEDED",
          "when": 1626688830
        },
        "refs/changes/03/3/meta": {
          "status": "SUCCEEDED",
          "when": 1626688854
        },
        "refs/changes/03/3/1": {
          "status": "SUCCEEDED",
          "when": 1626688854
        },
        "refs/changes/02/2/1": {
          "status": "SUCCEEDED",
          "when": 1626688844
        },
        "refs/changes/02/2/meta": {
          "status": "SUCCEEDED",
          "when": 1626688844
        },
        "refs/changes/01/1/1": {
          "status": "SUCCEEDED",
          "when": 1626688830
        }
      }
    }
  },
  "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.
