Revision 38e4d732
b/src/Ganeti/Query/Query.hs | ||
---|---|---|
57 | 57 |
|
58 | 58 |
import Control.DeepSeq |
59 | 59 |
import Control.Monad (filterM, foldM) |
60 |
import Control.Monad.IO.Class |
|
60 | 61 |
import Control.Monad.Trans (lift) |
61 | 62 |
import qualified Data.Foldable as Foldable |
62 | 63 |
import Data.List (intercalate) |
... | ... | |
285 | 286 |
-> [FilterField] -- ^ Item |
286 | 287 |
-> Filter FilterField -- ^ Filter |
287 | 288 |
-> IO (ErrorResult QueryResult) -- ^ Result |
288 |
queryJobs cfg live fields qfilter = |
|
289 |
runResultT $ do |
|
289 |
queryJobs cfg live fields qfilter = runResultT $ do |
|
290 | 290 |
rootdir <- lift queueDir |
291 |
let wanted_names = getRequestedJobIDs qfilter |
|
292 |
want_arch = Query.Job.wantArchived fields |
|
291 |
wanted_names <- toErrorStr $ getRequestedJobIDs qfilter |
|
293 | 292 |
rjids <- case wanted_names of |
294 |
Bad msg -> toError . Bad $ GenericError msg |
|
295 |
Ok [] -> if live |
|
296 |
-- we can check the filesystem for actual jobs |
|
297 |
then do |
|
298 |
maybeJobIDs <- |
|
299 |
lift (determineJobDirectories rootdir want_arch |
|
300 |
>>= getJobIDs) |
|
301 |
case maybeJobIDs of |
|
302 |
Bad e -> (toError . Bad) . BlockDeviceError $ |
|
303 |
"Unable to fetch the job list: " ++ show e |
|
304 |
Ok jobIDs -> toError . Ok $ sortJobIDs jobIDs |
|
305 |
-- else we shouldn't look at the filesystem... |
|
306 |
else return [] |
|
307 |
Ok v -> toError $ Ok v |
|
293 |
[] | live -> do -- we can check the filesystem for actual jobs |
|
294 |
let want_arch = Query.Job.wantArchived fields |
|
295 |
jobIDs <- |
|
296 |
withErrorT (BlockDeviceError . |
|
297 |
(++) "Unable to fetch the job list: " . show) $ |
|
298 |
liftIO (determineJobDirectories rootdir want_arch) |
|
299 |
>>= ResultT . getJobIDs |
|
300 |
return $ sortJobIDs jobIDs |
|
301 |
-- else we shouldn't look at the filesystem... |
|
302 |
v -> return v |
|
308 | 303 |
cfilter <- toError $ compileFilter Query.Job.fieldsMap qfilter |
309 | 304 |
let selected = getSelectedFields Query.Job.fieldsMap fields |
310 | 305 |
(fdefs, fgetters, _) = unzip3 selected |
Also available in: Unified diff