diff --git a/README.md b/README.md index c2968b12bc33543b0a8065662d9f24340a5a903b..4aca04a58e932b01c2a97d5da9639aa148ce366e 100644 --- a/README.md +++ b/README.md @@ -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 ------- diff --git a/bin/picomon b/bin/picomon new file mode 100755 index 0000000000000000000000000000000000000000..0f71293f7a5b7971d94a43b40f2057602b064956 --- /dev/null +++ b/bin/picomon @@ -0,0 +1,6 @@ +#!/usr/bin/env python3 + +import picomon.__main__ + + +picomon.__main__.run() diff --git a/picomon_watchdog.py b/bin/picomon-watchdog old mode 100644 new mode 100755 similarity index 66% rename from picomon_watchdog.py rename to bin/picomon-watchdog index a55cdf91640708c46fb976dfdaa1762962c2b56c..ab4873f8a44aa886ecc6c9f52cb6699213106b8f --- a/picomon_watchdog.py +++ b/bin/picomon-watchdog @@ -1,3 +1,4 @@ +#!/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) diff --git a/picomon.py b/picomon/__main__.py similarity index 87% rename from picomon.py rename to picomon/__main__.py index 62e3c7eeb1525bcf22498c843ebbf8b89d8b4fa6..cd40e20a18b42fd5f5ac14e7ef9f5b8ff089fc19 100644 --- a/picomon.py +++ b/picomon/__main__.py @@ -1,3 +1,13 @@ + +""" +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()