Skip to content

Commit 54aecdb

Browse files
author
inv2004
committed
TUI colors, fixes, group by cmdline
1 parent cae0987 commit 54aecdb

File tree

4 files changed

+43
-22
lines changed

4 files changed

+43
-22
lines changed

src/ttop/format.nim

+6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ proc formatSPair*(b: int): (float, string) =
2020

2121
return (b.float, ".")
2222

23+
proc formatN3*(a: int): string =
24+
if a > 999:
25+
fmt "{(a div 1000):2}k"
26+
else:
27+
fmt "{a:3}"
28+
2329
proc formatS*(a: int): string =
2430
let (n, s) = formatSPair(a)
2531
if a < 1024:

src/ttop/procfs.nim

+15-10
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ type PidInfo* = object
5858
netInDiff*, netOutDiff*: uint
5959
parents*:seq[uint] # generated from ppid, used to build tree
6060
threads*: int
61+
count*: int
6162
docker*: string
6263

6364
type CpuInfo* = object
@@ -550,15 +551,18 @@ proc sort*(info: FullInfoRef, sortOrder = Pid, threads = false, group = false) =
550551
elif sortOrder != Pid:
551552
sort(info.pidsInfo, sortFunc(sortOrder))
552553

554+
proc id(cmd: string): string =
555+
let idx = cmd.find(' ')
556+
if idx >= 0:
557+
cmd[0..<idx]
558+
else:
559+
cmd
560+
553561
proc group*(pidsInfo: OrderedTableRef[uint, PidInfo]): OrderedTableRef[uint, PidInfo] =
554562
var grpInfo = initOrderedTable[string, PidInfo]()
555563
for _, pi in pidsInfo:
556-
let name =
557-
if pi.name.startsWith("Relay("):
558-
"init"
559-
else:
560-
pi.name
561-
var g = grpInfo.getOrDefault(name)
564+
let id = id(pi.cmd)
565+
var g = grpInfo.getOrDefault(id)
562566
if g.state == "":
563567
g.state = pi.state
564568
else:
@@ -571,14 +575,15 @@ proc group*(pidsInfo: OrderedTableRef[uint, PidInfo]): OrderedTableRef[uint, Pid
571575
g.uptime = pi.uptime
572576
else:
573577
g.uptime = min(g.uptime, pi.uptime)
574-
g.name = name
578+
g.name = id
575579
g.mem += pi.mem
576580
g.rss += pi.rss
577581
g.cpu += pi.cpu
578582
g.ioReadDiff += pi.ioReadDiff
579583
g.ioWriteDiff += pi.ioWriteDiff
580-
g.threads.inc
581-
grpInfo[name] = g
584+
g.threads += pi.threads
585+
g.count.inc
586+
grpInfo[id] = g
582587

583588
result = newOrderedTable[uint, PidInfo]()
584589
var i: uint = 0
@@ -591,4 +596,4 @@ when isMainModule:
591596
let pi = group(fi.pidsInfo)
592597
fi.pidsInfo.clear()
593598
for o, pi in pi:
594-
echo o, ": ", pi
599+
echo o, ": ", pi.name

src/ttop/tui.nim

+21-11
Original file line numberDiff line numberDiff line change
@@ -72,19 +72,21 @@ proc header(tui: Tui, tb: var TerminalBuffer, info: FullInfoRef, cnt: int,
7272
blog: string) =
7373
let mi = info.mem
7474
tb.setCursorPos offset, 1
75-
tb.write bgCyan, info.sys.hostname, fgWhite, ": ",
75+
tb.write info.sys.hostname, " ",
7676
info.sys.datetime.format(
7777
"yyyy-MM-dd HH:mm:ss")
78+
tb.write styleDim
7879
if tui.hist > 0:
79-
tb.write fmt" {blog}: {tui.hist} / {cnt} "
80+
tb.write fmt" {blog} {tui.hist}/{cnt} "
8081
elif blog == "":
8182
tb.write fmt" autoupdate log: empty "
8283
else:
83-
tb.write fmt" autoupdate {blog}: {cnt} "
84+
tb.write fmt" autoupdate {blog} {cnt}/{cnt} "
8485
let curX = tb.getCursorXPos()
8586
if tb.width - curX - 2 > 0:
8687
tb.write ' '.repeat(tb.width - curX - 2)
8788
tb.setCursorXPos curX
89+
tb.write resetStyle
8890
# let powerStr = fmt"{float(info.power) / 1000000:5.2f} W"
8991
let procStr = fmt"PROCS: {$info.pidsInfo.len}"
9092
tb.writeR procStr
@@ -278,25 +280,31 @@ proc checkFilter(filter: string, p: PidInfo): bool =
278280
proc table(tui: Tui, tb: var TerminalBuffer, pi: OrderedTableRef[uint, PidInfo],
279281
statsLen: int) =
280282
var y = tb.getCursorYPos() + 1
281-
tb.write styleBright
282-
tb.write(offset, y, bgBlue, fmt"""{"S":1}""")
283+
tb.write styleDim
284+
tb.write(offset, y, fmt"""{"S":1}""")
283285
if not tui.group:
284286
tb.write fmt""" {"PID":>6}"""
285287
tb.write fmt""" {"USER":<8} {"RSS":>10} {"MEM%":>5} {"CPU%":>5} {"r/w IO":>9} {"UP":>8}"""
286-
if tui.threads:
288+
if tui.group:
289+
tb.write fmt""" {"CNT":>3}"""
290+
if tui.threads or tui.group:
287291
tb.write fmt""" {"THR":>3} """
288-
elif tui.group:
289-
tb.write fmt""" {"CNT":>3} """
290292
if tb.width - 63 > 0:
291293
tb.write ' '.repeat(tb.width-63), bgNone
292294
inc y
293-
var i: uint = 0
295+
var i = 0
296+
tb.setStyle {}
294297
tb.write fgColor
298+
if tui.scrollY > 0:
299+
tb.setCursorPos (tb.width div 2)-1, tb.getCursorYPos()+1
300+
tb.write "..."
301+
inc y
302+
dec i
295303
for (_, p) in pi.pairs:
296304
if tui.filter.isSome:
297305
if checkFilter(tui.filter.get, p):
298306
continue
299-
elif i < uint tui.scrollY:
307+
elif i < tui.scrollY:
300308
inc i
301309
continue
302310
tb.setCursorPos offset, y
@@ -325,8 +333,10 @@ proc table(tui: Tui, tb: var TerminalBuffer, pi: OrderedTableRef[uint, PidInfo],
325333

326334
let lvl = p.parents.len
327335
var cmd = ""
336+
if tui.group:
337+
tb.write " ", p.count.formatN3()
328338
if tui.threads or tui.group:
329-
tb.write " ", ($p.threads).cut(3, true, tui.scrollX), " "
339+
tb.write " ", p.threads.formatN3(), " "
330340
if lvl > 0:
331341
tb.write fgCyan, repeat("·", lvl)
332342
else:

ttop.nimble

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Package
22

3-
version = "1.4.2"
3+
version = "1.4.3"
44
author = "inv2004"
55
description = "Monitoring tool with historical snapshots and alerts"
66
license = "MIT"

0 commit comments

Comments
 (0)