Commit ada7efd6 authored by Jonathan Michalon's avatar Jonathan Michalon

Move main script code into module and create installable executables

parent 215d513b
......@@ -77,6 +77,19 @@ They are sent on a regular basis (configured with option `emails.report.every`)
only if there are some checks in an error state.
Test it!
--------
You have several solutions :
* Install with `distutils`, for example: `setup.py install --user` then run it from your local bin/ directory;
* Run directly with something like `python3 -m picomon`
* Set python module path by hand: `PYTHONPATH=. bin/picomon`
The default config file is `config.py`, so either copy/link the sample one, write
your own or use the `-s` command line argument.
License
-------
......
#!/usr/bin/env python3
import picomon.__main__
picomon.__main__.run()
#!/usr/bin/env python3
import subprocess
import sys
import os
......@@ -7,16 +8,20 @@ from picomon import mails
# launch picomon
retcode = subprocess.call(["python3", "picomon.py"] + sys.argv[1:])
filename = 'picomon'
if os.path.sep in sys.argv[0]:
filename = os.path.join(os.path.dirname(sys.argv[0]), filename)
retcode = subprocess.call([filename] + sys.argv[1:])
# load config file (unprotected, will trigger exceptions if problems but real
# picomon beforehand)
configfile = "config.py"
if "-c" in sys.argv:
configfile = sys.argv[sys.argv.index("-c")+1]
configfile = sys.argv[sys.argv.index("-c") + 1]
if "--config" in sys.argv:
configfile = sys.argv[sys.argv.index("--config")+1]
configfile = sys.argv[sys.argv.index("--config") + 1]
sys.path.append(os.path.dirname(configfile))
filename = os.path.basename(configfile)
......
"""
Picomon executable module.
This module can be executed from a command line with ``$python -m picomon`` or
from a python programme with ``picomon.__main__.run()``.
"""
import concurrent.futures
import signal
import argparse
......@@ -6,12 +16,12 @@ import importlib
import sys
import os
from time import sleep
from picomon import config
from picomon import mails
from datetime import datetime, timedelta
from . import config
from . import mails
def create_report(only_old=False):
def __create_report(only_old=False):
has_error = False
report = ''
report += "\n Checks in error:\n"
......@@ -33,22 +43,21 @@ def create_report(only_old=False):
return (report, has_error)
def usr1_handler(signum, frame):
(report, err) = create_report()
def __usr1_handler(signum, frame):
(report, err) = __create_report()
print ("Signal SIGUSR1 caught, printing state of checks.")
print (report)
def alarm_handler(signum, frame):
(report, err) = create_report(only_old=True)
def __alarm_handler(signum, frame):
(report, err) = __create_report(only_old=True)
if err:
report = "Following entries have failed for more than %ss:\n" % \
config.emails.report.every + report
mails.send_email_report(report)
if __name__ == '__main__':
def run():
# Parse command line
parser = argparse.ArgumentParser()
parser.add_argument("-1", "--one",
......@@ -81,8 +90,8 @@ if __name__ == '__main__':
logging.getLogger().setLevel('DEBUG')
# register signal handling
signal.signal(signal.SIGUSR1, usr1_handler)
signal.signal(signal.SIGALRM, alarm_handler)
signal.signal(signal.SIGUSR1, __usr1_handler)
signal.signal(signal.SIGALRM, __alarm_handler)
# register report signal interval
if config.emails.report.every > 0:
......@@ -113,3 +122,7 @@ if __name__ == '__main__':
executor.submit(check.run)
sleep(config.base_tick)
mails.quit()
if __name__ == '__main__':
run()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment