[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] Added host_metrics class.



# HG changeset patch
# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
# Date 1170164806 0
# Node ID 4637dfae085676891e8abb48deedc95fcff85467
# Parent  69c5afd5ab08446f11ede88574a8a8f06ac5b4cb
Added host_metrics class.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
---
 docs/xen-api/xenapi-datamodel.tex            |  257 +++++++++++++++++++++++++++
 tools/libxen/include/xen_host.h              |    9 
 tools/libxen/include/xen_host_metrics.h      |  193 ++++++++++++++++++++
 tools/libxen/include/xen_host_metrics_decl.h |   30 +++
 tools/libxen/src/xen_host.c                  |   24 ++
 tools/libxen/src/xen_host_metrics.c          |  172 ++++++++++++++++++
 tools/python/xen/xend/XendAPI.py             |   93 +++++++--
 tools/python/xen/xend/XendNode.py            |   11 -
 tools/python/xen/xm/messages/en/xen-xm.po    |    5 
 9 files changed, 770 insertions(+), 24 deletions(-)

diff -r 69c5afd5ab08 -r 4637dfae0856 docs/xen-api/xenapi-datamodel.tex
--- a/docs/xen-api/xenapi-datamodel.tex Tue Jan 30 12:43:40 2007 +0000
+++ b/docs/xen-api/xenapi-datamodel.tex Tue Jan 30 13:46:46 2007 +0000
@@ -26,6 +26,7 @@ Name & Description \\
 {\tt task} & A long-running asynchronous task \\
 {\tt VM} & A virtual machine (or 'guest') \\
 {\tt host} & A physical host \\
+{\tt host\_metrics} & The metrics associated with a host \\
 {\tt host\_cpu} & A physical CPU \\
 {\tt network} & A virtual network \\
 {\tt VIF} & A virtual network interface \\
@@ -57,6 +58,7 @@ crashdump.VM & VM.crash\_dumps & one-to-
 crashdump.VM & VM.crash\_dumps & one-to-many\\
 VIF.VM & VM.VIFs & one-to-many\\
 VIF.network & network.VIFs & one-to-many\\
+host.metrics & host\_metrics.host & one-to-one\\
 PIF.metrics & PIF\_metrics.PIF & one-to-one\\
 PIF.host & host.PIFs & one-to-many\\
 PIF.network & network.PIFs & one-to-many\\
@@ -3835,6 +3837,7 @@ Quals & Field & Type & Description \\
 $\mathit{RW}$ &  {\tt crash\_dump\_sr} & SR ref & The SR in which VDIs for 
crash dumps are created \\
 $\mathit{RO}_\mathit{run}$ &  {\tt PBDs} & (PBD ref) Set & physical 
blockdevices \\
 $\mathit{RO}_\mathit{run}$ &  {\tt host\_CPUs} & (host\_cpu ref) Set & The 
physical CPUs on this host \\
+$\mathit{RO}_\mathit{ins}$ &  {\tt metrics} & host\_metrics ref & metrics 
associated with this host. \\
 \hline
 \end{longtable}
 \subsection{Additional RPCs associated with class: host}
