summaryrefslogtreecommitdiff
path: root/python-status-exporter/python-status-exporter.py
diff options
context:
space:
mode:
Diffstat (limited to 'python-status-exporter/python-status-exporter.py')
-rwxr-xr-xpython-status-exporter/python-status-exporter.py113
1 files changed, 93 insertions, 20 deletions
diff --git a/python-status-exporter/python-status-exporter.py b/python-status-exporter/python-status-exporter.py
index b6c0807..27a6e5f 100755
--- a/python-status-exporter/python-status-exporter.py
+++ b/python-status-exporter/python-status-exporter.py
@@ -11,43 +11,116 @@ import argparse
import importlib
from pprint import pprint
+import logging
-if __name__ == '__main__':
- parser = argparse.ArgumentParser()
- parser.add_argument("-m", "--module", help="Module to load", action="append", nargs="+", required=True, type=str)
- args = parser.parse_args()
+import time
+import signal
- """
-On the other hand, the statement from spam.ham import eggs, sausage as saus results in
+def sig_handler(signal, frame):
+ if "args" in globals():
+ try:
+ os.remove(args.pid_file)
+ except FileNotFoundError as EX:
+ logger = logging.getLogger()
+ logger.exception("Unable to remove PID-file {}".format(args.pid_file))
+ sys.exit(signal)
-_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], -1)
-eggs = _temp.eggs
-saus = _temp.sausage
+signal.signal(signal.SIGINT, sig_handler)
+signal.signal(signal.SIGTERM, sig_handler)
-Here, the spam.ham module is returned from __import__(). From this object, the names to import are retrieved and assigned to their respective names.
+def main(args):
+ logger = logging.getLogger()
+ logger.debug("Starting main({})".format(args))
+ if args.fork:
+ logger.debug("Trying to fork")
+ pid = os.fork()
+ if pid:
+ pidfile = open(args.pid_file, "w")
+ print(pid, file=pidfile)
+ logger.debug("Forked into PID: {}".format(pid))
+ pidfile.close()
+ sys.exit(0)
+ else:
+ pidfile = open(args.pid_file, "w")
+ print(os.getpid(), file=pidfile)
+ logger.debug("Running in forground with PID: {}".format(os.getpid()))
+ pidfile.close()
-"""
mods = list()
for m in args.module:
mod = importlib.import_module("modules." + m[0])
mods.append(mod)
- for m in mods:
- pprint(m)
- pprint(dir(m))
-
+ if logger.getEffectiveLevel() <= logging.DEBUG:
+ for m in mods:
+ logger.debug("Listing loaded modules:")
+ logger.debug(" " + str(m))
+
prom_data = dict()
for m in mods:
m.init_datapoints(prom_data)
m.update_datapoints(prom_data)
- start_http_server(8000)
+
+ if logger.getEffectiveLevel() <= logging.DEBUG:
+ logger.debug("Listing datapoints from all modules:")
+ for d in prom_data:
+ logger.debug(" " + d)
+
+
+ if args.host is None:
+ logger.debug("start http listener")
+ start_http_server(args.port)
+ else:
+ logger.debug("start http listener")
+ start_http_server(args.port, args.host)
while True:
- try:
- time.sleep(15)
- except Exception:
- pass
+ logger.debug("Sleeping")
+ time.sleep(15)
for m in mods:
+ logger.debug("Updating values for " + str(m))
m.init_datapoints(prom_data)
m.update_datapoints(prom_data)
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-H", "--host", help="Listen address", action="store", nargs=1, type=str)
+ parser.add_argument("-p", "--port", help="Listen port", action="store", nargs='?', default=8080, type=int)
+ parser.add_argument("-m", "--module", help="Module to load", action="append", required=True, nargs=1, type=str)
+ parser.add_argument("--pid-file", help="Where to write PID file", action="store", default="/var/run/"+sys.argv[0]+".pid", type=str)
+ parser.add_argument("--fork", help="Fork process to background", action="store_true", default=False)
+ parser.add_argument("-l", "--log-file", help="Logfile", action="store", nargs='?', default="/dev/stderr")
+ parser.add_argument("-L", "--log-level", help="Logfile", action="store", nargs='?', default="error", choices=["debug","info","warning","error","critical"], type=str)
+ parser.add_argument("-v", "--version", help="Show version information and exit", action="store_true", default=False)
+ global args
+ args = parser.parse_args()
+
+ if args.log_file.startswith("/dev/std"):
+ logging.basicConfig(filename=args.log_file, filemode="w")
+ else:
+ logging.basicConfig(filename=args.log_file)
+ logger = logging.getLogger()
+
+ if args.log_level == "debug":
+ logger.setLevel(logging.DEBUG)
+ if args.log_level == "info":
+ logger.setLevel(logging.INFO)
+ if args.log_level == "warning":
+ logger.setLevel(logging.WARNING)
+ if args.log_level == "error":
+ logger.setLevel(logging.ERROR)
+ if args.log_level == "critical":
+ logger.setLevel(logging.CRITICAL)
+
+ if args.version:
+ print("{} version {}".format(sys.argv[0], "0.00 beta"))
+ sys.exit(0)
+
+ # logger.debug("DEBUG")
+ # logger.info("INFO")
+ # logger.warning("WARNING")
+ # logger.error("ERROR")
+ # logger.critical("CRITICEL")
+
+ main(args)
+