Commit ada7efd6 authored by Jonathan Michalon's avatar Jonathan Michalon
Browse files

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 ``)
only if there are some checks in an error state.
Test it!
You have several solutions :
* Install with `distutils`, for example: ` 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 ``, so either copy/link the sample one, write
your own or use the `-s` command line argument.
#!/usr/bin/env python3
import picomon.__main__
#!/usr/bin/env python3
import subprocess
import sys
import os
......@@ -7,16 +8,20 @@ from picomon import mails
# launch picomon
retcode =["python3", ""] + 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 =[filename] + sys.argv[1:])
# load config file (unprotected, will trigger exceptions if problems but real
# picomon beforehand)
configfile = ""
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]
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 ````.
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" % \ + report
if __name__ == '__main__':
def run():
# Parse command line
parser = argparse.ArgumentParser()
parser.add_argument("-1", "--one",
......@@ -81,8 +90,8 @@ if __name__ == '__main__':
# 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 > 0:
......@@ -113,3 +122,7 @@ if __name__ == '__main__':
if __name__ == '__main__':
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