[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