2020-08-05 17:01:47 -04:00
|
|
|
#!/usr/bin/env python3
|
2013-08-06 14:38:43 -04:00
|
|
|
|
|
|
|
from nilmdb.client.httpclient import HTTPClient, ClientError, ServerError
|
|
|
|
from nilmdb.utils.printf import *
|
2020-08-05 16:59:56 -04:00
|
|
|
import datetime_tz
|
2013-08-06 14:38:43 -04:00
|
|
|
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',
|
2020-08-05 16:59:56 -04:00
|
|
|
formatter_class = argparse.ArgumentDefaultsHelpFormatter)
|
|
|
|
parser.add_argument("-v", "--version", action="version",
|
|
|
|
version=nilmrun.__version__)
|
2013-08-06 14:38:43 -04:00
|
|
|
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']))
|
|
|
|
|
2013-08-06 14:56:10 -04:00
|
|
|
# Print process detail for each managed process
|
|
|
|
fmt = "%-36s %-6s %-15s %-4s %-3s %-5s\n"
|
|
|
|
printf(fmt, "PID", "STATE", "SINCE", "PROC", "CPU", "LOG")
|
|
|
|
|
2013-08-06 14:38:43 -04:00
|
|
|
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()
|