add bundle:check-mail-received
All checks were successful
bundlewrap/pipeline/head This commit looks good
All checks were successful
bundlewrap/pipeline/head This commit looks good
This commit is contained in:
parent
76b859c629
commit
3351767d56
6 changed files with 137 additions and 6 deletions
70
bundles/check-mail-received/files/check_imap_for_mail_from
Normal file
70
bundles/check-mail-received/files/check_imap_for_mail_from
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from imaplib import IMAP4_SSL
|
||||||
|
from subprocess import check_output
|
||||||
|
from sys import argv, exit
|
||||||
|
from time import time
|
||||||
|
|
||||||
|
if len(argv) < 5:
|
||||||
|
print('Usage: {} <imap host> <username> <password> <message sender>'.format(argv[0]))
|
||||||
|
exit(3)
|
||||||
|
|
||||||
|
NOW = time()
|
||||||
|
|
||||||
|
try:
|
||||||
|
imap = IMAP4_SSL(argv[1])
|
||||||
|
imap.login(argv[2], argv[3])
|
||||||
|
|
||||||
|
imap.select('Inbox')
|
||||||
|
|
||||||
|
_, data = imap.search(None, 'ALL')
|
||||||
|
|
||||||
|
something_found = False
|
||||||
|
|
||||||
|
for item in data:
|
||||||
|
for index in item.split():
|
||||||
|
received_in_this_mail = None
|
||||||
|
from_in_this_mail = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
message = imap.fetch(index, '(RFC822)')
|
||||||
|
|
||||||
|
message_text = bytearray()
|
||||||
|
for part in message[1][0]:
|
||||||
|
message_text.extend(part)
|
||||||
|
message_text = message_text.decode().splitlines()
|
||||||
|
|
||||||
|
for line in message_text:
|
||||||
|
lline = line.strip().lower()
|
||||||
|
|
||||||
|
if lline.startswith('from:') and argv[4].lower() in line:
|
||||||
|
from_in_this_mail = True
|
||||||
|
|
||||||
|
if lline.startswith('date:'):
|
||||||
|
date = line.strip()[5:].strip()
|
||||||
|
unixtime = int(check_output([
|
||||||
|
'date',
|
||||||
|
'--date={}'.format(date),
|
||||||
|
'+%s',
|
||||||
|
]).decode().strip())
|
||||||
|
|
||||||
|
if unixtime > (NOW-(60*60*25)):
|
||||||
|
received_in_this_mail = date
|
||||||
|
|
||||||
|
if received_in_this_mail and from_in_this_mail:
|
||||||
|
print('Found message from "{}" sent at "{}"'.format(argv[4], received_in_this_mail))
|
||||||
|
received_in_this_mail = None
|
||||||
|
from_in_this_mail = False
|
||||||
|
something_found = True
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if something_found:
|
||||||
|
# there should be output above
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
print('No Mails found')
|
||||||
|
exit(2)
|
||||||
|
except Exception as e:
|
||||||
|
print(repr(e))
|
||||||
|
exit(3)
|
5
bundles/check-mail-received/items.py
Normal file
5
bundles/check-mail-received/items.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
files = {
|
||||||
|
'/usr/local/share/icinga/plugins/check_imap_for_mail_from': {
|
||||||
|
'mode': '0755',
|
||||||
|
},
|
||||||
|
}
|
41
bundles/check-mail-received/metadata.py
Normal file
41
bundles/check-mail-received/metadata.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'cron/check-mail-received',
|
||||||
|
'icinga2_api/check-mail-received/services',
|
||||||
|
)
|
||||||
|
def process_metadata(metadata):
|
||||||
|
cron = set()
|
||||||
|
services = {}
|
||||||
|
|
||||||
|
my_mail_address = 'root@{}'.format(metadata.get('hostname'))
|
||||||
|
|
||||||
|
for name, config in metadata.get('check-mail-received', {}).items():
|
||||||
|
cron.add('{minute} {hour} * * * root date | mail -s "daily test mail from {node}" -r {source} {target}'.format(
|
||||||
|
minute=node.magic_number%60,
|
||||||
|
hour=node.magic_number%24,
|
||||||
|
node=node.name,
|
||||||
|
source=my_mail_address,
|
||||||
|
target=config['email'],
|
||||||
|
))
|
||||||
|
|
||||||
|
services[f'MAIL RECEIVED ON {name}'] = {
|
||||||
|
'command_on_monitored_host': repo.libs.faults.join_faults([
|
||||||
|
'/usr/local/share/icinga/plugins/check_imap_for_mail_from',
|
||||||
|
config['imap_host'],
|
||||||
|
config.get('imap_user', config['email']),
|
||||||
|
config['imap_pass'],
|
||||||
|
my_mail_address,
|
||||||
|
]),
|
||||||
|
'check_interval': '15m',
|
||||||
|
'retry_interval': '5m',
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
'cron': {
|
||||||
|
'check-mail-received': '\n'.join(sorted(cron)),
|
||||||
|
},
|
||||||
|
'icinga2_api': {
|
||||||
|
'check-mail-received': {
|
||||||
|
'services': services,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ nodes['aurto'] = {
|
||||||
'hostname': '31.47.232.107',
|
'hostname': '31.47.232.107',
|
||||||
'bundles': {
|
'bundles': {
|
||||||
'backup-client',
|
'backup-client',
|
||||||
|
'check-mail-received',
|
||||||
},
|
},
|
||||||
'groups': {
|
'groups': {
|
||||||
'arch',
|
'arch',
|
||||||
|
@ -18,8 +19,12 @@ nodes['aurto'] = {
|
||||||
'/var/cache/pacman/aurto',
|
'/var/cache/pacman/aurto',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'cron': {
|
'check-mail-received': {
|
||||||
'telekom_nervkram': vault.decrypt('encrypt$gAAAAABg6X1pOUs_jVkqyHYChM4P6lpdpAUmLXkDPy2grxcL-R8Ab10Isxj52dvUkLFET-LhNgxgnGbdYtMhv1_awgS9klHW1A==').format_into('0 0 * * * root date | mail -s \'daily test mail\' -r root@aurto.kunbox.net {}@t-online.de'),
|
't-online': {
|
||||||
|
'email': 'franzi.kunsmann@t-online.de',
|
||||||
|
'imap_host': 'secureimap.t-online.de',
|
||||||
|
'imap_pass': bwpass.attr('t-online.de/franzi.kunsmann@t-online.de', 'imap'),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'interfaces': {
|
'interfaces': {
|
||||||
'enp1s0': {
|
'enp1s0': {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
nodes['htz.ex42-1048908'] = {
|
nodes['htz.ex42-1048908'] = {
|
||||||
'bundles': {
|
'bundles': {
|
||||||
|
'check-mail-received',
|
||||||
'dovecot',
|
'dovecot',
|
||||||
'element-web',
|
'element-web',
|
||||||
# 'gitea',
|
# 'gitea',
|
||||||
|
@ -86,8 +87,12 @@ nodes['htz.ex42-1048908'] = {
|
||||||
'/opt/matrix/matrix-dimension',
|
'/opt/matrix/matrix-dimension',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'cron': {
|
'check-mail-received': {
|
||||||
'telekom_nervkram': vault.decrypt('encrypt$gAAAAABfqXi23M96wrSLhqlbhqgePYX06LjPXfyQU2y_07kqYYLztj_PhS1-dk4r5FiiL2Ofmx5iCKW1sZNqiQSuHj2uKaitH0GnwHqj5CI2JwkAS9HrFxw=').format_into('0 0 * * * root date | mail -s \'daily test mail \' -r postmaster@mx0.kunbox.net {}'),
|
't-online': {
|
||||||
|
'email': 'franzi.kunsmann@t-online.de',
|
||||||
|
'imap_host': 'secureimap.t-online.de',
|
||||||
|
'imap_pass': bwpass.attr('t-online.de/franzi.kunsmann@t-online.de', 'imap'),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'element-web': {
|
'element-web': {
|
||||||
'url': 'chat.franzi.business',
|
'url': 'chat.franzi.business',
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
nodes['rx300'] = {
|
nodes['rx300'] = {
|
||||||
'hostname': '31.47.232.106',
|
'hostname': '31.47.232.106',
|
||||||
'bundles': {
|
'bundles': {
|
||||||
|
'check-mail-received',
|
||||||
'gitea',
|
'gitea',
|
||||||
'lm-sensors',
|
'lm-sensors',
|
||||||
'miniflux',
|
'miniflux',
|
||||||
|
@ -49,8 +50,12 @@ nodes['rx300'] = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'cron': {
|
'check-mail-received': {
|
||||||
'telekom_nervkram': vault.decrypt('encrypt$gAAAAABg6X1pOUs_jVkqyHYChM4P6lpdpAUmLXkDPy2grxcL-R8Ab10Isxj52dvUkLFET-LhNgxgnGbdYtMhv1_awgS9klHW1A==').format_into('0 0 * * * root date | mail -s \'daily test mail\' -r root@rx300.kunbox.net {}@t-online.de'),
|
't-online': {
|
||||||
|
'email': 'franzi.kunsmann@t-online.de',
|
||||||
|
'imap_host': 'secureimap.t-online.de',
|
||||||
|
'imap_pass': bwpass.attr('t-online.de/franzi.kunsmann@t-online.de', 'imap'),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'gitea': {
|
'gitea': {
|
||||||
'version': '1.14.4',
|
'version': '1.14.4',
|
||||||
|
|
Loading…
Reference in a new issue