Gerrit events listener to send events to an external NATS broker

Clone this repo:

Branches

  1. 106c7f4 Consume events-broker from source by Alvaro Vilaplana Garcia · 9 months ago master
  2. 64ac4fe Format the BUILD file with buildifier by Alvaro Vilaplana Garcia · 9 months ago
  3. 5ca4d76 Improve configuration and add documentation by Matthias Sohn · 1 year, 7 months ago
  4. 59d3439 Improve README by Matthias Sohn · 1 year, 7 months ago
  5. 5cc1e1e Improve naming of NATS stream and durable consumers by Matthias Sohn · 1 year, 7 months ago

events-nats: Gerrit event producer for NATS

Build Status

Synopsis

This plugins allows to define a distributed stream of events published by Gerrit.

Events can be anything, from the traditional stream events to the Gerrit metrics.

This plugin requires NATS Jetstream and Gerrit 3.6 or later.

Environments

  • linux
  • java-11
  • Bazel

Build

The events-nats plugin can be built as a regular ‘in-tree’ plugin. That means it is required to clone a Gerrit source tree first and then to clone the events-nats plugin source directory into the /plugins path. Additionally, the plugins/external_plugin_deps.bzl file needs to be updated to include the events-nats plugin external dependencies. The plugin depends on events-broker which is linked directly from source with the same ‘in-tree’ plugin structure.

git clone --recursive https://gerrit.googlesource.com/gerrit
git clone https://gerrit.googlesource.com/plugins/events-nats gerrit/plugins/events-nats
git clone https://gerrit.googlesource.com/modules/events-broker gerrit/plugins/events-broker
cd gerrit
rm plugins/external_plugin_deps.bzl
ln -s ./events-nats/external_plugin_deps.bzl plugins/.

If your build includes multiple plugins requiring external dependencies edit plugins/external_plugin_deps.bzl. E.g. to include dependencies of both the events-nats and the multi-site plugin:

load("//tools/bzl:maven_jar.bzl", "GERRIT", "MAVEN_CENTRAL", "MAVEN_LOCAL", "maven_jar")
load("//plugins/events-nats:external_plugin_deps.bzl", deps_events_nats = "external_plugin_deps")
load("//plugins/multi-site:external_plugin_deps.bzl", deps_multi_site = "external_plugin_deps")

def external_plugin_deps():
    deps_events_nats()
    deps_multi_site()

To build the events-nats plugins, issue this command from the Gerrit source path:

bazel build plugins/events-nats

The output is created in

bazel-genfiles/plugins/events-nats/events-nats.jar

Minimum Configuration

Assuming a running NATS JetStream broker on the same Gerrit host, add the following settings to etc/gerrit.config:

    [plugin "events-nats"]
        server = nats://localhost:4222

Testing

Starting a local NATS JetStream server for testing:

    docker run -d --name nats-main -p 4222:4222 -p 6222:6222 -p 8222:8222 nats -js

You can use the NATS command line client to inspect and manage NATS.