On Wed, Sep 26, 2012 at 05:39:55PM +0200, Agata Murawska wrote: > On Wed, Sep 26, 2012 at 9:56 AM, Iustin Pop <[email protected]> wrote: > > On Tue, Sep 25, 2012 at 06:43:53PM +0200, Agata Murawska wrote: > >> Added support for NodeInfo RPC call as source of data for node query. > >> > >> Signed-off-by: Agata Murawska <[email protected]> > >> --- > >> htools/Ganeti/Query/Node.hs | 37 +++++++++++++++++++++++++++++++++++-- > >> 1 files changed, 35 insertions(+), 2 deletions(-) > >> > >> diff --git a/htools/Ganeti/Query/Node.hs b/htools/Ganeti/Query/Node.hs > >> index cc88b4f..1857123 100644 > >> --- a/htools/Ganeti/Query/Node.hs > >> +++ b/htools/Ganeti/Query/Node.hs > >> @@ -31,9 +31,11 @@ module Ganeti.Query.Node > >> import Control.Applicative > >> import Data.List > >> import qualified Data.Map as Map > >> +import qualified Text.JSON as J > >> > >> import Ganeti.Config > >> import Ganeti.Objects > >> +import Ganeti.JSON > >> import Ganeti.Rpc > >> import Ganeti.Query.Language > >> import Ganeti.Query.Common > >> @@ -42,7 +44,7 @@ import Ganeti.Query.Types > >> -- | NodeRuntime is the resulting type for NodeInfo call. > >> type NodeRuntime = Either RpcError RpcResultNodeInfo > >> > >> --- | List of node live fields, all ignored for now (no RPC). > >> +-- | List of node live fields. > >> nodeLiveFieldsDefs :: [(FieldName, FieldTitle, FieldType, String, > >> FieldDoc)] > >> nodeLiveFieldsDefs = > >> [ ("bootid", "BootID", QFTText, "bootid", > >> @@ -66,11 +68,42 @@ nodeLiveFieldsDefs = > >> "Total amount of memory of physical machine") > >> ] > >> > >> +-- | Map each name to a function that extracts that value from > >> +-- the RPC result. > >> +nodeLiveFieldExtract :: String -> RpcResultNodeInfo -> J.JSValue > >> +nodeLiveFieldExtract "bootid" res = > >> + J.showJSON $ rpcResNodeInfoBootId res > >> +nodeLiveFieldExtract "cpu_nodes" res = > >> + jsonNullOrFirst (rpcResNodeInfoHvInfo res) hvInfoCpuNodes > >> +nodeLiveFieldExtract "cpu_sockets" res = > >> + jsonNullOrFirst (rpcResNodeInfoHvInfo res) hvInfoCpuSockets > >> +nodeLiveFieldExtract "cpu_total" res = > >> + jsonNullOrFirst (rpcResNodeInfoHvInfo res) hvInfoCpuTotal > >> +nodeLiveFieldExtract "vg_free" res = > >> + jsonNullOrFirst (rpcResNodeInfoVgInfo res) vgInfoVgFree > >> +nodeLiveFieldExtract "vg_size" res = > >> + jsonNullOrFirst (rpcResNodeInfoVgInfo res) vgInfoVgSize > >> +nodeLiveFieldExtract "memory_free" res = > >> + jsonNullOrFirst (rpcResNodeInfoHvInfo res) hvInfoMemoryFree > >> +nodeLiveFieldExtract "memory_dom0" res = > >> + jsonNullOrFirst (rpcResNodeInfoHvInfo res) hvInfoMemoryDom0 > >> +nodeLiveFieldExtract "memory_total" res = > >> + jsonNullOrFirst (rpcResNodeInfoHvInfo res) hvInfoMemoryTotal > >> +nodeLiveFieldExtract _ _ = J.JSNull > >> + > >> +-- | Helper for extracting field from RPC result. > >> +nodeLiveRpcCall :: FieldName -> NodeRuntime -> Node -> ResultEntry > >> +nodeLiveRpcCall fname (Right res) _ = > >> + ResultEntry RSNormal (Just $ nodeLiveFieldExtract fname res) > > > > Please use rsNormal helper here⦠then LGTM. > Ack > > > > > iustin > Interdiff including change of name for jsonNullOrFirst:
LGTM with the missing part :) iustin
