From 36162faf63d491ce6c8db9cd104459cde5925e26 Mon Sep 17 00:00:00 2001 From: Iustin Pop <iustin@google.com> Date: Fri, 22 Feb 2013 14:59:31 +0100 Subject: [PATCH] Rename/make uniform the other query entities Following the new naming style introduced in Exports.hs, this patch renames the other resources to export non-qualified names (fieldMap as opposed to nodeFieldMap), and to use qualified module imports. Also fixes a haddock issue in a docstring. Signed-off-by: Iustin Pop <iustin@google.com> Reviewed-by: Guido Trotter <ultrotter@google.com> --- src/Ganeti/Query/Group.hs | 14 +++++++------- src/Ganeti/Query/Network.hs | 17 +++++++++-------- src/Ganeti/Query/Node.hs | 30 +++++++++++++++--------------- src/Ganeti/Query/Query.hs | 28 ++++++++++++++-------------- test/hs/Test/Ganeti/Query/Query.hs | 22 +++++++++++----------- 5 files changed, 56 insertions(+), 55 deletions(-) diff --git a/src/Ganeti/Query/Group.hs b/src/Ganeti/Query/Group.hs index 7711deab0..53ba1fd8b 100644 --- a/src/Ganeti/Query/Group.hs +++ b/src/Ganeti/Query/Group.hs @@ -4,7 +4,7 @@ {- -Copyright (C) 2012 Google Inc. +Copyright (C) 2012, 2013 Google Inc. 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 @@ -24,8 +24,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -} module Ganeti.Query.Group - ( GroupRuntime(..) - , groupFieldsMap + ( Runtime(..) + , fieldsMap ) where import qualified Data.Map as Map @@ -37,9 +37,9 @@ import Ganeti.Query.Common import Ganeti.Query.Types -- | There is no runtime. -data GroupRuntime = GroupRuntime +data Runtime = Runtime -groupFields :: FieldList NodeGroup GroupRuntime +groupFields :: FieldList NodeGroup Runtime groupFields = [ (FieldDefinition "alloc_policy" "AllocPolicy" QFTText "Allocation policy for group", @@ -86,6 +86,6 @@ groupFields = tagsFields -- | The group fields map. -groupFieldsMap :: FieldMap NodeGroup GroupRuntime -groupFieldsMap = +fieldsMap :: FieldMap NodeGroup Runtime +fieldsMap = Map.fromList $ map (\v@(f, _, _) -> (fdefName f, v)) groupFields diff --git a/src/Ganeti/Query/Network.hs b/src/Ganeti/Query/Network.hs index a9c46c7d5..52c6f8b71 100644 --- a/src/Ganeti/Query/Network.hs +++ b/src/Ganeti/Query/Network.hs @@ -4,7 +4,7 @@ {- -Copyright (C) 2012 Google Inc. +Copyright (C) 2012, 2013 Google Inc. 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 @@ -27,11 +27,11 @@ module Ganeti.Query.Network ( getGroupConnection , getNetworkUuid , instIsConnected - , NetworkRuntime(..) - , networkFieldsMap + , Runtime(..) + , fieldsMap ) where --- FIXME: everything except NetworkRuntime(..) and networkFieldsMap +-- FIXME: everything except Runtime(..) and fieldsMap -- is only exported for testing. import qualified Data.Map as Map @@ -46,9 +46,10 @@ import Ganeti.Query.Common import Ganeti.Query.Types import Ganeti.Types -data NetworkRuntime = NetworkRuntime +-- | There is no actual runtime. +data Runtime = Runtime -networkFields :: FieldList Network NetworkRuntime +networkFields :: FieldList Network Runtime networkFields = [ (FieldDefinition "name" "Name" QFTText "Network name", FieldSimple (rsNormal . networkName), QffNormal) @@ -90,8 +91,8 @@ networkFields = tagsFields -- | The group fields map. -networkFieldsMap :: FieldMap Network NetworkRuntime -networkFieldsMap = +fieldsMap :: FieldMap Network Runtime +fieldsMap = Map.fromList $ map (\v@(f, _, _) -> (fdefName f, v)) networkFields -- TODO: the following fields are not implemented yet: external_reservations diff --git a/src/Ganeti/Query/Node.hs b/src/Ganeti/Query/Node.hs index 53bf6d1b6..558305423 100644 --- a/src/Ganeti/Query/Node.hs +++ b/src/Ganeti/Query/Node.hs @@ -4,7 +4,7 @@ {- -Copyright (C) 2012 Google Inc. +Copyright (C) 2012, 2013 Google Inc. 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 @@ -24,9 +24,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -} module Ganeti.Query.Node - ( NodeRuntime - , nodeFieldsMap - , maybeCollectLiveData + ( Runtime + , fieldsMap + , collectLiveData ) where import Control.Applicative @@ -42,8 +42,8 @@ import Ganeti.Query.Language import Ganeti.Query.Common import Ganeti.Query.Types --- | NodeRuntime is the resulting type for NodeInfo call. -type NodeRuntime = Either RpcError RpcResultNodeInfo +-- | Runtime is the resulting type for NodeInfo call. +type Runtime = Either RpcError RpcResultNodeInfo -- | List of node live fields. nodeLiveFieldsDefs :: [(FieldName, FieldTitle, FieldType, String, FieldDoc)] @@ -93,7 +93,7 @@ nodeLiveFieldExtract "mtotal" res = nodeLiveFieldExtract _ _ = J.JSNull -- | Helper for extracting field from RPC result. -nodeLiveRpcCall :: FieldName -> NodeRuntime -> Node -> ResultEntry +nodeLiveRpcCall :: FieldName -> Runtime -> Node -> ResultEntry nodeLiveRpcCall fname (Right res) _ = case nodeLiveFieldExtract fname res of J.JSNull -> rsNoData @@ -103,7 +103,7 @@ nodeLiveRpcCall _ (Left err) _ = -- | Builder for node live fields. nodeLiveFieldBuilder :: (FieldName, FieldTitle, FieldType, String, FieldDoc) - -> FieldData Node NodeRuntime + -> FieldData Node Runtime nodeLiveFieldBuilder (fname, ftitle, ftype, _, fdoc) = ( FieldDefinition fname ftitle ftype fdoc , FieldRuntime $ nodeLiveRpcCall fname @@ -129,7 +129,7 @@ getNodePower cfg node = else rsNormal (nodePowered node) -- | List of all node fields. -nodeFields :: FieldList Node NodeRuntime +nodeFields :: FieldList Node Runtime nodeFields = [ (FieldDefinition "drained" "Drained" QFTBool "Whether node is drained", FieldSimple (rsNormal . nodeDrained), QffNormal) @@ -208,19 +208,19 @@ nodeFields = tagsFields -- | The node fields map. -nodeFieldsMap :: FieldMap Node NodeRuntime -nodeFieldsMap = +fieldsMap :: FieldMap Node Runtime +fieldsMap = Map.fromList $ map (\v@(f, _, _) -> (fdefName f, v)) nodeFields -- | Collect live data from RPC query if enabled. -- -- FIXME: Check which fields we actually need and possibly send empty --- hvs/vgs if no info from hypervisor/volume group respectively is +-- hvs\/vgs if no info from hypervisor\/volume group respectively is -- required -maybeCollectLiveData:: Bool -> ConfigData -> [Node] -> IO [(Node, NodeRuntime)] -maybeCollectLiveData False _ nodes = +collectLiveData:: Bool -> ConfigData -> [Node] -> IO [(Node, Runtime)] +collectLiveData False _ nodes = return $ zip nodes (repeat $ Left (RpcResultError "Live data disabled")) -maybeCollectLiveData True cfg nodes = do +collectLiveData True cfg nodes = do let vgs = [clusterVolumeGroupName $ configCluster cfg] hvs = [getDefaultHypervisor cfg] step n (bn, gn, em) = diff --git a/src/Ganeti/Query/Query.hs b/src/Ganeti/Query/Query.hs index 3e5d7ec9e..d6836b4e8 100644 --- a/src/Ganeti/Query/Query.hs +++ b/src/Ganeti/Query/Query.hs @@ -70,10 +70,10 @@ import Ganeti.Query.Common import qualified Ganeti.Query.Export as Export import Ganeti.Query.Filter import qualified Ganeti.Query.Job as Query.Job -import Ganeti.Query.Group +import qualified Ganeti.Query.Group as Group import Ganeti.Query.Language -import Ganeti.Query.Network -import Ganeti.Query.Node +import qualified Ganeti.Query.Network as Network +import qualified Ganeti.Query.Node as Node import Ganeti.Query.Types import Ganeti.Path import Ganeti.Types @@ -168,8 +168,8 @@ queryInner :: ConfigData -- ^ The current configuration queryInner cfg live (Query (ItemTypeOpCode QRNode) fields qfilter) wanted = runResultT $ do - cfilter <- resultT $ compileFilter nodeFieldsMap qfilter - let selected = getSelectedFields nodeFieldsMap fields + cfilter <- resultT $ compileFilter Node.fieldsMap qfilter + let selected = getSelectedFields Node.fieldsMap fields (fdefs, fgetters, _) = unzip3 selected live' = live && needsLiveData fgetters nodes <- resultT $ case wanted of @@ -182,15 +182,15 @@ queryInner cfg live (Query (ItemTypeOpCode QRNode) fields qfilter) wanted = nodes -- here we would run the runtime data gathering, then filter again -- the nodes, based on existing runtime data - nruntimes <- lift $ maybeCollectLiveData live' cfg fnodes + nruntimes <- lift $ Node.collectLiveData live' cfg fnodes let fdata = map (\(node, nrt) -> map (execGetter cfg nrt node) fgetters) nruntimes return QueryResult { qresFields = fdefs, qresData = fdata } queryInner cfg _ (Query (ItemTypeOpCode QRGroup) fields qfilter) wanted = return $ do - cfilter <- compileFilter groupFieldsMap qfilter - let selected = getSelectedFields groupFieldsMap fields + cfilter <- compileFilter Group.fieldsMap qfilter + let selected = getSelectedFields Group.fieldsMap fields (fdefs, fgetters, _) = unzip3 selected groups <- case wanted of [] -> Ok . niceSortKey groupName . @@ -199,13 +199,13 @@ queryInner cfg _ (Query (ItemTypeOpCode QRGroup) fields qfilter) wanted = -- there is no live data for groups, so filtering is much simpler fgroups <- filterM (\n -> evaluateFilter cfg Nothing n cfilter) groups let fdata = map (\node -> - map (execGetter cfg GroupRuntime node) fgetters) fgroups + map (execGetter cfg Group.Runtime node) fgetters) fgroups return QueryResult { qresFields = fdefs, qresData = fdata } queryInner cfg _ (Query (ItemTypeOpCode QRNetwork) fields qfilter) wanted = return $ do - cfilter <- compileFilter networkFieldsMap qfilter - let selected = getSelectedFields networkFieldsMap fields + cfilter <- compileFilter Network.fieldsMap qfilter + let selected = getSelectedFields Network.fieldsMap fields (fdefs, fgetters, _) = unzip3 selected networks <- case wanted of [] -> Ok . niceSortKey (fromNonEmpty . networkName) . @@ -213,7 +213,7 @@ queryInner cfg _ (Query (ItemTypeOpCode QRNetwork) fields qfilter) wanted = _ -> mapM (getNetwork cfg) wanted fnetworks <- filterM (\n -> evaluateFilter cfg Nothing n cfilter) networks let fdata = map (\network -> - map (execGetter cfg NetworkRuntime network) fgetters) + map (execGetter cfg Network.Runtime network) fgetters) fnetworks return QueryResult { qresFields = fdefs, qresData = fdata } @@ -308,10 +308,10 @@ fieldsExtractor fieldsMap fields = -- | Query fields call. queryFields :: QueryFields -> ErrorResult QueryFieldsResult queryFields (QueryFields (ItemTypeOpCode QRNode) fields) = - Ok $ fieldsExtractor nodeFieldsMap fields + Ok $ fieldsExtractor Node.fieldsMap fields queryFields (QueryFields (ItemTypeOpCode QRGroup) fields) = - Ok $ fieldsExtractor groupFieldsMap fields + Ok $ fieldsExtractor Group.fieldsMap fields queryFields (QueryFields (ItemTypeLuxi QRJob) fields) = Ok $ fieldsExtractor Query.Job.fieldsMap fields diff --git a/test/hs/Test/Ganeti/Query/Query.hs b/test/hs/Test/Ganeti/Query/Query.hs index 3b9ca53ff..3cf345cd7 100644 --- a/test/hs/Test/Ganeti/Query/Query.hs +++ b/test/hs/Test/Ganeti/Query/Query.hs @@ -7,7 +7,7 @@ {- -Copyright (C) 2009, 2010, 2011, 2012 Google Inc. +Copyright (C) 2009, 2010, 2011, 2012, 2013 Google Inc. 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 @@ -45,9 +45,9 @@ import Test.Ganeti.Objects (genEmptyCluster) import Ganeti.BasicTypes import Ganeti.Errors import Ganeti.Query.Filter -import Ganeti.Query.Group +import qualified Ganeti.Query.Group as Group import Ganeti.Query.Language -import Ganeti.Query.Node +import qualified Ganeti.Query.Node as Node import Ganeti.Query.Query import qualified Ganeti.Query.Job as Job @@ -68,7 +68,7 @@ hasUnknownFields = (QFTUnknown `notElem`) . map fdefKind prop_queryNode_noUnknown :: Property prop_queryNode_noUnknown = forAll (choose (0, maxNodes) >>= genEmptyCluster) $ \cluster -> - forAll (elements (Map.keys nodeFieldsMap)) $ \field -> monadicIO $ do + forAll (elements (Map.keys Node.fieldsMap)) $ \field -> monadicIO $ do QueryResult fdefs fdata <- run (query cluster False (Query (ItemTypeOpCode QRNode) [field] EmptyFilter)) >>= resultProp @@ -88,7 +88,7 @@ prop_queryNode_noUnknown = prop_queryNode_Unknown :: Property prop_queryNode_Unknown = forAll (choose (0, maxNodes) >>= genEmptyCluster) $ \cluster -> - forAll (arbitrary `suchThat` (`notElem` Map.keys nodeFieldsMap)) + forAll (arbitrary `suchThat` (`notElem` Map.keys Node.fieldsMap)) $ \field -> monadicIO $ do QueryResult fdefs fdata <- run (query cluster False (Query (ItemTypeOpCode QRNode) @@ -136,7 +136,7 @@ prop_queryNode_types :: Property prop_queryNode_types = forAll (choose (0, maxNodes)) $ \numnodes -> forAll (genEmptyCluster numnodes) $ \cfg -> - forAll (elements (Map.keys nodeFieldsMap)) $ \field -> monadicIO $ do + forAll (elements (Map.keys Node.fieldsMap)) $ \field -> monadicIO $ do QueryResult fdefs fdata <- run (query cfg False (Query (ItemTypeOpCode QRNode) [field] EmptyFilter)) >>= resultProp @@ -160,7 +160,7 @@ case_queryNode_allfields = do Ok (QueryFieldsResult v) -> return v let field_sort = compare `on` fdefName assertEqual "Mismatch in all fields list" - (sortBy field_sort . map (\(f, _, _) -> f) $ Map.elems nodeFieldsMap) + (sortBy field_sort . map (\(f, _, _) -> f) $ Map.elems Node.fieldsMap) (sortBy field_sort fdefs) -- ** Group queries @@ -168,7 +168,7 @@ case_queryNode_allfields = do prop_queryGroup_noUnknown :: Property prop_queryGroup_noUnknown = forAll (choose (0, maxNodes) >>= genEmptyCluster) $ \cluster -> - forAll (elements (Map.keys groupFieldsMap)) $ \field -> monadicIO $ do + forAll (elements (Map.keys Group.fieldsMap)) $ \field -> monadicIO $ do QueryResult fdefs fdata <- run (query cluster False (Query (ItemTypeOpCode QRGroup) [field] EmptyFilter)) >>= @@ -188,7 +188,7 @@ prop_queryGroup_noUnknown = prop_queryGroup_Unknown :: Property prop_queryGroup_Unknown = forAll (choose (0, maxNodes) >>= genEmptyCluster) $ \cluster -> - forAll (arbitrary `suchThat` (`notElem` Map.keys groupFieldsMap)) + forAll (arbitrary `suchThat` (`notElem` Map.keys Group.fieldsMap)) $ \field -> monadicIO $ do QueryResult fdefs fdata <- run (query cluster False (Query (ItemTypeOpCode QRGroup) @@ -212,7 +212,7 @@ prop_queryGroup_types :: Property prop_queryGroup_types = forAll (choose (0, maxNodes)) $ \numnodes -> forAll (genEmptyCluster numnodes) $ \cfg -> - forAll (elements (Map.keys groupFieldsMap)) $ \field -> monadicIO $ do + forAll (elements (Map.keys Group.fieldsMap)) $ \field -> monadicIO $ do QueryResult fdefs fdata <- run (query cfg False (Query (ItemTypeOpCode QRGroup) [field] EmptyFilter)) >>= resultProp @@ -232,7 +232,7 @@ case_queryGroup_allfields = do Ok (QueryFieldsResult v) -> return v let field_sort = compare `on` fdefName assertEqual "Mismatch in all fields list" - (sortBy field_sort . map (\(f, _, _) -> f) $ Map.elems groupFieldsMap) + (sortBy field_sort . map (\(f, _, _) -> f) $ Map.elems Group.fieldsMap) (sortBy field_sort fdefs) -- ** Job queries -- GitLab