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