|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #!/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()
|