From 342f89844beaa3f35f1646648ad6f56a310d6d52 Mon Sep 17 00:00:00 2001 From: Faustin Lammler Date: Tue, 6 Jul 2021 12:22:38 +0200 Subject: [PATCH] Add unixtime option Add an option to return the expiration date in unixtime (time since epoch). ./check_expire -H domain -u It's particularly useful for alerting or monitoring systems that do their own calculation based on the metric they receive (and not based on exit codes). For instance you can use the following in zabbix 5.4: - item: check_expire["-H","{HOST.CONN}","-u"] - trigger: last(/check_expire["-H","{HOST.CONN}","-u"])-now()<2592000 Where 2592000 is 30 days in seconds. --- README.md | 24 +++++++++++++++++------- check_expire | 14 +++++++++----- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 3c46605..7ea2387 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ check_expire follows the usual Nagios rules. The options are: * -c: critical threshold in days * -w: warning threshold in days * -v: verbose details in output +* -u: unixtime output ## Installation @@ -37,8 +38,8 @@ object CheckCommand "expiration" { apply Service "expiration" { import "generic-service" - check_command = "expiration" - + check_command = "expiration" + assign where host.address && host.vars.monitor_expiration } ``` @@ -48,15 +49,26 @@ And a possible use: ``` object Host "bortzmeyer-org" { ... - + address = "bortzmeyer.org" vars.monitor_expiration = true vars.expiration_verbose = true - + } ``` +## Zabbix configuration + +For monitoring systems that do not rely on exit codes but on calculation mechanism based on the metric they receive you can use the `-u` option that will only return the expiration date in unixtime format. + +For instance, you can use the following in zabbix 5.4: + +* item: `check_expire["-H","{HOST.CONN}","-u"]` +* trigger (30 days before expiration): `last(/check_expire["-H","{HOST.CONN}","-u"])-now()<2592000` + +Where `2592000` is the number of seconds in 30 days. + ## License GPL. See LICENSE. @@ -67,6 +79,4 @@ Stéphane Bortzmeyer . ## Reference site -https://forge.chapril.org/bortzmeyer/check_expire Use the Gitea issue tracker to report bugs or wishes. - - +https://forge.chapril.org/bortzmeyer/check_expire Use the Gitea issue tracker to report bugs or wishes. diff --git a/check_expire b/check_expire index a60fba0..63797df 100755 --- a/check_expire +++ b/check_expire @@ -42,10 +42,11 @@ verbose = False domain = None critical_t = datetime.timedelta(days=2) warning_t = datetime.timedelta(days=7) +unixtime = False # TODO implement timeout for HTTPS requests. -t option. Does Requests allow it? def usage(msg=None): - print("Usage: %s -H domain-name [-c critical -w warning]" % sys.argv[0], end="") + print("Usage: %s -H domain-name [-c critical -w warning -u unixtime]" % sys.argv[0], end="") if msg is not None and msg != "": print(" (%s)" % msg) else: @@ -80,8 +81,8 @@ def ok(msg=None): sys.exit(STATE_OK) try: - optlist, args = getopt.getopt (sys.argv[1:], "c:hH:vVw:", - ["critical=", "expiration", "help", "verbose", "version", "warning="]) + optlist, args = getopt.getopt (sys.argv[1:], "c:hH:vVw:u", + ["critical=", "expiration", "help", "verbose", "version", "warning=", "unixtime"]) for option, value in optlist: if option == "--critical" or option == "-c": critical_t = datetime.timedelta(days=int(value)) @@ -97,6 +98,8 @@ try: sys.exit(STATE_OK) elif option == "--warning" or option == "-w": warning_t = datetime.timedelta(days=int(value)) + elif option == "--unixtime" or option == "-u": + unixtime = True else: # Should never occur, it is trapped by getopt print("Unknown option %s" % option) @@ -136,6 +139,9 @@ for event in rdap["events"]: print("No recognized format for datetime \"%s\"" % event["eventDate"]) sys.exit(STATE_UNKNOWN) now = datetime.datetime.now(tz=UTCINFO) + if unixtime == True: + print(int(expiration.strftime("%s"))) + sys.exit(STATE_OK) if expiration < now: error("domain %s is already expired (%s ago)" % (domain, (now-expiration))) rest = expiration-now @@ -146,5 +152,3 @@ for event in rdap["events"]: else: ok("expires in %s." % (rest)) error("No expiration found") - -