[virt-tools-list] [PATCH 1/3] virt-top steam mode prepare
KAMEZAWA Hiroyuki
kamezawa.hiroyu at jp.fujitsu.com
Thu Jan 27 04:25:51 UTC 2011
This patch adds --stream mode for dump all information
to stdout with a manner one-line-per-one-domain.
This mode is useful for checking changes of status in console
with the recent log of past. This patch just adds "mode".
The function for output will be in following patch.
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu at jp.fujitsu.com>
---
virt-top/virt_top.ml | 42 ++++++++++++++++++++++++++++++------------
virt-top/virt_top.mli | 2 +-
virt-top/virt_top_main.ml | 8 ++++----
3 files changed, 35 insertions(+), 17 deletions(-)
Index: virt-top-1.0.5/virt-top/virt_top.ml
===================================================================
--- virt-top-1.0.5.orig/virt-top/virt_top.ml
+++ virt-top-1.0.5/virt-top/virt_top.ml
@@ -130,10 +130,11 @@ let csv_block = ref true
let csv_net = ref true
let init_file = ref DefaultInitFile
let script_mode = ref false
+let stream_mode = ref false
(* Tuple of never-changing data returned by start_up function. *)
type setup =
- Libvirt.ro C.t * bool * bool * bool * C.node_info * string *
+ Libvirt.ro C.t * bool * bool * bool * bool * C.node_info * string *
(int * int * int)
(* Function to read command line arguments and go into curses mode. *)
@@ -200,6 +201,8 @@ let start_up () =
" " ^ s_"Secure (\"kiosk\") mode";
"--script", Arg.Set script_mode,
" " ^ s_"Run from a script (no user interface)";
+ "--stream", Arg.Set stream_mode,
+ " " ^ s_"dump output to stdout (no userinterface)";
"--version", Arg.Unit display_version,
" " ^ s_"Display version number and exit";
] in
@@ -232,6 +235,7 @@ OPTIONS" in
| _, "batch", b -> batch_mode := bool_of_string b
| _, "secure", b -> secure_mode := bool_of_string b
| _, "script", b -> script_mode := bool_of_string b
+ | _, "stream", b -> stream_mode := bool_of_string b
| _, "end-time", t -> set_end_time t
| _, "overwrite-init-file", "false" -> no_init_file ()
| lineno, key, _ ->
@@ -287,7 +291,7 @@ OPTIONS" in
| "" -> (* No debug file specified, send stderr to /dev/null unless
* we're in script mode.
*)
- if not !script_mode then (
+ if not !script_mode && not !stream_mode then (
let fd = Unix.openfile "/dev/null" [Unix.O_WRONLY] 0o644 in
Unix.dup2 fd Unix.stderr;
Unix.close fd
@@ -301,7 +305,7 @@ OPTIONS" in
);
(* Curses voodoo (see ncurses(3)). *)
- if not !script_mode then (
+ if not !script_mode && not !stream_mode then (
ignore (initscr ());
ignore (cbreak ());
ignore (noecho ());
@@ -317,7 +321,7 @@ OPTIONS" in
* main_loop. See virt_top_main.ml.
*)
(conn,
- !batch_mode, !script_mode, !csv_enabled, (* immutable modes *)
+ !batch_mode, !script_mode, !csv_enabled, !stream_mode, (* immutable modes *)
node_info, hostname, libvirt_version (* info that doesn't change *)
)
@@ -436,7 +440,7 @@ let collect, clear_pcpu_display_data =
Hashtbl.clear last_vcpu_info
in
- let collect (conn, _, _, _, node_info, _, _) =
+ let collect (conn, _, _, _, _, node_info, _, _) =
(* Number of physical CPUs (some may be disabled). *)
let nr_pcpus = C.maxcpus_of_node_info node_info in
@@ -746,7 +750,7 @@ let redraw =
let historical_cpu = ref [] in
let historical_cpu_last_time = ref (Unix.gettimeofday ()) in
fun
- (_, _, _, _, node_info, _, _) (* setup *)
+ (_, _, _, _, _, node_info, _, _) (* setup *)
(doms,
time, printable_time,
nr_pcpus, total_cpu, total_cpu_per_pcpu,
@@ -1205,7 +1209,7 @@ let write_csv_header () =
(* Write summary data to CSV file. *)
let append_csv
- (_, _, _, _, node_info, hostname, _) (* setup *)
+ (_, _, _, _, _, node_info, hostname, _) (* setup *)
(doms,
_, printable_time,
nr_pcpus, total_cpu, _,
@@ -1266,21 +1270,35 @@ let append_csv
(!csv_write) (summary_fields @ domain_fields)
+let dump_stdout
+ (_, _, _, _, _, node_info, hostname, _) (* setup *)
+ (doms,
+ _, printable_time,
+ nr_pcpus, total_cpu, _,
+ totals,
+ _) (* state *) =
+
+ printf "Time %s Host %s %s %d/%dCPU %dMHz %LdMB \n%!"
+ printable_time hostname node_info.C.model node_info.C.cpus nr_pcpus
+ node_info.C.mhz (node_info.C.memory /^ 1024L) ;;
+
(* Main loop. *)
-let rec main_loop ((_, batch_mode, script_mode, csv_enabled, _, _, _)
+let rec main_loop ((_, batch_mode, script_mode, csv_enabled, stream_mode, _, _, _)
as setup) =
if csv_enabled then write_csv_header ();
while not !quit do
let state = collect setup in (* Collect stats. *)
- if not script_mode then redraw setup state; (* Redraw display. *)
+ (* Redraw display. *)
+ if not script_mode && not stream_mode then redraw setup state;
if csv_enabled then append_csv setup state; (* Update CSV file. *)
+ if stream_mode then dump_stdout setup state; (* dump to stdout *)
(* Clear up unused virDomainPtr objects. *)
Gc.compact ();
(* Get next key. This does the sleep. *)
- if not batch_mode && not script_mode then
+ if not batch_mode && not script_mode && not stream_mode then
get_key_press setup;
(* Max iterations? *)
@@ -1301,7 +1319,7 @@ let rec main_loop ((_, batch_mode, scrip
(* Batch mode or script mode. We didn't call get_key_press above, so
* we didn't sleep. Sleep now, unless we are about to quit.
*)
- if batch_mode || script_mode then
+ if batch_mode || script_mode || stream_mode then
if not !quit then
usleep !delay;
done
@@ -1549,7 +1567,7 @@ and _write_init_file filename =
refresh ();
sleep 2
-and show_help (_, _, _, _, _, hostname,
+and show_help (_, _, _, _, _, _, hostname,
(libvirt_major, libvirt_minor, libvirt_release)) =
clear ();
Index: virt-top-1.0.5/virt-top/virt_top.mli
===================================================================
--- virt-top-1.0.5.orig/virt-top/virt_top.mli
+++ virt-top-1.0.5/virt-top/virt_top.mli
@@ -30,7 +30,7 @@ val parse_date_time : (string -> float)
type setup =
Libvirt.ro Libvirt.Connect.t (* connection *)
- * bool * bool * bool (* batch, script, csv modes *)
+ * bool * bool * bool * bool (* batch, script, csv, stream mode *)
* Libvirt.Connect.node_info (* node_info *)
* string (* hostname *)
* (int * int * int) (* libvirt version *)
Index: virt-top-1.0.5/virt-top/virt_top_main.ml
===================================================================
--- virt-top-1.0.5.orig/virt-top/virt_top_main.ml
+++ virt-top-1.0.5/virt-top/virt_top_main.ml
@@ -31,21 +31,21 @@ open Virt_top
* the program under --debug ...).
*)
let error =
- let ((_, _, script_mode, _, _, _, _) as setup) = start_up () in
+ let ((_, _, script_mode, stream_mode, _, _, _, _) as setup) = start_up () in
try
Printexc.record_backtrace true;
main_loop setup;
- if not script_mode then endwin ();
+ if not script_mode && not stream_mode then endwin ();
false
with
| Libvirt.Virterror err ->
- if not script_mode then endwin ();
+ if not script_mode && not stream_mode then endwin ();
prerr_endline (Libvirt.Virterror.to_string err);
Printexc.print_backtrace stderr;
true
| exn ->
- if not script_mode then endwin ();
+ if not script_mode && not stream_mode then endwin ();
prerr_endline (s_ "Error" ^ ": " ^ Printexc.to_string exn);
Printexc.print_backtrace stderr;
true
More information about the virt-tools-list
mailing list