From 627e6f64b0cd359a8f03d45ab093592f000cf6e6 Mon Sep 17 00:00:00 2001 From: "rjones@thinkpad.home.annexia.org" Date: Tue, 12 Feb 2008 20:22:43 +0000 Subject: [PATCH] Support for calendar >= 2.0 --- MANIFEST | 3 +- configure.ac | 9 +++- virt-top/.depend | 6 ++- virt-top/Makefile.in | 9 +++- ...{virt_top_calendar.ml => virt_top_calendar1.ml} | 2 +- virt-top/virt_top_calendar2.ml | 53 ++++++++++++++++++++++ 6 files changed, 75 insertions(+), 7 deletions(-) mode change 100755 => 100644 virt-top/.depend rename virt-top/{virt_top_calendar.ml => virt_top_calendar1.ml} (96%) create mode 100755 virt-top/virt_top_calendar2.ml diff --git a/MANIFEST b/MANIFEST index 9ca3f56..2f3d8d6 100644 --- a/MANIFEST +++ b/MANIFEST @@ -62,7 +62,8 @@ virt-top/virt-top.pod virt-top/virt-top.txt virt-top/virt_top.ml virt-top/virt_top.mli -virt-top/virt_top_calendar.ml +virt-top/virt_top_calendar1.ml +virt-top/virt_top_calendar2.ml virt-top/virt_top_csv.ml virt-top/virt_top_main.ml virt-top/virt_top_utils.ml diff --git a/configure.ac b/configure.ac index e246934..4a83490 100644 --- a/configure.ac +++ b/configure.ac @@ -166,7 +166,12 @@ if test "x$OCAMLFIND" != "x"; then AC_CHECK_OCAML_PKG(gettext) AC_CHECK_OCAML_PKG(xml-light) AC_CHECK_OCAML_PKG(csv) - AC_CHECK_OCAML_PKG(calendar) + + dnl Need to check which version of calendar is installed. + AC_CHECK_OCAML_MODULE(calendar,pkg_calendar2,CalendarLib.Date,[+calendar]) + if test "x$pkg_calendar2" = "xno"; then + AC_CHECK_OCAML_PKG(calendar) + fi AC_SUBST(pkg_unix) AC_SUBST(pkg_extlib) @@ -176,6 +181,7 @@ if test "x$OCAMLFIND" != "x"; then AC_SUBST(pkg_xml_light) AC_SUBST(pkg_csv) AC_SUBST(pkg_calendar) + AC_SUBST(pkg_calendar2) else dnl Use a basic module test if there is no findlib ... @@ -192,6 +198,7 @@ else AC_CHECK_OCAML_MODULE(gettext,pkg_gettext,Gettext,[+gettext]) dnl XXX AC_CHECK_OCAML_MODULE(xml-light,pkg_xml_light,Xml,[+xml-light]) AC_CHECK_OCAML_MODULE(csv,pkg_csv,Csv,[+csv]) + dnl XXX Version check - see above. AC_CHECK_OCAML_MODULE(calendar,pkg_calendar,Calendar,[+calendar]) fi diff --git a/virt-top/.depend b/virt-top/.depend old mode 100755 new mode 100644 index 97dce08..8a8d99e --- a/virt-top/.depend +++ b/virt-top/.depend @@ -1,7 +1,9 @@ virt_top.cmi: ../libvirt/libvirt.cmi virt_top_utils.cmi: ../libvirt/libvirt.cmi -virt_top_calendar.cmo: virt_top.cmi -virt_top_calendar.cmx: virt_top.cmx +virt_top_calendar1.cmo: virt_top.cmi +virt_top_calendar1.cmx: virt_top.cmx +virt_top_calendar2.cmo: virt_top.cmi +virt_top_calendar2.cmx: virt_top.cmx virt_top_csv.cmo: virt_top.cmi virt_top_csv.cmx: virt_top.cmx virt_top_main.cmo: virt_top.cmi ../libvirt/libvirt.cmi diff --git a/virt-top/Makefile.in b/virt-top/Makefile.in index 1b80472..d31cfc4 100755 --- a/virt-top/Makefile.in +++ b/virt-top/Makefile.in @@ -29,6 +29,7 @@ pkg_curses = @pkg_curses@ pkg_xml_light = @pkg_xml_light@ pkg_csv = @pkg_csv@ pkg_calendar = @pkg_calendar@ +pkg_calendar2 = @pkg_calendar2@ OCAMLCPACKAGES := -package unix,extlib,curses,str @@ -41,8 +42,12 @@ ifeq ($(pkg_csv),yes) OBJS += virt_top_csv.cmo OCAMLCPACKAGES := $(OCAMLCPACKAGES),csv endif -ifeq ($(pkg_calendar),yes) -OBJS += virt_top_calendar.cmo +ifneq ($(pkg_calendar),) +OBJS += virt_top_calendar1.cmo +OCAMLCPACKAGES := $(OCAMLCPACKAGES),calendar +endif +ifneq ($(pkg_calendar2),) +OBJS += virt_top_calendar2.cmo OCAMLCPACKAGES := $(OCAMLCPACKAGES),calendar endif OBJS += virt_top_main.cmo diff --git a/virt-top/virt_top_calendar.ml b/virt-top/virt_top_calendar1.ml similarity index 96% rename from virt-top/virt_top_calendar.ml rename to virt-top/virt_top_calendar1.ml index a99f90f..438a791 100755 --- a/virt-top/virt_top_calendar.ml +++ b/virt-top/virt_top_calendar1.ml @@ -16,7 +16,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - This file contains all code which requires ocaml-calendar. + This file contains all code which requires ocaml-calendar < 2.0 *) open Printf diff --git a/virt-top/virt_top_calendar2.ml b/virt-top/virt_top_calendar2.ml new file mode 100755 index 0000000..dd00c79 --- /dev/null +++ b/virt-top/virt_top_calendar2.ml @@ -0,0 +1,53 @@ +(* 'top'-like tool for libvirt domains. + (C) Copyright 2007 Richard W.M. Jones, Red Hat Inc. + http://libvirt.org/ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + This file contains all code which requires ocaml-calendar >= 2.0 +*) + +open CalendarLib + +open Printf +open ExtString ;; + +Virt_top.parse_date_time := +fun time -> + let cal : Calendar.t = + if String.starts_with time "+" then ( (* +something *) + let period = String.sub time 1 (String.length time - 1) in + let period = + if String.contains period ':' then ( (* +HH:MM:SS *) + let t = Printer.TimePrinter.from_string period in + let hh = Time.hour t and mm = Time.minute t and ss = Time.second t in + Calendar.Period.make 0 0 0 hh mm ss + ) else (* +seconds *) + Calendar.Period.second (int_of_string period) in + (* Add it as an offset from the current time. *) + Calendar.add (Calendar.now ()) period + ) else ( + if String.contains time '-' then (* YYYY-MM-DD HH:MM:SS *) + Printer.CalendarPrinter.from_string time + else ( (* HH:MM:SS *) + let time = Printer.TimePrinter.from_string time in + Calendar.create (Date.today ()) time + ) + ) in + + eprintf "end time: %s\n" (Printer.CalendarPrinter.to_string cal); + + (* Convert to a time_t, adjusting for the current timezone. *) + fst (Unix.mktime (Calendar.to_unixtm cal)) -- 1.8.3.1