#!/usr/bin/env python3 from nilmdb.client.httpclient import HTTPClient, ClientError, ServerError from nilmdb.utils.printf import * import datetime_tz import nilmrun import argparse import os def main(): """List NilmRun processes""" def_url = os.environ.get("NILMRUN_URL", "http://localhost/nilmrun/") parser = argparse.ArgumentParser( description = 'List NilmRun processes', 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') args = parser.parse_args() client = HTTPClient(baseurl = args.url, verify_ssl = not args.noverify) # Print overall system info info = client.get("process/info") total = info['total'] system = info['system'] printf(" procs: %d nilm, %d other\n", info['total']['procs'], info['system']['procs'] - info['total']['procs']) printf(" cpu: %d%% nilm, %d%% other, %d%% max\n", round(info['total']['cpu_percent']), round(info['system']['cpu_percent'] - info['total']['cpu_percent']), round(info['system']['cpu_max'])) printf(" mem: %d MiB used, %d MiB total, %d%%\n", round(info['system']['mem_used'] / 1048576.0), round(info['system']['mem_total'] / 1048576.0), round(info['system']['mem_used'] * 100.0 / info['system']['mem_total'])) # Print process detail for each managed process fmt = "%-36s %-6s %-15s %-4s %-3s %-5s\n" printf(fmt, "PID", "STATE", "SINCE", "PROC", "CPU", "LOG") if len(info['pids']) == 0: printf("No running processes\n") raise SystemExit(0) for pid in sorted(info['pids'].keys()): pidinfo = client.get("process/status", { "pid": pid }) if pidinfo['alive']: status = "alive" else: if pidinfo['exitcode']: status = "error" else: status = "done" dt = datetime_tz.datetime_tz.fromtimestamp(pidinfo['start_time']) since = dt.strftime("%m/%d-%H:%M:%S") printf(fmt, pid, status, since, info['pids'][pid]['procs'], str(int(round(info['pids'][pid]['cpu_percent']))), len(pidinfo['log'])) if __name__ == "__main__": main()