From a8b837d5018c488a130fcbea425904817a862210 Mon Sep 17 00:00:00 2001 From: "rjones@localhost" Date: Thu, 30 Aug 2007 17:38:09 +0100 Subject: Initial import from CVS. --- virt-top/virt_top_xml.ml | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 virt-top/virt_top_xml.ml (limited to 'virt-top/virt_top_xml.ml') diff --git a/virt-top/virt_top_xml.ml b/virt-top/virt_top_xml.ml new file mode 100644 index 0000000..7d24b3f --- /dev/null +++ b/virt-top/virt_top_xml.ml @@ -0,0 +1,52 @@ +(* 'top'-like tool for libvirt domains. + * $Id: virt_top_xml.ml,v 1.1 2007/08/23 09:36:04 rjones Exp $ + * + * This file contains all code which requires xml-light. + *) + +open ExtList + +module C = Libvirt.Connect +module D = Libvirt.Domain +module N = Libvirt.Network ;; + +Virt_top.parse_device_xml := +fun id dom -> + try + let xml = D.get_xml_desc dom in + let xml = Xml.parse_string xml in + let devices = + match xml with + | Xml.Element ("domain", _, children) -> + let devices = + List.filter_map ( + function + | Xml.Element ("devices", _, devices) -> Some devices + | _ -> None + ) children in + List.concat devices + | _ -> + failwith "get_xml_desc didn't return " in + let rec target_dev_of = function + | [] -> None + | Xml.Element ("target", attrs, _) :: rest -> + (try Some (List.assoc "dev" attrs) + with Not_found -> target_dev_of rest) + | _ :: rest -> target_dev_of rest + in + let blkdevs = + List.filter_map ( + function + | Xml.Element ("disk", _, children) -> target_dev_of children + | _ -> None + ) devices in + let netifs = + List.filter_map ( + function + | Xml.Element ("interface", _, children) -> target_dev_of children + | _ -> None + ) devices in + blkdevs, netifs + with + | Xml.Error _ + | Libvirt.Virterror _ -> [], [] (* ignore transient errs *) -- cgit