@@ -4720,6 +4723,38 @@ value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~get\_metrics}
+
+{\bf Overview:} 
+Get the metrics field of the given host.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (host_metrics ref) get_metrics (session_id s, host ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt host ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+host\_metrics ref
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
@@ -4877,6 +4912,218 @@ Get all the host instances with the give
 
 
 references to objects with match names
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+
+\vspace{1cm}
+\newpage
+\section{Class: host\_metrics}
+\subsection{Fields for class: host\_metrics}
+\begin{longtable}{|lllp{0.38\textwidth}|}
+\hline
+\multicolumn{1}{|l}{Name} & \multicolumn{3}{l|}{\bf host\_metrics} \\
+\multicolumn{1}{|l}{Description} & \multicolumn{3}{l|}{\parbox{11cm}{\em
+The metrics associated with a host.}} \\
+\hline
+Quals & Field & Type & Description \\
+\hline
+$\mathit{RO}_\mathit{run}$ &  {\tt uuid} & string & unique identifier/object 
reference \\
+$\mathit{RO}_\mathit{ins}$ &  {\tt host} & host ref & Host to which these 
metrics apply \\
+$\mathit{RO}_\mathit{run}$ &  {\tt memory/total} & int & Host's total memory 
(bytes) \\
+$\mathit{RO}_\mathit{run}$ &  {\tt memory/free} & int & Host's free memory 
(bytes) \\
+\hline
+\end{longtable}
+\subsection{Additional RPCs associated with class: host\_metrics}
+\subsubsection{RPC name:~get\_uuid}
+
+{\bf Overview:} 
+Get the uuid field of the given host\_metrics.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_uuid (session_id s, host_metrics ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt host\_metrics ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+string
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_host}
+
+{\bf Overview:} 
+Get the host field of the given host\_metrics.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (host ref) get_host (session_id s, host_metrics ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt host\_metrics ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+host ref
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_memory\_total}
+
+{\bf Overview:} 
+Get the memory/total field of the given host\_metrics.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} int get_memory_total (session_id s, host_metrics ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt host\_metrics ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+int
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_memory\_free}
+
+{\bf Overview:} 
+Get the memory/free field of the given host\_metrics.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} int get_memory_free (session_id s, host_metrics ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt host\_metrics ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+int
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_by\_uuid}
+
+{\bf Overview:} 
+Get a reference to the host\_metrics instance with the specified UUID.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (host_metrics ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt string } & uuid & UUID of object to return \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+host\_metrics ref
+}
+
+
+reference to the object
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_record}
+
+{\bf Overview:} 
+Get a record containing the current state of the given host\_metrics.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (host_metrics record) get_record (session_id s, host_metrics 
ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt host\_metrics ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+host\_metrics record
+}
+
+
+all fields from the object
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
@@ -10849,6 +11096,16 @@ The handle parameter echoes the bad valu
 \begin{verbatim}HOST_HANDLE_INVALID(handle)\end{verbatim}
 \begin{center}\rule{10em}{0.1pt}\end{center}
 
+\subsubsection{HOST\_METRICS\_HANDLE\_INVALID}
+
+You gave an invalid host\_metrics handle.  The host\_metrics may have
+recently been deleted.  The handle parameter echoes the bad value given.
+
+\vspace{0.3cm}
+{\bf Signature:}
+\begin{verbatim}HOST_METRICS_HANDLE_INVALID(handle)\end{verbatim}
+\begin{center}\rule{10em}{0.1pt}\end{center}
+
 \subsubsection{INTERNAL\_ERROR}
 
 The server failed to handle your request, due to an internal error.  The
diff -r 69c5afd5ab08 -r 4637dfae0856 tools/libxen/include/xen_host.h
--- a/tools/libxen/include/xen_host.h   Tue Jan 30 12:43:40 2007 +0000
+++ b/tools/libxen/include/xen_host.h   Tue Jan 30 13:46:46 2007 +0000
@@ -22,6 +22,7 @@
 #include "xen_common.h"
 #include "xen_host_cpu_decl.h"
 #include "xen_host_decl.h"
+#include "xen_host_metrics_decl.h"
 #include "xen_pbd_decl.h"
 #include "xen_pif_decl.h"
 #include "xen_sr_decl.h"
@@ -79,6 +80,7 @@ typedef struct xen_host_record
     struct xen_sr_record_opt *crash_dump_sr;
     struct xen_pbd_record_opt_set *pbds;
     struct xen_host_cpu_record_opt_set *host_cpus;
+    struct xen_host_metrics_record_opt *metrics;
 } xen_host_record;
 
 /**
@@ -280,6 +282,13 @@ xen_host_get_host_cpus(xen_session *sess
 
 
 /**
+ * Get the metrics field of the given host.
+ */
+extern bool
+xen_host_get_metrics(xen_session *session, xen_host_metrics *result, xen_host 
host);
+
+
+/**
  * Set the name/label field of the given host.
  */
 extern bool
