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