bundles/icinga2: send notifications
Some checks failed
bundlewrap/pipeline/head There was a failure building this commit
Some checks failed
bundlewrap/pipeline/head There was a failure building this commit
This commit is contained in:
parent
d26b8ade45
commit
15826c73b0
5 changed files with 283 additions and 1 deletions
125
bundles/icinga2/files/scripts/icinga_notification_wrapper
Normal file
125
bundles/icinga2/files/scripts/icinga_notification_wrapper
Normal file
|
@ -0,0 +1,125 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import email.mime.text
|
||||
import smtplib
|
||||
from argparse import ArgumentParser
|
||||
from requests import get
|
||||
from subprocess import run
|
||||
from sys import argv
|
||||
|
||||
parser = ArgumentParser(
|
||||
prog='icinga_notification_wrapper',
|
||||
description='Icinga2 Notification Wrapper',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--host_name',
|
||||
type=str,
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
'--service_name',
|
||||
type=str,
|
||||
)
|
||||
parser.add_argument(
|
||||
'--output',
|
||||
type=str,
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
'--state',
|
||||
type=str,
|
||||
required=True,
|
||||
)
|
||||
parser.add_argument(
|
||||
'--sms',
|
||||
type=str,
|
||||
)
|
||||
parser.add_argument(
|
||||
'--mail',
|
||||
type=str,
|
||||
)
|
||||
parser.add_argument(
|
||||
'--escalation',
|
||||
action='store_true',
|
||||
)
|
||||
|
||||
def log_to_syslog(message):
|
||||
try:
|
||||
msg = '{}/{}: {}'.format(args.host_name, args.service_name, message)
|
||||
run(['logger', '-t', 'icinga_notification_wrapper', msg])
|
||||
except:
|
||||
# We don't expect this to fail. However, *if* it fails, we don't
|
||||
# want it to get in the way of other notifications we may have
|
||||
# to send.
|
||||
pass
|
||||
|
||||
|
||||
def notify_per_sms():
|
||||
log_to_syslog('SMS requested, but not implemented yet!') # FIXME TODO
|
||||
return
|
||||
msg = 'ICINGA: {host}/{service} is {state}: {output}'.format(
|
||||
host=args.host_name,
|
||||
service=args.service_name,
|
||||
state=args.state,
|
||||
output=args.output
|
||||
)
|
||||
|
||||
|
||||
def notify_per_mail():
|
||||
text = """
|
||||
_ _
|
||||
(_)____(_)___ ____ _____ _
|
||||
/ / ___/ / __ \/ __ `/ __ `/
|
||||
/ / /__/ / / / / /_/ / /_/ /
|
||||
/_/\___/_/_/ /_/\__, /\__,_/
|
||||
/____/
|
||||
|
||||
Host: {host}"""
|
||||
|
||||
if args.service_name:
|
||||
text += """
|
||||
Service: {service}"""
|
||||
|
||||
text += """
|
||||
State: {state}
|
||||
|
||||
{output}"""
|
||||
|
||||
mail = email.mime.text.MIMEText(text.format(
|
||||
host=args.host_name,
|
||||
service=args.service_name,
|
||||
state=args.state,
|
||||
output=args.output
|
||||
),
|
||||
'plain',
|
||||
'utf-8',
|
||||
)
|
||||
|
||||
if args.service_name:
|
||||
mail['Subject'] = '[ICINGA] {}/{} is {}'.format(args.host_name, args.service_name, args.state)
|
||||
else:
|
||||
mail['Subject'] = '[ICINGA] {} is {}'.format(args.host_name, args.state)
|
||||
|
||||
mail['To'] = args.mail
|
||||
mail['From'] = 'noreply+icinga@kunbox.net'
|
||||
|
||||
try:
|
||||
s = smtplib.SMTP('localhost')
|
||||
s.sendmail(mail['From'], [args.mail], mail.as_string())
|
||||
s.quit()
|
||||
|
||||
log_to_syslog('Sent mail to "{}"'.format(args.mail))
|
||||
except Exception as e:
|
||||
log_to_syslog('Sending mail to "{}" failed: {}'.format(args.mail, repr(e)))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
args = parser.parse_args()
|
||||
|
||||
log_to_syslog(' '.join(argv))
|
||||
|
||||
if args.mail and not args.escalation:
|
||||
notify_per_mail()
|
||||
|
||||
if args.sms:
|
||||
notify_per_sms()
|
Loading…
Add table
Add a link
Reference in a new issue