diff -r 69c5afd5ab08 -r 4637dfae0856 tools/libxen/include/xen_host_metrics.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxen/include/xen_host_metrics.h   Tue Jan 30 13:46:46 2007 +0000
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2006, XenSource Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+#ifndef XEN_HOST_METRICS_H
+#define XEN_HOST_METRICS_H
+
+#include "xen_common.h"
+#include "xen_host_decl.h"
+#include "xen_host_metrics_decl.h"
+
+
+/*
+ * The host_metrics class.
+ * 
+ * The metrics associated with a host.
+ */
+
+
+/**
+ * Free the given xen_host_metrics.  The given handle must have been
+ * allocated by this library.
+ */
+extern void
+xen_host_metrics_free(xen_host_metrics host_metrics);
+
+
+typedef struct xen_host_metrics_set
+{
+    size_t size;
+    xen_host_metrics *contents[];
+} xen_host_metrics_set;
+
+/**
+ * Allocate a xen_host_metrics_set of the given size.
+ */
+extern xen_host_metrics_set *
+xen_host_metrics_set_alloc(size_t size);
+
+/**
+ * Free the given xen_host_metrics_set.  The given set must have been
+ * allocated by this library.
+ */
+extern void
+xen_host_metrics_set_free(xen_host_metrics_set *set);
+
+
+typedef struct xen_host_metrics_record
+{
+    xen_host_metrics handle;
+    char *uuid;
+    struct xen_host_record_opt *host;
+    int64_t memory_total;
+    int64_t memory_free;
+} xen_host_metrics_record;
+
+/**
+ * Allocate a xen_host_metrics_record.
+ */
+extern xen_host_metrics_record *
+xen_host_metrics_record_alloc(void);
+
+/**
+ * Free the given xen_host_metrics_record, and all referenced values. 
+ * The given record must have been allocated by this library.
+ */
+extern void
+xen_host_metrics_record_free(xen_host_metrics_record *record);
+
+
+typedef struct xen_host_metrics_record_opt
+{
+    bool is_record;
+    union
+    {
+        xen_host_metrics handle;
+        xen_host_metrics_record *record;
+    } u;
+} xen_host_metrics_record_opt;
+
+/**
+ * Allocate a xen_host_metrics_record_opt.
+ */
+extern xen_host_metrics_record_opt *
+xen_host_metrics_record_opt_alloc(void);
+
+/**
+ * Free the given xen_host_metrics_record_opt, and all referenced
+ * values.  The given record_opt must have been allocated by this library.
+ */
+extern void
+xen_host_metrics_record_opt_free(xen_host_metrics_record_opt *record_opt);
+
+
+typedef struct xen_host_metrics_record_set
+{
+    size_t size;
+    xen_host_metrics_record *contents[];
+} xen_host_metrics_record_set;
+
+/**
+ * Allocate a xen_host_metrics_record_set of the given size.
+ */
+extern xen_host_metrics_record_set *
+xen_host_metrics_record_set_alloc(size_t size);
+
+/**
+ * Free the given xen_host_metrics_record_set, and all referenced
+ * values.  The given set must have been allocated by this library.
+ */
+extern void
+xen_host_metrics_record_set_free(xen_host_metrics_record_set *set);
+
+
+
+typedef struct xen_host_metrics_record_opt_set
+{
+    size_t size;
+    xen_host_metrics_record_opt *contents[];
+} xen_host_metrics_record_opt_set;
+
+/**
+ * Allocate a xen_host_metrics_record_opt_set of the given size.
+ */
+extern xen_host_metrics_record_opt_set *
+xen_host_metrics_record_opt_set_alloc(size_t size);
+
+/**
+ * Free the given xen_host_metrics_record_opt_set, and all referenced
+ * values.  The given set must have been allocated by this library.
+ */
+extern void
+xen_host_metrics_record_opt_set_free(xen_host_metrics_record_opt_set *set);
+
+
+/**
+ * Get a record containing the current state of the given host_metrics.
+ */
+extern bool
+xen_host_metrics_get_record(xen_session *session, xen_host_metrics_record 
**result, xen_host_metrics host_metrics);
+
+
+/**
+ * Get a reference to the host_metrics instance with the specified
+ * UUID.
+ */
+extern bool
+xen_host_metrics_get_by_uuid(xen_session *session, xen_host_metrics *result, 
char *uuid);
+
+
+/**
+ * Get the uuid field of the given host_metrics.
+ */
+extern bool
+xen_host_metrics_get_uuid(xen_session *session, char **result, 
xen_host_metrics host_metrics);
+
+
+/**
+ * Get the host field of the given host_metrics.
+ */
+extern bool
+xen_host_metrics_get_host(xen_session *session, xen_host *result, 
xen_host_metrics host_metrics);
+
+
+/**
+ * Get the memory/total field of the given host_metrics.
+ */
+extern bool
+xen_host_metrics_get_memory_total(xen_session *session, int64_t *result, 
xen_host_metrics host_metrics);
+
+
+/**
+ * Get the memory/free field of the given host_metrics.
+ */
+extern bool
+xen_host_metrics_get_memory_free(xen_session *session, int64_t *result, 
xen_host_metrics host_metrics);
+
+
+#endif
diff -r 69c5afd5ab08 -r 4637dfae0856 
tools/libxen/include/xen_host_metrics_decl.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxen/include/xen_host_metrics_decl.h      Tue Jan 30 13:46:46 
2007 +0000
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2006, XenSource Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+#ifndef XEN_HOST_METRICS_DECL_H
+#define XEN_HOST_METRICS_DECL_H
+
+typedef void *xen_host_metrics;
+
+struct xen_host_metrics_set;
+struct xen_host_metrics_record;
+struct xen_host_metrics_record_set;
+struct xen_host_metrics_record_opt;
+struct xen_host_metrics_record_opt_set;
+
+#endif
diff -r 69c5afd5ab08 -r 4637dfae0856 tools/libxen/src/xen_host.c
--- a/tools/libxen/src/xen_host.c       Tue Jan 30 12:43:40 2007 +0000
+++ b/tools/libxen/src/xen_host.c       Tue Jan 30 13:46:46 2007 +0000
@@ -23,6 +23,7 @@
 #include "xen_common.h"
 #include "xen_host.h"
 #include "xen_host_cpu.h"
