3 # Jailhouse, a Linux-based partitioning hypervisor
5 # Copyright (c) Siemens AG, 2014
8 # Jan Kiszka <jan.kiszka@siemens.com>
10 # This work is licensed under the terms of the GNU GPL, version 2. See
11 # the COPYING file in the top-level directory.
13 from __future__ import print_function
19 stats_dir = "/sys/devices/jailhouse/cells/%s/statistics"
22 def main(stdscr, cell, stats_names):
24 curses.use_default_colors()
30 value = dict.fromkeys(stats_names)
31 old_value = dict.fromkeys(stats_names, None)
33 now = datetime.datetime.now()
35 for name in stats_names:
36 f = open((stats_dir + "/%s") % (cell, name), "r")
37 value[name] = int(f.read())
40 if old_value[name] is None:
41 return (-value[name], name)
43 return (old_value[name] - value[name], -value[name], name)
46 stdscr.addstr(0, 0, "Statistics for %s cell" % cell)
47 (height, width) = stdscr.getmaxyx()
48 stdscr.hline(2, 0, " ", width, curses.A_REVERSE)
49 stdscr.addstr(2, 0, "COUNTER", curses.A_REVERSE)
50 stdscr.addstr(2, 30, "%10s" % "SUM", curses.A_REVERSE)
51 stdscr.addstr(2, 40, "%10s" % "PER SEC", curses.A_REVERSE)
53 for name in sorted(stats_names, key=sortkey):
54 stdscr.addstr(line, 0, name)
55 stdscr.addstr(line, 30, "%10u" % value[name])
56 if not old_value[name] is None:
57 dt = (now - last_refresh).total_seconds()
58 delta_per_sec = (value[name] - old_value[name]) / dt
59 stdscr.addstr(line, 40, "%10u" % round(delta_per_sec))
60 old_value[name] = value[name]
62 stdscr.hline(height - 1, 0, " ", width, curses.A_REVERSE)
63 stdscr.addstr(height - 1, 1, "Q - Quit", curses.A_REVERSE)
69 if stdscr.getch() == ord('q'):
72 except KeyboardInterrupt:
79 prog = os.path.basename(sys.argv[0]).replace('-', ' ')
80 print("usage: %s { ID | [--name] NAME }" % prog)
85 use_name = argc >= 2 and sys.argv[1] == "--name"
87 if argc < 2 or argc > 3 or (not use_name and argc > 2):
89 if sys.argv[1] in ("--help", "-h"):
94 cell_name = sys.argv[2]
96 cell_name = sys.argv[1]
98 cell_id = int(sys.argv[1])
99 for cell in os.listdir("/sys/devices/jailhouse/cells"):
100 f = open("/sys/devices/jailhouse/cells/%s/id" % cell, "r")
101 if int(f.read()) == cell_id:
107 stats_names = os.listdir(stats_dir % cell_name)
109 print("reading stats: %s" % e.strerror, file=sys.stderr)
112 curses.wrapper(main, cell_name, stats_names)