[virt-tools-list] [PATCH 1/3] virt-top stream mode: add stream mode

KAMEZAWA Hiroyuki kamezawa.hiroyu at jp.fujitsu.com
Thu Jan 27 03:44:33 UTC 2011


On Wed, 26 Jan 2011 13:44:51 +0900
KAMEZAWA Hiroyuki <kamezawa.hiroyu at jp.fujitsu.com> wrote:

> 
> This patch just adds
> bool variable stream_mode
> disable curses if stream_mode==true
> add stream_mode to the list 'setup' for main_loop.
> 
> The output function dump_stduout is a dummy. filled in the next patch.
> 
> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu at jp.fujitsu.com>

Sorry, it seems the patch I sent is broken...I'll send again today.

Regards.
-Kame

> ---
>  virt-top/virt_top.cmi     |binary
>  virt-top/virt_top.cmi     |binary
>  virt-top/virt_top.cmi     |binary
>  virt-top/virt_top.ml  |   42 ++++++++++++++++++++++++++++++------------
>  virt-top/virt_top.mli |    2 +-
>  2 files changed, 31 insertions(+), 13 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 *)
> 
> 




More information about the virt-tools-list mailing list