#!/usr/bin/python from nilmdb.client.httpclient import HTTPClient, ClientError, ServerError from nilmdb.utils.printf import * import nilmrun import argparse import os import sys def main(): """Kill/remove a process from the NilmRun server""" def_url = os.environ.get("NILMRUN_URL", "http://localhost/nilmrun/") parser = argparse.ArgumentParser( description = 'Kill/remove a process from the NilmRun server', formatter_class = argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("-V", "--version", action="version", version = nilmrun.__version__) group = parser.add_argument_group("Standard options") group.add_argument('-u', '--url', help = 'NilmRun server URL', default = def_url) group.add_argument('-n', '--noverify', action="store_true", help = 'Disable SSL certificate verification') group = parser.add_argument_group("Program") group.add_argument('-q', '--quiet', action="store_true", help = "Don't print out the final log contents") group.add_argument('pid', nargs='+', help="PIDs to kill") args = parser.parse_args() client = HTTPClient(baseurl = args.url, verify_ssl = not args.noverify) # Kill or remove process all_failed = True for pid in args.pid: try: s = client.post("process/remove", { "pid": pid }) if not args.quiet: sys.stdout.write(s['log']) all_failed = False except ClientError as e: if "404" in e.status: fprintf(sys.stderr, "no such pid: %s\n", pid) else: raise # Return error if we failed to remove any of them if all_failed: raise SystemExit(1) if __name__ == "__main__": main()