+#include "xen_host_metrics.h"
 #include "xen_internal.h"
 #include "xen_pbd.h"
 #include "xen_pif.h"
@@ -77,7 +78,10 @@ static const struct_member xen_host_reco
           .offset = offsetof(xen_host_record, pbds) },
         { .key = "host_CPUs",
           .type = &abstract_type_ref_set,
-          .offset = offsetof(xen_host_record, host_cpus) }
+          .offset = offsetof(xen_host_record, host_cpus) },
+        { .key = "metrics",
+          .type = &abstract_type_ref,
+          .offset = offsetof(xen_host_record, metrics) }
     };
 
 const abstract_type xen_host_record_abstract_type_ =
@@ -110,6 +114,7 @@ xen_host_record_free(xen_host_record *re
     xen_sr_record_opt_free(record->crash_dump_sr);
     xen_pbd_record_opt_set_free(record->pbds);
     xen_host_cpu_record_opt_set_free(record->host_cpus);
+    xen_host_metrics_record_opt_free(record->metrics);
     free(record);
 }
 
@@ -390,6 +395,23 @@ xen_host_get_host_cpus(xen_session *sess
 
 
 bool
+xen_host_get_metrics(xen_session *session, xen_host_metrics *result, xen_host 
host)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = host }
+        };
+
+    abstract_type result_type = abstract_type_string;
+
+    *result = NULL;
+    XEN_CALL_("host.get_metrics");
+    return session->ok;
+}
+
+
+bool
 xen_host_set_name_label(xen_session *session, xen_host host, char *label)
 {
     abstract_value param_values[] =
diff -r 69c5afd5ab08 -r 4637dfae0856 tools/libxen/src/xen_host_metrics.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxen/src/xen_host_metrics.c       Tue Jan 30 13:46:46 2007 +0000
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2006, XenSource Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "xen_common.h"
+#include "xen_host.h"
+#include "xen_host_metrics.h"
+#include "xen_internal.h"
+
+
+XEN_FREE(xen_host_metrics)
+XEN_SET_ALLOC_FREE(xen_host_metrics)
+XEN_ALLOC(xen_host_metrics_record)
+XEN_SET_ALLOC_FREE(xen_host_metrics_record)
+XEN_ALLOC(xen_host_metrics_record_opt)
+XEN_RECORD_OPT_FREE(xen_host_metrics)
+XEN_SET_ALLOC_FREE(xen_host_metrics_record_opt)
+
+
+static const struct_member xen_host_metrics_record_struct_members[] =
+    {
+        { .key = "uuid",
+          .type = &abstract_type_string,
+          .offset = offsetof(xen_host_metrics_record, uuid) },
+        { .key = "host",
+          .type = &abstract_type_ref,
+          .offset = offsetof(xen_host_metrics_record, host) },
+        { .key = "memory_total",
+          .type = &abstract_type_int,
+          .offset = offsetof(xen_host_metrics_record, memory_total) },
+        { .key = "memory_free",
+          .type = &abstract_type_int,
+          .offset = offsetof(xen_host_metrics_record, memory_free) }
+    };
+
+const abstract_type xen_host_metrics_record_abstract_type_ =
+    {
+       .typename = STRUCT,
+       .struct_size = sizeof(xen_host_metrics_record),
+       .member_count =
+           sizeof(xen_host_metrics_record_struct_members) / 
sizeof(struct_member),
+       .members = xen_host_metrics_record_struct_members
+    };
+
+
+void
+xen_host_metrics_record_free(xen_host_metrics_record *record)
+{
+    if (record == NULL)
+    {
+        return;
+    }
+    free(record->handle);
+    free(record->uuid);
+    xen_host_record_opt_free(record->host);
+    free(record);
+}
+
+
+bool
+xen_host_metrics_get_record(xen_session *session, xen_host_metrics_record 
**result, xen_host_metrics host_metrics)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = host_metrics }
+        };
+
+    abstract_type result_type = xen_host_metrics_record_abstract_type_;
+
+    *result = NULL;
+    XEN_CALL_("host_metrics.get_record");
+
+    if (session->ok)
+    {
+       (*result)->handle = xen_strdup_((*result)->uuid);
+    }
+
+    return session->ok;
+}
+
+
+bool
+xen_host_metrics_get_by_uuid(xen_session *session, xen_host_metrics *result, 
char *uuid)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = uuid }
+        };
+
+    abstract_type result_type = abstract_type_string;
+
+    *result = NULL;
+    XEN_CALL_("host_metrics.get_by_uuid");
+    return session->ok;
+}
+
+
+bool
+xen_host_metrics_get_host(xen_session *session, xen_host *result, 
xen_host_metrics host_metrics)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = host_metrics }
+        };
+
+    abstract_type result_type = abstract_type_string;
+
+    *result = NULL;
+    XEN_CALL_("host_metrics.get_host");
+    return session->ok;
+}
+
+
+bool
+xen_host_metrics_get_memory_total(xen_session *session, int64_t *result, 
xen_host_metrics host_metrics)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = host_metrics }
+        };
+
+    abstract_type result_type = abstract_type_int;
+
+    XEN_CALL_("host_metrics.get_memory_total");
+    return session->ok;
+}
+
+
+bool
+xen_host_metrics_get_memory_free(xen_session *session, int64_t *result, 
xen_host_metrics host_metrics)
+{
+    abstract_value param_values[] =
+        {
+            { .type = &abstract_type_string,
+              .u.string_val = host_metrics }
+        };
+
+    abstract_type result_type = abstract_type_int;
+
+    XEN_CALL_("host_metrics.get_memory_free");
+    return session->ok;
+}
+
+
+bool
+xen_host_metrics_get_uuid(xen_session *session, char **result, 
xen_host_metrics host_metrics)
+{
+    *result = session->ok ? xen_strdup_((char *)host_metrics) : NULL;
+    return session->ok;
+}
diff -r 69c5afd5ab08 -r 4637dfae0856 tools/python/xen/xend/XendAPI.py
--- a/tools/python/xen/xend/XendAPI.py  Tue Jan 30 12:43:40 2007 +0000
+++ b/tools/python/xen/xend/XendAPI.py  Tue Jan 30 13:46:46 2007 +0000
@@ -158,6 +158,17 @@ def valid_host(func):
            _check_ref(XendNode.instance().is_valid_host,
                       'HOST_HANDLE_INVALID', func, *args, **kwargs)
 
