Revision f6b9c6e5 src/Ganeti/HTools/Program/Hcheck.hs

b/src/Ganeti/HTools/Program/Hcheck.hs
87 87
           | Rebalanced
88 88

  
89 89
-- | Level of presented statistics.
90
data Level = GroupLvl
91
           | ClusterLvl
90
data Level = GroupLvl String -- ^ Group level, with name
91
           | ClusterLvl      -- ^ Cluster level
92 92

  
93 93
-- | A type alias for a group index and node\/instance lists.
94 94
type GroupInfo = (Gdx, (Node.List, Instance.List))
......
124 124

  
125 125
-- | Level-specific prefix for machine readable version.
126 126
levelPrefix :: Level -> String
127
levelPrefix GroupLvl = "GROUP"
128
levelPrefix ClusterLvl = "CLUSTER"
127
levelPrefix GroupLvl {} = "GROUP"
128
levelPrefix ClusterLvl  = "CLUSTER"
129 129

  
130 130
-- | Machine-readable keys to show depending on given level.
131 131
keysData :: Level -> [String]
132
keysData GroupLvl = map fst groupData
133
keysData ClusterLvl = map fst clusterData
132
keysData GroupLvl {} = map fst groupData
133
keysData ClusterLvl  = map fst clusterData
134 134

  
135 135
-- | Description of phases for human readable version.
136 136
phaseDescr :: Phase -> String
......
139 139

  
140 140
-- | Description to show depending on given level.
141 141
descrData :: Level -> [String]
142
descrData GroupLvl = map snd groupData
143
descrData ClusterLvl = map snd clusterData
142
descrData GroupLvl {} = map snd groupData
143
descrData ClusterLvl  = map snd clusterData
144 144

  
145 145
-- | Human readable prefix for statistics.
146
phaseLevelDescr :: Phase -> Level -> Maybe String -> String
147
phaseLevelDescr phase GroupLvl (Just name) =
146
phaseLevelDescr :: Phase -> Level -> String
147
phaseLevelDescr phase (GroupLvl name) =
148 148
    printf "Statistics for group %s %s\n" name $ phaseDescr phase
149
phaseLevelDescr phase GroupLvl Nothing =
150
    printf "Statistics for group %s\n" $ phaseDescr phase
151
phaseLevelDescr phase ClusterLvl _ =
149
phaseLevelDescr phase ClusterLvl =
152 150
    printf "Cluster statistics %s\n" $ phaseDescr phase
153 151

  
154 152
-- | Format a list of key, value as a shell fragment.
......
173 171
    printKeysHTC printpairs
174 172

  
175 173
-- | Prepare a single key given a certain level and phase of simulation.
176
prepareKey :: Level -> Phase -> Maybe String -> String -> String
177
prepareKey level phase Nothing suffix =
174
prepareKey :: Level -> Phase -> String -> String
175
prepareKey level@ClusterLvl phase suffix =
178 176
  printf "%s_%s_%s" (phasePrefix phase) (levelPrefix level) suffix
179
prepareKey level phase (Just idx) suffix =
177
prepareKey level@(GroupLvl idx) phase suffix =
180 178
  printf "%s_%s_%s_%s" (phasePrefix phase) (levelPrefix level) idx suffix
181 179

  
182 180
-- | Print all the statistics for given level and phase.
......
185 183
           -> Level          -- ^ Level on which we are printing
186 184
           -> Phase          -- ^ Current phase of simulation
187 185
           -> [String]       -- ^ Values to print
188
           -> Maybe String   -- ^ Additional data for groups
189 186
           -> IO ()
190
printStats _ True level phase values gidx = do
191
  let keys = map (prepareKey level phase gidx) (keysData level)
187
printStats _ True level phase values = do
188
  let keys = map (prepareKey level phase) (keysData level)
192 189
  printKeysHTC $ zip keys values
193 190

  
194
printStats verbose False level phase values name = do
195
  let prefix = phaseLevelDescr phase level name
191
printStats verbose False level phase values = do
192
  let prefix = phaseLevelDescr phase level
196 193
      descr = descrData level
197 194
  unless (verbose == 0) $ do
198 195
    putStrLn ""
......
219 216
printGroupStats verbose machineread phase ((grp, score), stats) = do
220 217
  let values = prepareGroupValues stats score
221 218
      extradata = extractGroupData machineread grp
222
  printStats verbose machineread GroupLvl phase values (Just extradata)
219
  printStats verbose machineread (GroupLvl extradata) phase values
223 220

  
224 221
-- | Print all the statistics on a cluster (global) level.
225 222
printClusterStats :: Int -> Bool -> Phase -> [Int] -> Bool -> IO ()
226 223
printClusterStats verbose machineread phase stats needhbal = do
227 224
  let values = prepareClusterValues machineread stats [needhbal]
228
  printStats verbose machineread ClusterLvl phase values Nothing
225
  printStats verbose machineread ClusterLvl phase values
229 226

  
230 227
-- | Check if any of cluster metrics is non-zero.
231 228
clusterNeedsRebalance :: [Int] -> Bool

Also available in: Unified diff