67 lines
2.6 KiB
Python
67 lines
2.6 KiB
Python
|
#!/usr/bin/python
|
||
|
|
||
|
from nilmdb.client.httpclient import HTTPClient, ClientError, ServerError
|
||
|
from nilmdb.utils.printf import *
|
||
|
from nilmdb.utils 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']))
|
||
|
|
||
|
if len(info['pids']) == 0:
|
||
|
printf("No running processes\n")
|
||
|
raise SystemExit(0)
|
||
|
|
||
|
# Print process detail for each managed process
|
||
|
fmt = "%-36s %-6s %-15s %-4s %-3s %-5s\n"
|
||
|
printf(fmt, "PID", "STATE", "SINCE", "PROC", "CPU", "LOG")
|
||
|
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()
|