Monitor your git project contributions
Table of Contents
Why would you want to monitor your git project contributions ?
There are plenty of reasons why you would want to monitor your git project contributions:
- If you’d like to react when a new Pull Request or Merge Request is created
- If you’d like to be sure that your Pull Request or Merge Request have been handled before a certain time
- If you’re a monitoring geek like me :-)
Github and Gitlab both have WebHooks that can be used to react on certain events. This is really cool.
Information pull
vs push
Both have their pros and cons.
I’m usually a huge fan of the push
mode provided by the webhooks since they are really easy to handle. They are also easy to setup and usually provide a good response time with minimal resource waste. Indeed, since your webhook is only triggered when it needs to, you don’t waste useless calls to check if anything has changed since last check like you’re doing in pull
mode.
But sometimes, when you’re self-hosted, like I am, you may just don’t have a public webhook handler exposed to the outside world. In such a case, pull
mode is your go to solution.
My personal motivation
My motivation to monitor the Opened Pull Requests made on some of my public repositories is the integration to my personal naemon infrastructure.
This infrastructure just gives me a central view of all the different services I’m relying on.
One of them is this very website 🗺️📍
Long story short:
- this website is a static website and a pull request is created each time someone submits a comment.
- I need to manually approve the pull request (the comment). This is how comments are moderated.
- Once a comment is approved, the website is automatically rebuilt and the comment is displayed 🪄. This is one of the many ways to achieve dynamic like behaviors in the static websites world.
So in conclusion, yes, my original motivation to monitor pull requests on a git repository was to review user comments quickly 🤷♂️.
A generic monitoring plugin for pull requests and merge requests
https://github.com/riton/nagios-plugin-git-hosted-project-merge-requests is a monitoring plugin whose purpose is to help project maintainers hosted on Gitlab, Github, etc… to keep track of their staled Merge Request / Pull Requests.
Installation
Using packages or pre-built binaries
Thanks to the awesome tool goreleaser, pre-built packages and binaries can be found at https://github.com/riton/nagios-plugin-git-hosted-project-merge-requests/releases/.
Compiling the plugin yourself
You’ll need a GO compiler with support for go modules to build this plugin.
Then all you have to do is:
$ go mod tidy
$ CGO_ENABLED=0 go build -ldflags "-s -w -extldflags '-static'" -o check_git_project_merge_requests .
Usage
$ check_git_project_merge_requests -h
Checks that a github / gitlab / gitea project has opened merge requests
Usage:
nagios-plugin-git-hosted-project-merge-requests [flags]
Flags:
--api-token string API Token used for authentication
-c, --config string config file (default is /etc/nagios-plugin-git-hosted-project-merge-requests/config.yaml)
--critical-last-update duration critical if last-update was that delay ago (default 24h0m0s)
-d, --debug Enable debug
-p, --git-provider string git provider can be one of gitlab
-h, --help help for nagios-plugin-git-hosted-project-merge-requests
-H, --host string host to check (API endpoint)
-P, --project string project to check for opened MergeRequests
--target-branch string Only consider merge requests with this target-branch (default "master")
-t, --timeout duration Global timeout (default 30s)
--warning-last-update duration warning if last-update was that delay ago (default 6h0m0s)
Configuration
This plugin requires an API_TOKEN
to authenticate to the git provider.
Passing a secret on the command line is always a bad idea. This plugin, expects to retrieve the API_TOKEN
either:
- from the environment
API_TOKEN=XXXXXXX check_git_project_merge_requests ...
- from the configuration file
---
api-token: 'XXXXXXX'
Other parameters can safely be specified on the command line.
Examples
Check for staled merge requests on a gitlab.com
hosted project
Here is how to monitor a project reachable at https://gitlab.com/username/project_name
and return a CRITICAL failure if a merge request is opened for more than 24 hours:
$ API_TOKEN=XXXXXXX check_git_project_merge_requests -H https://gitlab.com -P "username/project_name" -p gitlab
CRITICAL: Merge request 42 last activity was 21m43.664245342s ago | 'total_duration'=0.795784589s;;;; 'opened_merge_requests'=1;;;; 'oldest_merge_request'=1303.664245342s;;;;
Future / contributions
This plugin is still very young and lack important features.
One of the most important feature this plugin is missing is a cool project avatar ! If a photoshop or gimp guru is reading this article, feel free to contact me 📞.
Here are the main features I’d like to implement:
- Add option to filter assigned merge requests.
- Add option to filter merge requests based on their
labels
.
Feel free to open an issue If you’d like to discuss or suggest a missing feature.
Be the first to leave a comment! 🥇