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 <[email protected]> --- 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 *) _______________________________________________ virt-tools-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-tools-list
