Revision cd67e337 htools/Ganeti/Query/Server.hs

b/htools/Ganeti/Query/Server.hs
51 51
import Ganeti.Luxi
52 52
import qualified Ganeti.Query.Language as Qlang
53 53
import Ganeti.Query.Query
54
import Ganeti.Query.Filter (makeSimpleFilter)
54 55

  
55 56
-- | A type for functions that can return the configuration when
56 57
-- executed.
57 58
type ConfigReader = IO (Result ConfigData)
58 59

  
60
-- | Helper for classic queries.
61
handleClassicQuery :: ConfigData      -- ^ Cluster config
62
                   -> Qlang.ItemType  -- ^ Query type
63
                   -> [String]        -- ^ Requested names (empty means all)
64
                   -> [String]        -- ^ Requested fields
65
                   -> Bool            -- ^ Whether to do sync queries or not
66
                   -> IO (Result JSValue)
67
handleClassicQuery _ _ _ _ True = return . Bad $ "Sync queries are not allowed"
68
handleClassicQuery cfg qkind names fields _ = do
69
  let flt = makeSimpleFilter (nameField qkind) names
70
  qr <- query cfg True (Qlang.Query qkind fields flt)
71
  return $ showJSON <$> (qr >>= queryCompat)
72

  
59 73
-- | Minimal wrapper to handle the missing config case.
60 74
handleCallWrapper :: Result ConfigData -> LuxiOp -> IO (Result JSValue)
61 75
handleCallWrapper (Bad msg) _ =
......
136 150
  let result = queryFields (Qlang.QueryFields qkind qfields)
137 151
  return $ J.showJSON <$> result
138 152

  
153
handleCall cfg (QueryNodes names fields lock) =
154
  handleClassicQuery cfg Qlang.QRNode names fields lock
155

  
156
handleCall cfg (QueryGroups names fields lock) =
157
  handleClassicQuery cfg Qlang.QRGroup names fields lock
158

  
139 159
handleCall _ op =
140 160
  return . Bad $ "Luxi call '" ++ strOfOp op ++ "' not implemented"
141 161

  

Also available in: Unified diff