1 (* Example of using Domain.get_all_domain_stats (virConnectGetAllDomainStats).
2 * Usage: get_all_domain_stats
8 module C = Libvirt.Connect
9 module D = Libvirt.Domain
11 let print_stats stats =
14 fun { D.dom = dom; D.params = params } ->
15 printf "domain %s:\n" (D.get_name dom);
17 fun i (field, value) ->
18 printf "\t%-20s = " field;
20 | D.TypedFieldInt32 i -> printf "%ld" i
21 | D.TypedFieldUInt32 i -> printf "%ld" i
22 | D.TypedFieldInt64 i -> printf "%Ld" i
23 | D.TypedFieldUInt64 i -> printf "%Ld" i
24 | D.TypedFieldFloat f -> printf "%g" f
25 | D.TypedFieldBool b -> printf "%b" b
26 | D.TypedFieldString s -> printf "%S" s);
32 Libvirt.Virterror err ->
33 eprintf "error: %s\n" (Libvirt.Virterror.to_string err)
36 if Array.length Sys.argv <> 1 then (
37 eprintf "error: get_all_domain_stats\n";
41 let conn = C.connect_readonly () in
43 let what_stats = [D.StatsCpuTotal; D.StatsInterface; D.StatsBlock] in
44 let flags = [D.GetAllDomainsStatsActive; D.GetAllDomainsStatsInactive] in
46 let quit = ref false in
49 let stats = D.get_all_domain_stats conn what_stats flags in
51 if stats <> [||] then print_stats stats
53 printf "no guests found\n";
58 (* Run the garbage collector which is a good way to check for
59 * memory corruption errors and reference counting issues in
60 * libvirt. You shouldn't do this in ordinary programs.
64 if not !quit then Unix.sleep 3