]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Add sms check to monitoring
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Thu, 13 Feb 2020 12:06:37 +0000 (13:06 +0100)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Thu, 13 Feb 2020 12:06:37 +0000 (13:06 +0100)
modules/private/environment.nix
modules/private/monitoring/default.nix
modules/private/monitoring/objects_common.nix
modules/private/monitoring/objects_monitoring-1.nix
modules/private/monitoring/plugins/check_ovh_sms [new file with mode: 0755]

index 2cecc6d7be7c9ac7095490d8430de7966ff26185..b7589eb3489fd3da9085398ff332f43e38e59602 100644 (file)
@@ -497,6 +497,18 @@ in
           imap_login = mkOption { type = str; description = "IMAP login"; };
           imap_password = mkOption { type = str; description = "IMAP password"; };
           eriomem_keys = mkOption { type = listOf (listOf str); description = "Eriomem keys"; default = []; };
+          ovh_sms = mkOption {
+            description = "OVH credentials for sms script";
+            type = submodule {
+              options = {
+                endpoint = mkOption { type = str; default = "ovh-eu"; description = "OVH endpoint"; };
+                application_key = mkOption { type = str; description = "Application key"; };
+                application_secret = mkOption { type = str; description = "Application secret"; };
+                consumer_key = mkOption { type = str; description = "Consumer key"; };
+                account = mkOption { type = str; description = "Account"; };
+              };
+            };
+          };
           nrdp_tokens = mkOption { type = listOf str; description = "Tokens allowed to push status update"; };
           slack_url = mkOption { type = str; description = "Slack webhook url to push status update"; };
           slack_channel = mkOption { type = str; description = "Slack channel to push status update"; };
index a7013af68cc6f4d6aedf7fdae8014c511e7de262..d23e9c5e572969611dc6f5e1041dd02622498681 100644 (file)
@@ -65,6 +65,9 @@ let
     wrapProgram $out/notify_by_slack --prefix PATH : ${lib.makeBinPath [
       pkgs.curl pkgs.jq
     ]}
+    wrapProgram $out/check_ovh_sms --prefix PATH : ${lib.makeBinPath [
+      (pkgs.python3.withPackages (ps: [ps.ovh]))
+    ]}
     '';
   toObjects = pkgs.callPackage ./to_objects.nix {};
   commonConfig = {
@@ -259,6 +262,13 @@ in
         $USER206$=${config.myEnv.monitoring.slack_channel}
         $USER207$=${config.myEnv.monitoring.slack_url}
         $USER208$=${builtins.concatStringsSep "," (map (builtins.concatStringsSep ":") config.myEnv.monitoring.eriomem_keys)}
+        $USER209$=${builtins.concatStringsSep "," [
+          config.myEnv.monitoring.ovh_sms.endpoint
+          config.myEnv.monitoring.ovh_sms.application_key
+          config.myEnv.monitoring.ovh_sms.application_secret
+          config.myEnv.monitoring.ovh_sms.consumer_key
+          config.myEnv.monitoring.ovh_sms.account
+        ]}
       '';
       objectDefs = toObjects commonObjects
         + toObjects hostObjects
index a9d6da409bbf29268a0c5eb552679a14c64529ff..e21f9d01aa63950ddf5c934107b0f414b02b5fc8 100644 (file)
@@ -117,6 +117,7 @@ in
     check_mysql_replication = "${sudo} -u mysql $USER2$/check_mysql_replication \"$ARG1$\" \"$ARG2$\"";
     check_postgresql_replication = "${sudo} -u postgres $USER2$/check_postgres_replication \"$ARG1$\" \"$ARG2$\" \"$ARG3$\"";
     check_openldap_replication = "${sudo} -u openldap $USER2$/check_openldap_replication \"$ARG1$\" \"$ARG2$\" \"$ARG3$\" \"$ARG4$\" \"$ARG5$\"";
+    check_ovh_sms = "$USER2$/check_ovh_sms \"$USER209$\"";
     check_redis_replication = "${sudo} -u redis $USER2$/check_redis_replication \"$ARG1$\"";
     check_smtp = "$USER1$/check_smtp -H $HOSTADDRESS$ -p 25 -S -D 21,15";
     check_tcp = "$USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ -e \"$ARG2$\" -Mcrit";
index 3200d5c3f9fa61153100be4591b5b9d07cacbdfa..10327b8a686430c31a6e094534ab5e7a6a9f50ae 100644 (file)
       _webstatus_url = "imap.immae.eu";
     }
 
+    # Third party services
+    {
+      service_description = "OVH account has enough sms";
+      host_name = "eldiron.immae.eu";
+      use = "external-service";
+      check_command = "check_ovh_sms";
+
+      check_interval = "120";
+      notification_interval = "120";
+    }
+
     # Backup services
     {
       service_description = "Eriomem backup is up and not full";
diff --git a/modules/private/monitoring/plugins/check_ovh_sms b/modules/private/monitoring/plugins/check_ovh_sms
new file mode 100755 (executable)
index 0000000..141f82d
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/env python
+
+import sys
+try:
+    import ovh
+
+    [endpoint, application_key, application_secret, consumer_key, account] = sys.argv[1].split(",")
+    client = ovh.Client(
+        endpoint=endpoint,
+        application_key=application_key,
+        application_secret=application_secret,
+        consumer_key=consumer_key,
+    )
+
+    result = client.get('/sms/{}'.format(account))["creditsLeft"]
+
+    if result < 20:
+        print("SMS OVH Critical - Not enough sms left ({})|SMS {}".format(result, result))
+        sys.exit(2)
+    else:
+        print("SMS OVH Ok - Enough sms left ({})|SMS {}".format(result, result))
+        sys.exit(0)
+except Exception:
+    print("SMS OVH UNKNOWN - Error during script")
+    sys.exit(3)