summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2015-01-02 14:00:56 +0100
committerPaul Buetow <paul@buetow.org>2015-01-02 14:00:56 +0100
commit4f27f3ea59baa6cfca0ac1df96b1dfedbd83706c (patch)
tree79754e3c49216f80cb3ad5579851fca0bf1a31c9 /debian
initial
Diffstat (limited to 'debian')
-rw-r--r--debian/README6
-rw-r--r--debian/changelog5
-rw-r--r--debian/compat1
-rw-r--r--debian/control16
-rw-r--r--debian/copyright30
-rw-r--r--debian/files1
-rw-r--r--debian/mon.debhelper.log45
-rw-r--r--debian/mon.manpages1
-rw-r--r--debian/mon.substvars2
-rw-r--r--debian/mon/DEBIAN/control12
-rw-r--r--debian/mon/DEBIAN/md5sums21
-rwxr-xr-xdebian/mon/usr/bin/m133
-rwxr-xr-xdebian/mon/usr/bin/mi3
-rwxr-xr-xdebian/mon/usr/bin/mon133
-rw-r--r--debian/mon/usr/share/doc/mon/changelog.gzbin0 -> 170 bytes
-rw-r--r--debian/mon/usr/share/doc/mon/copyright30
-rw-r--r--debian/mon/usr/share/man/man1/mon.1.gzbin0 -> 6617 bytes
-rw-r--r--debian/mon/usr/share/mon/contrib/zsh/_mon.zsh46
-rw-r--r--debian/mon/usr/share/mon/examples/mon.conf.sample23
-rw-r--r--debian/mon/usr/share/mon/itca.pem23
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/Cache.pm55
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/Config.pm176
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/Display.pm360
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/Filter.pm166
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/JSON.pm51
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/Options.pm163
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/Query.pm557
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/QueryBase.pm232
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/RESTlos.pm471
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/Syslogger.pm77
-rw-r--r--debian/mon/usr/share/mon/lib/MAPI/Utils.pm80
-rw-r--r--debian/mon/usr/share/mon/version1
-rwxr-xr-xdebian/rules13
33 files changed, 2933 insertions, 0 deletions
diff --git a/debian/README b/debian/README
new file mode 100644
index 0000000..41fc005
--- /dev/null
+++ b/debian/README
@@ -0,0 +1,6 @@
+The Debian Package mon
+----------------------------
+
+This is just a humble monitoring api tool.
+
+ -- Paul Buetow <paul@buetow.org> Sun, 08 Apr 2012 15:23:53 +0200
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..22d063a
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,5 @@
+mon (1.0.0) stable; urgency=low
+
+ * Initial
+
+ -- Paul Buetow <paul@buetow.org> Fri, 02 Jan 2015 13:50:50 +0100
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+8
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..9d5d0e0
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,16 @@
+Source: mon
+Section: utils
+Priority: optional
+Maintainer: Paul Buetow <paul@buetow.org>
+Build-Depends: perl, perltidy, alien, rpm
+Standards-Version: 3.9.2
+Homepage: http://mon.buetow.org
+Vcs-Git: https://github.com/rantanplan/mon
+Vcs-Browser: https://github.com/rantanplan/mon
+
+Package: mon
+Architecture: all
+Depends: ${perl:Depends}, libwww-perl, libtime-modules-perl, libconfig-json-perl, libio-socket-ssl-perl, libunix-syslog-perl, libjson-xs-perl, libterm-readline-gnu-perl
+Recommends: ca-root-cert, vim
+Description: A simple monitoring API tool
+ Uses the RESTlos monitoring API to configure monitoring stuff.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..9be5c7f
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,30 @@
+Format: http://dep.debian.net/deps/dep5
+Upstream-Name: mon
+Source: http://mon.buetow.org
+
+Files: *
+Copyright: 2012 Paul Buetow <paul@buetow.org>
+License: GPL-3.0+
+
+Files: debian/*
+Copyright: 2012 Paul Buetow <paul@buetow.org>
+License: GPL-3.0+
+
+License: GPL-3.0+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
+
diff --git a/debian/files b/debian/files
new file mode 100644
index 0000000..1e9ea35
--- /dev/null
+++ b/debian/files
@@ -0,0 +1 @@
+mon_1.0.0_all.deb utils optional
diff --git a/debian/mon.debhelper.log b/debian/mon.debhelper.log
new file mode 100644
index 0000000..545a50f
--- /dev/null
+++ b/debian/mon.debhelper.log
@@ -0,0 +1,45 @@
+dh_auto_configure
+dh_auto_build
+dh_auto_test
+dh_prep
+dh_installdirs
+dh_auto_install
+dh_install
+dh_installdocs
+dh_installchangelogs
+dh_installexamples
+dh_installman
+dh_installcatalogs
+dh_installcron
+dh_installdebconf
+dh_installemacsen
+dh_installifupdown
+dh_installinfo
+dh_pysupport
+dh_installinit
+dh_installmenu
+dh_installmime
+dh_installmodules
+dh_installlogcheck
+dh_installlogrotate
+dh_installpam
+dh_installppp
+dh_installudev
+dh_installwm
+dh_installxfonts
+dh_installgsettings
+dh_bugfiles
+dh_ucf
+dh_lintian
+dh_gconf
+dh_icons
+dh_perl
+dh_usrlocal
+dh_link
+dh_compress
+dh_fixperms
+dh_installdeb
+dh_gencontrol
+dh_md5sums
+dh_builddeb
+dh_builddeb
diff --git a/debian/mon.manpages b/debian/mon.manpages
new file mode 100644
index 0000000..202840a
--- /dev/null
+++ b/debian/mon.manpages
@@ -0,0 +1 @@
+docs/mon.1
diff --git a/debian/mon.substvars b/debian/mon.substvars
new file mode 100644
index 0000000..bcb0957
--- /dev/null
+++ b/debian/mon.substvars
@@ -0,0 +1,2 @@
+perl:Depends=perl
+misc:Depends=
diff --git a/debian/mon/DEBIAN/control b/debian/mon/DEBIAN/control
new file mode 100644
index 0000000..35e9094
--- /dev/null
+++ b/debian/mon/DEBIAN/control
@@ -0,0 +1,12 @@
+Package: mon
+Version: 3.0.1
+Architecture: all
+Maintainer: Paul Buetow <paul@buetow.org>
+Installed-Size: 126
+Depends: perl, libwww-perl, libtime-modules-perl, libconfig-json-perl, libio-socket-ssl-perl, libunix-syslog-perl, libjson-xs-perl, libterm-readline-gnu-perl
+Recommends: ca-root-cert, vim
+Section: utils
+Priority: optional
+Homepage: https://mamat-git0101.infra.server.lan/mon
+Description: A simple monitoring API tool
+ Uses the RESTlos monitoring API to configure monitoring stuff.
diff --git a/debian/mon/DEBIAN/md5sums b/debian/mon/DEBIAN/md5sums
new file mode 100644
index 0000000..54cd36a
--- /dev/null
+++ b/debian/mon/DEBIAN/md5sums
@@ -0,0 +1,21 @@
+8397dbe590d346eb3b925331eb5c2db1 usr/bin/m
+8397dbe590d346eb3b925331eb5c2db1 usr/bin/mon
+504f6e72ac6e115d63d3e9a1ccd1288c usr/bin/mi
+e7abd63037f4be7013488c671a4716dd usr/share/doc/mon/changelog.gz
+f125cc11bbc34b49bbfc518d07a96213 usr/share/doc/mon/copyright
+9d4f77923a3c90cd6c5e2fe2136db9b6 usr/share/man/man1/mon.1.gz
+a93997a0ddabf9ca06e602cca2134ea4 usr/share/mon/contrib/zsh/_mon.zsh
+fc1844f15efdefc185d67518ae4857c2 usr/share/mon/examples/mon.conf.sample
+7b124b0a3bc0bc716d3434f994fa7498 usr/share/mon/ca.pem
+84722dc1495b5dba22d013eacba87ee8 usr/share/mon/lib/MON/Cache.pm
+2c1750e42e80ba05c59af0b7a15f2407 usr/share/mon/lib/MON/Config.pm
+752936b2d93398123c8d2238f8f9c9db usr/share/mon/lib/MON/Display.pm
+442663ada73b39675e6e3a0012ad268a usr/share/mon/lib/MON/Filter.pm
+330f96c524cd1c0dc012d94c7e216201 usr/share/mon/lib/MON/JSON.pm
+f6dab5e42b4367a1af832cd76fc2b92b usr/share/mon/lib/MON/Options.pm
+581f3d813169e433953fa761efb555fd usr/share/mon/lib/MON/Query.pm
+ce6a905ad17647d4b7a3bfe268ac9b73 usr/share/mon/lib/MON/QueryBase.pm
+5baa39a120e8a8d66d38e9490e93dd17 usr/share/mon/lib/MON/RESTlos.pm
+6c8278360c0676c7c0f208b1d884128c usr/share/mon/lib/MON/Syslogger.pm
+b62cea4e2ffd5b449f10e8b209fc151d usr/share/mon/lib/MON/Utils.pm
+662f52dba3387be714becad581d0ac87 usr/share/mon/version
diff --git a/debian/mon/usr/bin/m b/debian/mon/usr/bin/m
new file mode 100755
index 0000000..162f71a
--- /dev/null
+++ b/debian/mon/usr/bin/m
@@ -0,0 +1,133 @@
+#!/usr/bin/perl
+#
+# (c) 2013, 2014 1&1 Internet AG
+# Paul C. Buetow <paul@buetow.org>
+
+use strict;
+use warnings;
+use v5.10;
+use autodie;
+
+use Data::Dumper;
+use Term::ReadLine;
+
+$| = 1;
+my $lib;
+
+BEGIN {
+ if ( -d './lib/MON' ) {
+ $lib = './lib';
+
+ }
+ else {
+ $lib = '/usr/share/mon/lib';
+ }
+
+ unless ( exists $ENV{HTTPS_CA_FILE} ) {
+ if ( -f 'ca.pem' ) {
+ $ENV{HTTPS_CA_FILE} = 'ca.pem';
+ }
+ elsif ( -f '/etc/ssl/certs/ca.pem' ) {
+ $ENV{HTTPS_CA_FILE} = '/etc/ssl/certs/ca.pem';
+ }
+ else {
+ $ENV{HTTPS_CA_FILE} = '/usr/share/mon/ca.pem';
+ }
+ }
+}
+
+use lib $lib;
+
+use MON::RESTlos;
+use MON::Config;
+use MON::Options;
+use MON::Query;
+use MON::Syslogger;
+use MON::Utils;
+use MON::Display;
+
+sub main (@) {
+ my @args = @_;
+ my @opts;
+
+ # Only interpret OPTIONS if they are at the beginning
+ push @opts, shift @args while @args and $args[0] =~ /^-/;
+
+ # .. or at the end
+ push @opts, pop @args while @args and $args[-1] =~ /^-/;
+
+ my $options = MON::Options->new( opts_passed => \@opts );
+ my $logger = MON::Syslogger->new( options => $options );
+ my $config = MON::Config->new( options => $options, logger => $logger );
+
+ if ( $config->{'version'} ) {
+ print get_version(), "\n";
+ exit 0;
+ }
+
+ $logger->logg( 'info', "Invoked by $ENV{USER} (params: @ARGV)" );
+
+ if ( $config->{interactive} ) {
+ my $term = Term::ReadLine->new('Monitoring API tool');
+ my $prompt = '>> ';
+ my $out = $term->OUT || \*STDOUT;
+
+ say $out "Welcome to the Monitoring API Tool v" . get_version();
+ say $out "Press Ctrl+D to exit; Prefix cmd with ! to run via shell";
+
+ while ( defined( $_ = $term->readline($prompt) ) ) {
+ $term->addhistory($_) if /\S/;
+
+ if (s/^!//) {
+ system($_);
+ }
+ else {
+
+ my $line = $_;
+
+ my @args = split / +/, $line;
+
+ my $api = MON::RESTlos->new( config => $config );
+ my $query = MON::Query->new(
+ config => $config,
+ api => $api,
+ options => $options,
+ args => \@args
+ );
+ $query->parse();
+ }
+ }
+
+ }
+ else {
+ my $api = MON::RESTlos->new( config => $config );
+ my $query = MON::Query->new(
+ config => $config,
+ api => $api,
+ options => $options,
+ args => \@args
+ );
+
+ $query->parse();
+ $query->verbose("Good bye");
+
+ if ( $api->{had_error} != 0 ) {
+
+ # Needed by Puppet to re-try operation the next Puppet run
+ if ( $config->{errfile} ne '' ) {
+ open my $fh, $config->{errfile} or die "$!: $config->{errfile}";
+ print $fh "Exited with an error\n";
+ close $fh;
+ }
+
+ exit 2;
+ }
+ else {
+ unlink $config->{errfile}
+ if $config->{errfile} ne '' and -f $config->{errfile};
+ exit 0;
+ }
+ }
+}
+
+main @ARGV;
diff --git a/debian/mon/usr/bin/mi b/debian/mon/usr/bin/mi
new file mode 100755
index 0000000..49efcc0
--- /dev/null
+++ b/debian/mon/usr/bin/mi
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec mon --meta --interactive $@
diff --git a/debian/mon/usr/bin/mon b/debian/mon/usr/bin/mon
new file mode 100755
index 0000000..162f71a
--- /dev/null
+++ b/debian/mon/usr/bin/mon
@@ -0,0 +1,133 @@
+#!/usr/bin/perl
+#
+# (c) 2013, 2014 1&1 Internet AG
+# Paul C. Buetow <paul@buetow.org>
+
+use strict;
+use warnings;
+use v5.10;
+use autodie;
+
+use Data::Dumper;
+use Term::ReadLine;
+
+$| = 1;
+my $lib;
+
+BEGIN {
+ if ( -d './lib/MON' ) {
+ $lib = './lib';
+
+ }
+ else {
+ $lib = '/usr/share/mon/lib';
+ }
+
+ unless ( exists $ENV{HTTPS_CA_FILE} ) {
+ if ( -f 'ca.pem' ) {
+ $ENV{HTTPS_CA_FILE} = 'ca.pem';
+ }
+ elsif ( -f '/etc/ssl/certs/ca.pem' ) {
+ $ENV{HTTPS_CA_FILE} = '/etc/ssl/certs/ca.pem';
+ }
+ else {
+ $ENV{HTTPS_CA_FILE} = '/usr/share/mon/ca.pem';
+ }
+ }
+}
+
+use lib $lib;
+
+use MON::RESTlos;
+use MON::Config;
+use MON::Options;
+use MON::Query;
+use MON::Syslogger;
+use MON::Utils;
+use MON::Display;
+
+sub main (@) {
+ my @args = @_;
+ my @opts;
+
+ # Only interpret OPTIONS if they are at the beginning
+ push @opts, shift @args while @args and $args[0] =~ /^-/;
+
+ # .. or at the end
+ push @opts, pop @args while @args and $args[-1] =~ /^-/;
+
+ my $options = MON::Options->new( opts_passed => \@opts );
+ my $logger = MON::Syslogger->new( options => $options );
+ my $config = MON::Config->new( options => $options, logger => $logger );
+
+ if ( $config->{'version'} ) {
+ print get_version(), "\n";
+ exit 0;
+ }
+
+ $logger->logg( 'info', "Invoked by $ENV{USER} (params: @ARGV)" );
+
+ if ( $config->{interactive} ) {
+ my $term = Term::ReadLine->new('Monitoring API tool');
+ my $prompt = '>> ';
+ my $out = $term->OUT || \*STDOUT;
+
+ say $out "Welcome to the Monitoring API Tool v" . get_version();
+ say $out "Press Ctrl+D to exit; Prefix cmd with ! to run via shell";
+
+ while ( defined( $_ = $term->readline($prompt) ) ) {
+ $term->addhistory($_) if /\S/;
+
+ if (s/^!//) {
+ system($_);
+ }
+ else {
+
+ my $line = $_;
+
+ my @args = split / +/, $line;
+
+ my $api = MON::RESTlos->new( config => $config );
+ my $query = MON::Query->new(
+ config => $config,
+ api => $api,
+ options => $options,
+ args => \@args
+ );
+ $query->parse();
+ }
+ }
+
+ }
+ else {
+ my $api = MON::RESTlos->new( config => $config );
+ my $query = MON::Query->new(
+ config => $config,
+ api => $api,
+ options => $options,
+ args => \@args
+ );
+
+ $query->parse();
+ $query->verbose("Good bye");
+
+ if ( $api->{had_error} != 0 ) {
+
+ # Needed by Puppet to re-try operation the next Puppet run
+ if ( $config->{errfile} ne '' ) {
+ open my $fh, $config->{errfile} or die "$!: $config->{errfile}";
+ print $fh "Exited with an error\n";
+ close $fh;
+ }
+
+ exit 2;
+ }
+ else {
+ unlink $config->{errfile}
+ if $config->{errfile} ne '' and -f $config->{errfile};
+ exit 0;
+ }
+ }
+}
+
+main @ARGV;
diff --git a/debian/mon/usr/share/doc/mon/changelog.gz b/debian/mon/usr/share/doc/mon/changelog.gz
new file mode 100644
index 0000000..89f05ae
--- /dev/null
+++ b/debian/mon/usr/share/doc/mon/changelog.gz
Binary files differ
diff --git a/debian/mon/usr/share/doc/mon/copyright b/debian/mon/usr/share/doc/mon/copyright
new file mode 100644
index 0000000..9be5c7f
--- /dev/null
+++ b/debian/mon/usr/share/doc/mon/copyright
@@ -0,0 +1,30 @@
+Format: http://dep.debian.net/deps/dep5
+Upstream-Name: mon
+Source: http://mon.buetow.org
+
+Files: *
+Copyright: 2012 Paul Buetow <paul@buetow.org>
+License: GPL-3.0+
+
+Files: debian/*
+Copyright: 2012 Paul Buetow <paul@buetow.org>
+License: GPL-3.0+
+
+License: GPL-3.0+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
+
diff --git a/debian/mon/usr/share/man/man1/mon.1.gz b/debian/mon/usr/share/man/man1/mon.1.gz
new file mode 100644
index 0000000..1639eb5
--- /dev/null
+++ b/debian/mon/usr/share/man/man1/mon.1.gz
Binary files differ
diff --git a/debian/mon/usr/share/mon/contrib/zsh/_mon.zsh b/debian/mon/usr/share/mon/contrib/zsh/_mon.zsh
new file mode 100644
index 0000000..3770c60
--- /dev/null
+++ b/debian/mon/usr/share/mon/contrib/zsh/_mon.zsh
@@ -0,0 +1,46 @@
+#compdef m mon
+
+get_options() {
+ elements=`${words[1,$[${CURRENT}-1]]} --dry --nocolor 2>&1`
+ if [ $? -ne 0 ]; then
+ elements=""
+ fi
+
+ echo `echo $elements | tr '\n' ' '`
+}
+
+_mon() {
+ local curcontext="$curcontext" state line
+ typeset -A opt_args
+
+ case $words[2] in
+ getfmt)
+ if [ $CURRENT -eq 5 ]; then
+ compadd "$@" "where"
+ return
+ fi
+ ;;
+ post|put)
+ if [ $CURRENT -eq 4 ]; then
+ compadd "$@" "from"
+ return
+ fi
+ ;;
+ delete|edit|get|insert|update|view)
+ if [ $CURRENT -eq 4 ]; then
+ compadd "$@" "where"
+ return
+ fi
+ ;;
+ esac
+
+ VALUES="`get_options`"
+ if [ -z "${VALUES}" ]; then
+ _files
+ else
+ ARGS=(${=VALUES})
+ compadd "$@" ${ARGS[@]}
+ fi
+}
+
+_mon "$@"
diff --git a/debian/mon/usr/share/mon/examples/mon.conf.sample b/debian/mon/usr/share/mon/examples/mon.conf.sample
new file mode 100644
index 0000000..3cb6460
--- /dev/null
+++ b/debian/mon/usr/share/mon/examples/mon.conf.sample
@@ -0,0 +1,23 @@
+# Mandatory
+restlos.api.host: mamat-monitoringapi.infra.server.lan
+
+# Optional, default value is 'https'
+restlos.api.protocol: https
+
+# Optional, default value is '443'
+restlos.api.port: 443
+
+# Optional, default value is $USER
+restlos.auth.username: USERNAME
+
+# Mandatory
+restlos.auth.password.enc: PASSWORDBASE64ENCODED
+
+# Optional, default value is '1'
+backups.disable: 1
+
+# Optional, default value is '7'
+backups.keep.days: 0.1
+
+# Optional, default value is '~/.mon'
+backups.dir: ~/.mon
diff --git a/debian/mon/usr/share/mon/itca.pem b/debian/mon/usr/share/mon/itca.pem
new file mode 100644
index 0000000..5aaef20
--- /dev/null
+++ b/debian/mon/usr/share/mon/itca.pem
@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIID0DCCArgCAQAwDQYJKoZIhvcNAQEEBQAwga0xGjAYBgNVBAcTEUQtNzYxMzUg
+S2FybHNydWhlMQ4wDAYDVQQDEwVJVC1DQTEbMBkGA1UEChMSU2NobHVuZCtQYXJ0
+bmVyIEFHMRIwEAYDVQQLEwlJVCBXRUIuREUxJDAiBgkqhkiG9w0BCQEWFWl0LW9w
+ZXJhdGluZ0B3ZWJkZS5kZTELMAkGA1UEBhMCREUxGzAZBgNVBAgTEkJhZGVuLVd1
+ZXJ0dGVtYmVyZzAeFw0wNjA5MDUxMTQzMDFaFw0xNjA5MDIxMTQzMDFaMIGtMRow
+GAYDVQQHExFELTc2MTM1IEthcmxzcnVoZTEOMAwGA1UEAxMFSVQtQ0ExGzAZBgNV
+BAoTElNjaGx1bmQrUGFydG5lciBBRzESMBAGA1UECxMJSVQgV0VCLkRFMSQwIgYJ
+KoZIhvcNAQkBFhVpdC1vcGVyYXRpbmdAd2ViZGUuZGUxCzAJBgNVBAYTAkRFMRsw
+GQYDVQQIExJCYWRlbi1XdWVydHRlbWJlcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQC9BUNmQbH7A6AYm5ABESPxROOSd5MrXPbo8V+Lfc0whZMc4x/I
+6TmMl1t5yk5SyOQ6YGm5k86Q6YUgz1kWd4xfiUMUgd6skiUmcpR1vs/UkTqK1T3t
+szwm3jLUFA9oFwi5SWLOlP4r1bwIJcP/EAgT5roLuIfruV9G6AnEconRnnnI0FcM
+hSyta0saLsSBFzfU24NVh/zbzs1DV03POxd/xvc222bnsWM++5a7gMbMHTVwb73Y
+JpqEVQLA8klU4Ko0GZPc6OFFgrAKl4rcj7JryK5iFbTKFRk45huPciBhkQ5XlVhr
+gKn3xD7ZQr40hMIdIbc5lLAELeifVQcsdbCBAgMBAAEwDQYJKoZIhvcNAQEEBQAD
+ggEBAJUC5MF121nZh/3/2YCgi7HedafMDg9sjKiBG9gWlpRVTw4hRSBlQq5V32sC
++GPL9VWD8IN+U3Vjiw5ja8j0mza2EomEdpL52EeWcGmQtSjOGnQ1MsXJiCZk+Q/P
+qGwgJpgwdubcnTmCH332sWTurgO53M4v61+VPj+N3MGMtaehzIo062lzXZyFdCS6
+SjTF1WdWbi/5nybNs8ffnG+p+uf37trJtopgndiVDi9k8WzS1HzWQf8Cnvy9X/U2
+5kZ4T6eVtrHujuP4PvG6PpfrZqEXENngsYHG0jtNTH06Ewtb7y/VDuqwYGsvSGm6
+RbB+lGFa1z1MzlWbBpPGckUgSHU=
+-----END CERTIFICATE-----
diff --git a/debian/mon/usr/share/mon/lib/MAPI/Cache.pm b/debian/mon/usr/share/mon/lib/MAPI/Cache.pm
new file mode 100644
index 0000000..21b59f5
--- /dev/null
+++ b/debian/mon/usr/share/mon/lib/MAPI/Cache.pm
@@ -0,0 +1,55 @@
+package MON::Cache;
+
+use strict;
+use warnings;
+use v5.10;
+use autodie;
+
+use Data::Dumper;
+
+use MON::Display;
+use MON::Config;
+use MON::Utils;
+
+our @ISA = ('MON::Display');
+
+sub new {
+ my ( $class, %opts ) = @_;
+
+ my $self = bless \%opts, $class;
+
+ $self->init();
+
+ return $self;
+}
+
+sub init {
+ my ($self) = @_;
+
+ $self->clear();
+
+ return undef;
+}
+
+sub clear {
+ my ($self) = @_;
+
+ $self->{cache} = {};
+
+ return undef;
+}
+
+sub magic {
+ my ( $self, $key, $sub ) = @_;
+
+ my $cache = $self->{cache};
+
+ if ( exists $cache->{$key} ) {
+ $self->verbose("Delivering '$key' from cache");
+ return $cache->{$key};
+ }
+
+ return $cache->{$key} = $sub->();
+}
+
+1;
diff --git a/debian/mon/usr/share/mon/lib/MAPI/Config.pm b/debian/mon/usr/share/mon/lib/MAPI/Config.pm
new file mode 100644
index 0000000..dc83911
--- /dev/null
+++ b/debian/mon/usr/share/mon/lib/MAPI/Config.pm
@@ -0,0 +1,176 @@
+package MON::Config;
+
+use strict;
+use warnings;
+use v5.10;
+use autodie;
+
+use IO::File;
+use Data::Dumper;
+
+use MON::Display;
+use MON::Utils;
+
+#use MON::Options;
+
+use MIME::Base64 qw( decode_base64 );
+
+our @ISA = ('MON::Display');
+
+sub new {
+ my ( $class, %opts ) = @_;
+
+ my $self = bless \%opts, $class;
+ my $options = $self->{options};
+
+ $options->store_first($self);
+
+ $self->SUPER::init(%opts);
+
+ for ( @{ $options->{unknown} } ) {
+ $self->error("Unknown option: $_");
+ }
+
+ if ( $self->{'config'} ne '' ) {
+ $self->read_config( $self->{'config'} );
+
+ }
+ elsif ( exists $ENV{MON_CONFIG} ) {
+ $self->read_config( $ENV{MON_CONFIG} );
+
+ }
+ else {
+ $self->read_config('/etc/mon.conf');
+ $self->read_config($_) for sort glob("/etc/mon.d/*.conf");
+
+ $self->read_config("$ENV{HOME}/.mon.conf");
+ $self->read_config($_) for sort glob("$ENV{HOME}/.mon.d/*.conf");
+ }
+
+ $options->store_after($self);
+
+ unless ( exists $self->{config_was_read} ) {
+ $self->verbose("No config file found, but this might be OK");
+ }
+
+ $self->_set_defaults();
+
+ return $self;
+}
+
+sub _set_defaults {
+ my ($self) = @_;
+
+ my $set_default = sub {
+ my ( $key, $val ) = @_;
+
+ unless ( exists $self->{$key} ) {
+ $self->{$key} = $val;
+ $self->verbose(
+ "Since $key is not specified setting its default value to $val");
+ }
+ };
+
+ $set_default->( 'backups.dir' => "$ENV{HOME}/.mon" );
+ $set_default->( 'backups.disable' => 1 );
+ $set_default->( 'backups.keep.days' => 7 );
+ $set_default->( 'restlos.api.port' => '443' );
+ $set_default->( 'restlos.api.protocol' => 'https' );
+ $set_default->( 'restlos.auth.realm' => 'Login Required' );
+ $set_default->( 'restlos.auth.username' => $ENV{USER} );
+}
+
+sub read_config {
+ my ( $self, $config_file ) = @_;
+
+ return undef if not defined $config_file or not -f $config_file;
+
+ my $fh = IO::File->new( $config_file, 'r' );
+ $self->error("Could not open file $config_file") unless defined $fh;
+
+ $self->verbose("Reading config $config_file");
+
+ while ( my $line = $fh->getline() ) {
+ next if $line =~ /^#/;
+
+ # Ignore comments
+ $line =~ s/(.*);.*/$1/;
+
+ # Parse only matching lines
+ if ( $line =~ /^(.*):(.*)/ ) {
+ my ( $key, $val ) = ( lc trim $1, trim $2);
+ $self->verbose("Reading conf value $key");
+
+ # Handle ~
+ $val =~ s/~/$ENV{HOME}/g;
+ $self->set( $key, $val );
+ }
+ }
+
+ $fh->close();
+ $self->{config_was_read} = 1;
+
+ return undef;
+}
+
+sub get {
+ my ( $self, $key ) = @_;
+ $key = lc $key;
+
+ $self->{$key} //= do {
+ my $key = uc $key;
+ $key =~ s/\./_/g;
+
+ exists $ENV{$key} ? $ENV{$key} : undef;
+ };
+
+ if ( not exists $self->{$key}
+ or not defined $self->{$key}
+ or $self->{$key} eq '' )
+ {
+ $self->error("$key not configured");
+ }
+
+ return $self->{$key};
+}
+
+sub get_maybe_encoded {
+ my ( $self, $key ) = @_;
+
+ return $self->get($key) if exists $self->{$key};
+
+ $self->error("$key or $key.enc not configured")
+ unless exists $self->{"$key.enc"};
+
+ my $enc = $self->get("$key.enc");
+
+ return decode_base64($enc);
+}
+
+sub bool {
+ my ( $self, $key ) = @_;
+
+ my $val = $self->get($key);
+
+ return $val != 0;
+}
+
+sub array {
+ my ( $self, $key ) = @_;
+
+ my $val = $self->get($key);
+
+ return map { trim $_ } split ',', $val;
+}
+
+sub set {
+ my ( $self, $key, $val ) = @_;
+ $key = lc $key;
+
+ $self->verbose("$key already configured, overwriting it with its new value")
+ if exists $self->{$key};
+
+ return $self->{$key} = $val;
+}
+
+1;
diff --git a/debian/mon/usr/share/mon/lib/MAPI/Display.pm b/debian/mon/usr/share/mon/lib/MAPI/Display.pm
new file mode 100644
index 0000000..9bf8115
--- /dev/null
+++ b/debian/mon/usr/share/mon/lib/MAPI/Display.pm
@@ -0,0 +1,360 @@
+package MON::Display;
+
+use strict;
+use warnings;
+use v5.10;
+use autodie;
+
+use Data::Dumper;
+use Term::ANSIColor;
+
+use MON::Config;
+use MON::JSON;
+use MON::Utils;
+
+our $VERBOSE = 0;
+our $DEBUG = 0;
+our $COLORFUL = 0;
+our $QUIET = 0;
+our $LOGGER = undef;
+our $INTERACTIVE = undef;
+
+sub init {
+ my ( $self, %opts ) = @_;
+
+ $VERBOSE = $self->{'verbose'} == 1;
+ $DEBUG = $self->{'debug'} == 1;
+ $QUIET = $self->{'quiet'} == 1;
+ $LOGGER = $opts{logger};
+ $INTERACTIVE = $opts{interactive};
+
+ $self->{logglevel} = 'info';
+
+ if ( $self->{'nocolor'} == 1 ) {
+ $COLORFUL = 0;
+ }
+ else {
+ $COLORFUL = $ENV{MON_COLORFUL} // 1;
+ }
+
+ $VERBOSE = $DEBUG = $COLORFUL = 0 if $QUIET == 1;
+
+ return undef;
+}
+
+sub is_verbose {
+ my ($self) = @_;
+
+ return $VERBOSE == 1;
+}
+
+sub is_debug {
+ my ($self) = @_;
+
+ return $DEBUG == 1;
+}
+
+sub is_quiet {
+ my ($self) = @_;
+
+ return $QUIET == 1;
+}
+
+sub _display {
+ my ( $self, $msg, $fh, $le