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