Repository
Munin (contrib)
Last change
2021-12-10
Graph Categories
Family
auto
Capabilities
Keywords
Language
Python (3.x)

gitlab_statistics

Introduction

Plugin to monitor Gitlab status

Installation

Place in /etc/munin/plugins/ (or link it there using ln -s)

Configuration

Add this to your /etc/munin/plugin-conf.d/munin-node:

[gitlab_statistics]
env.logarithmic 1
env.hostname gitlab.example.com # required
env.token YourPrivateTokenHere # required

Authors

Copyright (C) 2019 pcy <pcy.ulyssis.org>

Magic Markers

#%# family=auto
#%# capabilities=autoconf
#!/usr/bin/env python3
# -*- python -*-

"""
=head1 INTRODUCTION

Plugin to monitor Gitlab status

=head1 INSTALLATION

Place in /etc/munin/plugins/ (or link it there using ln -s)

=head1 CONFIGURATION

Add this to your /etc/munin/plugin-conf.d/munin-node:

=over 2

    [gitlab_statistics]
    env.logarithmic 1
    env.hostname gitlab.example.com # required
    env.token YourPrivateTokenHere # required

=back

=head1 AUTHORS

Copyright (C) 2019 pcy <pcy.ulyssis.org>

=head1 MAGIC MARKERS

 #%# family=auto
 #%# capabilities=autoconf

=cut
"""

import os
import json
import urllib.request
import sys


def weakbool(x):
    return x.lower().strip() in {"true", "yes", "y", "1"}


url = None
if 'hostname' in os.environ and 'token' in os.environ:
    url = "https://" + os.getenv('hostname') \
        + "/api/v4/application/statistics?private_token=" \
        + os.getenv('token')

logarithmic = weakbool(os.getenv('logarithmic', 'N'))


def reqjson():
    try:
        raw_data = urllib.request.urlopen(url)
        return json.loads(raw_data.read().decode())
    except IOError:
        print("Cannot reach the GitLab API endpoint.", file=sys.stderr)
        exit(1)


def autoconf():
    if 'hostname' not in os.environ:
        print("no ('hostname' envvar not set)")
    elif 'token' not in os.environ:
        print("no ('token' envvar not set)")
    else:
        print("yes")


def config():
    print("""\
graph_title GitLab statistics
graph_vlabel amount
graph_category devel""")
    if logarithmic:
        print("graph_args --logarithmic")

    for x in reqjson().keys():
        print(x + ".label " + x)


def fetch():
    rj = reqjson()
    for (x, y) in rj.items():
        print("%s.value %d" % (x, int(y.replace(',', ''))))


if len(sys.argv) >= 2:
    if sys.argv[1] == 'autoconf':
        autoconf()
    elif sys.argv[1] == 'config':
        config()
    else:
        fetch()
else:
    fetch()