Merge pull request 'Add unixtime option' (#2) from faust/check_expire:add-output into master

Reviewed-on: bortzmeyer/check_expire#2
This commit is contained in:
bortzmeyer 2021-07-07 11:00:41 +02:00
commit 86436ef1f0
2 changed files with 26 additions and 12 deletions

View File

@ -10,6 +10,7 @@ check_expire follows the usual Nagios rules. The options are:
* -c: critical threshold in days * -c: critical threshold in days
* -w: warning threshold in days * -w: warning threshold in days
* -v: verbose details in output * -v: verbose details in output
* -u: unixtime output
## Installation ## Installation
@ -37,8 +38,8 @@ object CheckCommand "expiration" {
apply Service "expiration" { apply Service "expiration" {
import "generic-service" import "generic-service"
check_command = "expiration" check_command = "expiration"
assign where host.address && host.vars.monitor_expiration assign where host.address && host.vars.monitor_expiration
} }
``` ```
@ -48,15 +49,26 @@ And a possible use:
``` ```
object Host "bortzmeyer-org" { object Host "bortzmeyer-org" {
... ...
address = "bortzmeyer.org" address = "bortzmeyer.org"
vars.monitor_expiration = true vars.monitor_expiration = true
vars.expiration_verbose = 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 ## License
GPL. See LICENSE. GPL. See LICENSE.
@ -67,6 +79,4 @@ Stéphane Bortzmeyer <stephane+chapril@bortzmeyer.org>.
## Reference site ## 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.

View File

@ -42,10 +42,11 @@ verbose = False
domain = None domain = None
critical_t = datetime.timedelta(days=2) critical_t = datetime.timedelta(days=2)
warning_t = datetime.timedelta(days=7) warning_t = datetime.timedelta(days=7)
unixtime = False
# TODO implement timeout for HTTPS requests. -t option. Does Requests allow it? # TODO implement timeout for HTTPS requests. -t option. Does Requests allow it?
def usage(msg=None): 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 != "": if msg is not None and msg != "":
print(" (%s)" % msg) print(" (%s)" % msg)
else: else:
@ -80,8 +81,8 @@ def ok(msg=None):
sys.exit(STATE_OK) sys.exit(STATE_OK)
try: try:
optlist, args = getopt.getopt (sys.argv[1:], "c:hH:vVw:", optlist, args = getopt.getopt (sys.argv[1:], "c:hH:vVw:u",
["critical=", "expiration", "help", "verbose", "version", "warning="]) ["critical=", "expiration", "help", "verbose", "version", "warning=", "unixtime"])
for option, value in optlist: for option, value in optlist:
if option == "--critical" or option == "-c": if option == "--critical" or option == "-c":
critical_t = datetime.timedelta(days=int(value)) critical_t = datetime.timedelta(days=int(value))
@ -97,6 +98,8 @@ try:
sys.exit(STATE_OK) sys.exit(STATE_OK)
elif option == "--warning" or option == "-w": elif option == "--warning" or option == "-w":
warning_t = datetime.timedelta(days=int(value)) warning_t = datetime.timedelta(days=int(value))
elif option == "--unixtime" or option == "-u":
unixtime = True
else: else:
# Should never occur, it is trapped by getopt # Should never occur, it is trapped by getopt
print("Unknown option %s" % option) print("Unknown option %s" % option)
@ -136,6 +139,9 @@ for event in rdap["events"]:
print("No recognized format for datetime \"%s\"" % event["eventDate"]) print("No recognized format for datetime \"%s\"" % event["eventDate"])
sys.exit(STATE_UNKNOWN) sys.exit(STATE_UNKNOWN)
now = datetime.datetime.now(tz=UTCINFO) now = datetime.datetime.now(tz=UTCINFO)
if unixtime == True:
print(int(expiration.strftime("%s")))
sys.exit(STATE_OK)
if expiration < now: if expiration < now:
error("domain %s is already expired (%s ago)" % (domain, (now-expiration))) error("domain %s is already expired (%s ago)" % (domain, (now-expiration)))
rest = expiration-now rest = expiration-now
@ -146,5 +152,3 @@ for event in rdap["events"]:
else: else:
ok("expires in %s." % (rest)) ok("expires in %s." % (rest))
error("No expiration found") error("No expiration found")