Collect metrics asynchronously

Submit metrics collection tasks to the UpdateGitMetricsExecutor.
This will allow the parallelization of metrics collection
by tuning the pool size dedicated to the plugin.

The thread pool is currently hardcoded but it will become
configurable [1].

With this implementation the only parallelization allowed
is at MetricsCollector level.

Currently we have 2 MetricsCollectors, hence `2 * numberOfUpdatedProjects`
tasks will concur on the same thread pool.

We could introduce more concurrency on the File System metrics
collection by processing the `Stream<Path>` in parallel.
However, since these metrics are not real-time by design, it is
probably better to avoid being too aggressive on the file system.

[1]: https://bugs.chromium.org/p/gerrit/issues/detail?id=16248

Change-Id: I781a56a27d2abf3cda7a68967ab805d2a46b5349
8 files changed
tree: 5eb35911aaa61454e463d197f00eefec8420fb4e
  1. src/
  2. .gitignore
  3. BUILD
  4. README.md
README.md

Plugin to collect Git repository metrics

This plugin allows a systematic collection of repository metrics. Metrics are updated upon a ref-update receive.

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/git-repo-metrics
pushd gerrit/plugins && ln -s ../../git-repo-metrics . && popd
cd gerrit && bazel build plugins/git-repo-metrics

The output plugin jar is created in:

bazel-genfiles/plugins/git-repo-metrics/git-repo-metrics.jar

How to install

Copy the git-repo-metrics.jar into the Gerrit's /plugins directory and wait for the plugin to be automatically loaded.

Configuration

More information about the plugin configuration can be found in the config.md file.