+def valid_host_metrics(func):
+    """Decorator to verify if host_metrics_ref is valid before calling
+    method.
+
+    @param func: function with params: (self, session, host_metrics_ref)
+    @rtype: callable object
+    """
+    return lambda *args, **kwargs: \
+           _check_ref(lambda r: r == XendNode.instance().host_metrics_uuid,
+                      'HOST_METRICS_HANDLE_INVALID', func, *args, **kwargs)
+
 def valid_host_cpu(func):
     """Decorator to verify if host_cpu_ref is valid before calling method.
 
@@ -360,21 +371,22 @@ class XendAPI(object):
         """
         global_validators = [session_required, catch_typeerror]
         classes = {
-            'session' : None,
-            'host'    : valid_host,
-            'host_cpu': valid_host_cpu,
-            'network' : valid_network,
-            'VM'      : valid_vm,
-            'VBD'     : valid_vbd,
-            'VIF'     : valid_vif,
-            'VDI'     : valid_vdi,
-            'VTPM'    : valid_vtpm,
-            'console' : valid_console,
-            'SR'      : valid_sr,
-            'PIF'     : valid_pif,
-            'PIF_metrics': valid_pif_metrics,
-            'task'    : valid_task,
-            'debug'   : valid_debug,
+            'session'      : None,
+            'host'         : valid_host,
+            'host_cpu'     : valid_host_cpu,
+            'host_metrics' : valid_host_metrics,
+            'network'      : valid_network,
+            'VM'           : valid_vm,
+            'VBD'          : valid_vbd,
+            'VIF'          : valid_vif,
+            'VDI'          : valid_vdi,
+            'VTPM'         : valid_vtpm,
+            'console'      : valid_console,
+            'SR'           : valid_sr,
+            'PIF'          : valid_pif,
+            'PIF_metrics'  : valid_pif_metrics,
+            'task'         : valid_task,
+            'debug'        : valid_debug,
         }
 
         # Cheat methods
