Files

ps.src
  • //command: ps
  • computer = get_shell.host_computer
  • string.color = function(hex)
  • return "<color=" + hex + ">" + self + "</color>"
  • end function
  • bar = function(n, bar_length = 35) // percentage number
  • fill_count = ceil(n / bar_length * 10)
  • empty_count = bar_length - fill_count
  • fill_bar = "#"*fill_count
  • empty_bar = "-"*empty_count
  • bar = "<color=#21bcff>"+fill_bar+"</color><color=#032e41>"+empty_bar+"</color>"
  • bar = fill_bar.color("#21bcff") + empty_bar.color("#032e41")
  • return bar
  • end function
  • ps_out = computer.show_procs
  • tasks = {}
  • cpu_load = 0.0
  • mem_load = 0.0
  • // convert ps output to a map
  • counter = 0
  • for line in ps_out.split("
  • ")[1:]
  • // convert ps output to a list
  • tasks = []
  • for line in computer.show_procs.split("
  • ")[1:]
  • line = line.split(" ")
  • task = {"user": line[0], "pid": line[1], "cpu": line[2], "mem": line[3], "command": line[4]}
  • cpu_load = cpu_load + task["cpu"][:-1].val
  • mem_load = mem_load + task["mem"][:-1].val
  • if task["user"] == "root" then
  • task["user"] = "<color=#ff4b4b>"+task["user"]+"</color>"
  • else
  • task["user"] = "<color=#fbfbfb>"+task["user"]+"</color>"
  • task = {}
  • cpu_load = cpu_load + line[2][:-1].val
  • mem_load = mem_load + line[3][:-1].val
  • task["user"] = line[0].color("#fbfbfb")
  • if line[0] == "root" then
  • task["user"] = line[0].color("#ff4b4b")
  • end if
  • task["pid"] = line[1].color("#20ff98")
  • task["cpu"] = line[2].color("#21bcff")
  • task["mem"] = line[3].color("#21bcff")
  • task["command"] = line[4].color("#baff50")
  • task["pid"] = "<color=#20ff98>"+task["pid"]+"</color>"
  • task["cpu"] = "<color=#21bcff>"+task["cpu"]+"</color>"
  • task["mem"] = "<color=#21bcff>"+task["mem"]+"</color>"
  • task["command"] = "<color=#baff50>"+task["command"]+"</color>"
  • tasks[counter] = task
  • counter = counter + 1
  • tasks.push task
  • end for
  • // render
  • print("<color=#fbfbfb>tasks: "+tasks.len+"</color>")
  • print("<color=#fbfbfb>cpu_usage: [</color>"+bar(cpu_load)+"<color=#fbfbfb>]==[ </color><color=#21bcff>"+cpu_load+"%</color> <color=#fbfbfb>]</color>")
  • print("<color=#fbfbfb>mem_usage: [</color>"+bar(mem_load)+"<color=#fbfbfb>]==[ </color><color=#21bcff>"+mem_load+"%</color> <color=#fbfbfb>]</color>")
  • print("")
  • render_bar = function(bar_name, bar_load_value)
  • r = ""
  • r = r + (bar_name + ": [").color("#fbfbfb")
  • r = r + bar(bar_load_value)
  • r = r + "]==[ ".color("#fbfbfb")
  • r = r + (bar_load_value + "%").color("#21bcff")
  • r = r + " ]".color("#fbfbfb")
  • return r
  • end function
  • print render_bar("cpu_usage", cpu_load)
  • print render_bar("mem_usage", mem_load)
  • print ""
  • // print ps with colors
  • pps = []
  • ps = ps_out.split("\n")
  • pps.push("<color=#9d9d9d>USER</color> <color=#9d9d9d>PID</color> <color=#9d9d9d>CPU</color> <color=#9d9d9d>MEM</color> <color=#9d9d9d>COLOR</color>")
  • header = ["USER", "PID", "CPU", "MEM", "COMMAND"]
  • for i in header.indexes
  • header[i] = header[i].color("#9d9d9d")
  • end for
  • pps.push header.join(" ")
  • for task in tasks
  • v = task["value"]
  • line = [v["user"], v["pid"], v["cpu"], v["mem"], v["command"]]
  • pps.push(line.join(" "))
  • pps.push(task.values.join(" "))
  • end for
  • print(format_columns(pps.join("\n")))