# derived metrics for processes

# metrics to provide additional process details
proc.psinfo.age = kernel.all.uptime - proc.psinfo.start_time
proc.psinfo.age(oneline) = time in seconds since process was started
proc.psinfo.age(helptext) = '\
time in seconds since process was started, calculated
as kernel.all.uptime minus proc.psinfo.start_time.'

proc.io.total_bytes = instant(proc.io.read_bytes + proc.io.write_bytes - proc.io.cancelled_write_bytes)
proc.io.total_bytes(oneline) = total bytes read and written by process
proc.io.total_bytes(helptext) = '\
total bytes read and written by process, minus cancelled written bytes.'

# metrics to identify resource hogs
proc.hog.cpu = 100 * instant(proc.psinfo.utime + proc.psinfo.stime) / (kernel.all.uptime - proc.psinfo.start_time)
proc.hog.cpu(oneline) = average CPU utilization of process
proc.hog.cpu(helptext) = '\
average CPU utilization of process expressed as
a percentage of time since process start.'

proc.hog.mem = proc.memory.vmrss + proc.memory.vmswap
proc.hog.mem(oneline) = sum of resident and swapped memory used by process
proc.hog.mem(helptext) = '\
sum of resident and swapped memory used by process.'

proc.hog.disk = instant(proc.io.read_bytes + proc.io.write_bytes - proc.io.cancelled_write_bytes) / (kernel.all.uptime - proc.psinfo.start_time)
proc.hog.disk(oneline) = average I/O rate of process
proc.hog.disk(helptext) = '\
average I/O rate of process (reads and writes minus cancelled writes)
since process start.'

proc.hog.net = rescale(instant(bpf.proc.net.tcp.recv.bytes + bpf.proc.net.tcp.send.bytes + bpf.proc.net.udp.recv.bytes + bpf.proc.net.udp.send.bytes), "Kbyte")
proc.hog.net(oneline) = sum of network usage by process
proc.hog.net(helptext) = '\
sum of network usage (TCP/UDP recv/send) by process.'