@@ -573,12 +585,13 @@ class XendAPI(object):
     def task_get_by_name_label(self, session, name):
         return xen_api_success(XendTaskManager.get_task_by_name(name))
 
-    # Xen API: Class Host
+    # Xen API: Class host
     # ----------------------------------------------------------------    
 
     host_attr_ro = ['software_version',
                     'resident_VMs',
-                    'host_CPUs']
+                    'host_CPUs',
+                    'metrics']
     
     host_attr_rw = ['name_label',
                     'name_description',
@@ -627,6 +640,8 @@ class XendAPI(object):
         return xen_api_success(XendDomain.instance().get_domain_refs())
     def host_get_host_CPUs(self, session, host_ref):
         return xen_api_success(XendNode.instance().get_host_cpu_refs())
+    def host_get_metrics(self, _, ref):
+        return xen_api_success(XendNode.instance().host_metrics_uuid)
 
     # object methods
     def host_destroy(self, session, host_ref):
@@ -645,6 +660,7 @@ class XendAPI(object):
         if not XendDomain.instance().allow_new_domains():
             return xen_api_error(XEND_ERROR_HOST_RUNNING)
         return xen_api_error(XEND_ERROR_UNSUPPORTED)        
+
     def host_get_record(self, session, host_ref):
         node = XendNode.instance()
         dom = XendDomain.instance()
@@ -653,7 +669,8 @@ class XendAPI(object):
                   'name_description': '',
                   'software_version': node.xen_version(),
                   'resident_VMs': dom.get_domain_refs(),
-                  'host_CPUs': node.get_host_cpu_refs()}
+                  'host_CPUs': node.get_host_cpu_refs(),
+                  'metrics': node.host_metrics_uuid}
         return xen_api_success(record)
 
     # class methods
@@ -667,7 +684,7 @@ class XendAPI(object):
         return xen_api_success([])
     
 
