Revision d45a824b htools/Ganeti/Query/Job.hs
b/htools/Ganeti/Query/Job.hs | ||
---|---|---|
36 | 36 |
import Ganeti.BasicTypes |
37 | 37 |
import qualified Ganeti.Constants as C |
38 | 38 |
import Ganeti.JQueue |
39 |
import Ganeti.OpCodes (opSummary, metaOpCode) |
|
40 | 39 |
import Ganeti.Path |
41 | 40 |
import Ganeti.Query.Common |
42 | 41 |
import Ganeti.Query.Language |
... | ... | |
61 | 60 |
maybeJob _ (Bad _) _ = rsUnavail |
62 | 61 |
maybeJob f (Ok (v, _)) _ = rsNormal $ f v |
63 | 62 |
|
63 |
-- | Wrapper for optional fields that should become unavailable. |
|
64 |
maybeJobOpt :: (J.JSON a) => |
|
65 |
(QueuedJob -> Maybe a) -> RuntimeData -> JobId -> ResultEntry |
|
66 |
maybeJobOpt _ (Bad _) _ = rsUnavail |
|
67 |
maybeJobOpt f (Ok (v, _)) _ = case f v of |
|
68 |
Nothing -> rsUnavail |
|
69 |
Just w -> rsNormal w |
|
70 |
|
|
64 | 71 |
-- | Simple helper for a job getter. |
65 | 72 |
jobGetter :: (J.JSON a) => (QueuedJob -> a) -> FieldGetter JobId RuntimeData |
66 | 73 |
jobGetter = FieldRuntime . maybeJob |
... | ... | |
69 | 76 |
opsGetter :: (J.JSON a) => (QueuedOpCode -> a) -> FieldGetter JobId RuntimeData |
70 | 77 |
opsGetter f = FieldRuntime $ maybeJob (map f . qjOps) |
71 | 78 |
|
79 |
-- | Simple helper for a per-opcode optional field getter. |
|
80 |
opsOptGetter :: (J.JSON a) => |
|
81 |
(QueuedOpCode -> Maybe a) -> FieldGetter JobId RuntimeData |
|
82 |
opsOptGetter f = |
|
83 |
FieldRuntime $ maybeJob (map (\qo -> case f qo of |
|
84 |
Nothing -> J.JSNull |
|
85 |
Just a -> J.showJSON a) . qjOps) |
|
86 |
|
|
72 | 87 |
-- | Archived field name. |
73 | 88 |
archivedField :: String |
74 | 89 |
archivedField = "archived" |
... | ... | |
101 | 116 |
"List of opcode output logs", opsGetter qoLog, QffNormal) |
102 | 117 |
, (FieldDefinition "opstart" "OpCode_start" QFTOther |
103 | 118 |
"List of opcode start timestamps (before acquiring locks)", |
104 |
opsGetter qoStartTimestamp, QffNormal) |
|
119 |
opsOptGetter qoStartTimestamp, QffNormal)
|
|
105 | 120 |
, (FieldDefinition "opexec" "OpCode_exec" QFTOther |
106 | 121 |
"List of opcode execution start timestamps (after acquiring locks)", |
107 |
opsGetter qoExecTimestamp, QffNormal) |
|
122 |
opsOptGetter qoExecTimestamp, QffNormal)
|
|
108 | 123 |
, (FieldDefinition "opend" "OpCode_end" QFTOther |
109 | 124 |
"List of opcode execution end timestamps", |
110 |
opsGetter qoEndTimestamp, QffNormal) |
|
125 |
opsOptGetter qoEndTimestamp, QffNormal)
|
|
111 | 126 |
, (FieldDefinition "oppriority" "OpCode_prio" QFTOther |
112 | 127 |
"List of opcode priorities", opsGetter qoPriority, QffNormal) |
113 | 128 |
, (FieldDefinition "summary" "Summary" QFTOther |
114 | 129 |
"List of per-opcode summaries", |
115 |
opsGetter (opSummary . metaOpCode . qoInput), QffNormal)
|
|
130 |
opsGetter (extractOpSummary . qoInput), QffNormal)
|
|
116 | 131 |
, (FieldDefinition "received_ts" "Received" QFTOther |
117 | 132 |
(tsDoc "Timestamp of when job was received"), |
118 |
jobGetter qjReceivedTimestamp, QffTimestamp)
|
|
133 |
FieldRuntime (maybeJobOpt qjReceivedTimestamp), QffTimestamp)
|
|
119 | 134 |
, (FieldDefinition "start_ts" "Start" QFTOther |
120 | 135 |
(tsDoc "Timestamp of job start"), |
121 |
jobGetter qjStartTimestamp, QffTimestamp)
|
|
136 |
FieldRuntime (maybeJobOpt qjStartTimestamp), QffTimestamp)
|
|
122 | 137 |
, (FieldDefinition "end_ts" "End" QFTOther |
123 | 138 |
(tsDoc "Timestamp of job end"), |
124 |
jobGetter qjEndTimestamp, QffTimestamp)
|
|
139 |
FieldRuntime (maybeJobOpt qjEndTimestamp), QffTimestamp)
|
|
125 | 140 |
] |
126 | 141 |
|
127 | 142 |
-- | The node fields map. |
Also available in: Unified diff