-    # Xen API: Class Host_CPU
+    # Xen API: Class host_CPU
     # ----------------------------------------------------------------
 
     host_cpu_attr_ro = ['host',
@@ -698,6 +715,44 @@ class XendAPI(object):
     # class methods
     def host_cpu_get_all(self, session):
         return xen_api_success(XendNode.instance().get_host_cpu_refs())
+
+
+    # Xen API: Class host_metrics
+    # ----------------------------------------------------------------
+
+    host_metrics_attr_ro = ['memory_total',
+                            'memory_free',
+                            'host']
+    host_metrics_attr_rw = []
+    host_methods = []
+
+    def _host_metrics_get(self, ref, f):
+        return xen_api_success(getattr(node, f)())
+
+    def host_metrics_get_record(self, _, ref):
+        return xen_api_success({
+            'uuid'         : ref,
+            'host'         : XendNode.instance().uuid,
+            'memory_total' : self._host_metrics_get_memory_total(),
+            'memory_free'  : self._host_metrics_get_memory_free(),
+            })
+
+    def host_metrics_get_host(self, _, ref):
+        return xen_api_success(XendNode.instance().uuid)
+
+    def host_metrics_get_memory_total(self, _, ref):
+        return xen_api_success(self._host_metrics_get_memory_total())
+
+    def host_metrics_get_memory_free(self, _, ref):
+        return xen_api_success(self._host_metrics_get_memory_free())
+
+    def _host_metrics_get_memory_total(self):
+        node = XendNode.instance()
+        return node.xc.physinfo()['total_memory'] * 1024
+
+    def _host_metrics_get_memory_free(self):
+        node = XendNode.instance()
+        return node.xc.physinfo()['free_memory'] * 1024
 
 
     # Xen API: Class network
diff -r 69c5afd5ab08 -r 4637dfae0856 tools/python/xen/xend/XendNode.py
--- a/tools/python/xen/xend/XendNode.py Tue Jan 30 12:43:40 2007 +0000
+++ b/tools/python/xen/xend/XendNode.py Tue Jan 30 13:46:46 2007 +0000
@@ -40,10 +40,12 @@ class XendNode:
     def __init__(self):
         """Initalises the state of all host specific objects such as
 
-        * Host
-        * Host_CPU
+        * host
+        * host_CPU
+        * host_metrics
         * PIF
-        * Network
+        * PIF_metrics
+        * network
         * Storage Repository
         """
         
@@ -59,6 +61,8 @@ class XendNode:
             host = saved_host[self.uuid]
             self.name = host.get('name_label', socket.gethostname())
             self.desc = host.get('name_description', '')
+            self.host_metrics_uuid = host.get('metrics_uuid',
+                                              uuid.createString())
             try:
                 self.other_config = eval(host['other_config'])
             except:
@@ -229,6 +233,7 @@ class XendNode:
         # save state
         host_record = {self.uuid: {'name_label':self.name,
                                    'name_description':self.desc,
+                                   'metrics_uuid': self.host_metrics_uuid,
                                    'other_config': repr(self.other_config)}}
         self.state_store.save_state('host',host_record)
         self.state_store.save_state('cpu', self.cpus)
diff -r 69c5afd5ab08 -r 4637dfae0856 tools/python/xen/xm/messages/en/xen-xm.po
--- a/tools/python/xen/xm/messages/en/xen-xm.po Tue Jan 30 12:43:40 2007 +0000
+++ b/tools/python/xen/xm/messages/en/xen-xm.po Tue Jan 30 13:46:46 2007 +0000
@@ -19,7 +19,7 @@ msgid ""
 msgid ""
 msgstr ""
 "Project-Id-Version: Xen-xm 3.0\n"
-"PO-Revision-Date: 2007-01-29 18:50+0000\n"
+"PO-Revision-Date: 2007-01-30 12:49+0000\n"
 "Last-Translator: Ewan Mellor <ewan@xxxxxxxxxxxxx>\n"
 "Language-Team: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>\n"
 "MIME-Version: 1.0\n"
@@ -46,6 +46,9 @@ msgstr "The host_cpu handle %(1)s is inv
 
 msgid "HOST_HANDLE_INVALID"
 msgstr "The host handle %(1)s is invalid."
+
+msgid "HOST_METRICS_HANDLE_INVALID"
+msgstr "The host_metrics handle %(1)s is invalid."
 
 msgid "PIF_HANDLE_INVALID"
 msgstr "The PIF handle %(1)s is invalid."

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.