Revision 8c4c6a8a Ganeti/HTools/Cluster.hs
b/Ganeti/HTools/Cluster.hs | ||
---|---|---|
90 | 90 |
data Table = Table Node.List Instance.List Score [Placement] |
91 | 91 |
deriving (Show) |
92 | 92 |
|
93 |
data CStats = CStats { cs_fmem :: Int -- ^ Cluster free mem |
|
94 |
, cs_fdsk :: Int -- ^ Cluster free disk |
|
95 |
, cs_amem :: Int -- ^ Cluster allocatable mem |
|
96 |
, cs_adsk :: Int -- ^ Cluster allocatable disk |
|
97 |
, cs_acpu :: Int -- ^ Cluster allocatable cpus |
|
98 |
, cs_mmem :: Int -- ^ Max node allocatable mem |
|
99 |
, cs_mdsk :: Int -- ^ Max node allocatable disk |
|
100 |
, cs_mcpu :: Int -- ^ Max node allocatable cpu |
|
93 |
data CStats = CStats { cs_fmem :: Int -- ^ Cluster free mem |
|
94 |
, cs_fdsk :: Int -- ^ Cluster free disk |
|
95 |
, cs_amem :: Int -- ^ Cluster allocatable mem |
|
96 |
, cs_adsk :: Int -- ^ Cluster allocatable disk |
|
97 |
, cs_acpu :: Int -- ^ Cluster allocatable cpus |
|
98 |
, cs_mmem :: Int -- ^ Max node allocatable mem |
|
99 |
, cs_mdsk :: Int -- ^ Max node allocatable disk |
|
100 |
, cs_mcpu :: Int -- ^ Max node allocatable cpu |
|
101 |
, cs_imem :: Int -- ^ Instance used mem |
|
102 |
, cs_idsk :: Int -- ^ Instance used disk |
|
103 |
, cs_icpu :: Int -- ^ Instance used cpu |
|
104 |
, cs_tmem :: Double -- ^ Cluster total mem |
|
105 |
, cs_tdsk :: Double -- ^ Cluster total disk |
|
106 |
, cs_tcpu :: Double -- ^ Cluster total cpus |
|
107 |
, cs_xmem :: Int -- ^ Unnacounted for mem |
|
108 |
, cs_nmem :: Int -- ^ Node own memory |
|
101 | 109 |
} |
102 | 110 |
|
103 | 111 |
-- * Utility functions |
... | ... | |
132 | 140 |
, cs_mmem = 0 |
133 | 141 |
, cs_mdsk = 0 |
134 | 142 |
, cs_mcpu = 0 |
143 |
, cs_imem = 0 |
|
144 |
, cs_idsk = 0 |
|
145 |
, cs_icpu = 0 |
|
146 |
, cs_tmem = 0 |
|
147 |
, cs_tdsk = 0 |
|
148 |
, cs_tcpu = 0 |
|
149 |
, cs_xmem = 0 |
|
150 |
, cs_nmem = 0 |
|
135 | 151 |
} |
136 | 152 |
|
137 | 153 |
updateCStats :: CStats -> Node.Node -> CStats |
138 | 154 |
updateCStats cs node = |
139 | 155 |
let CStats { cs_fmem = x_fmem, cs_fdsk = x_fdsk, |
140 | 156 |
cs_amem = x_amem, cs_acpu = x_acpu, cs_adsk = x_adsk, |
141 |
cs_mmem = x_mmem, cs_mdsk = x_mdsk, cs_mcpu = x_mcpu } |
|
157 |
cs_mmem = x_mmem, cs_mdsk = x_mdsk, cs_mcpu = x_mcpu, |
|
158 |
cs_imem = x_imem, cs_idsk = x_idsk, cs_icpu = x_icpu, |
|
159 |
cs_tmem = x_tmem, cs_tdsk = x_tdsk, cs_tcpu = x_tcpu, |
|
160 |
cs_xmem = x_xmem, cs_nmem = x_nmem |
|
161 |
} |
|
142 | 162 |
= cs |
143 | 163 |
inc_amem = Node.f_mem node - Node.r_mem node |
144 | 164 |
inc_amem' = if inc_amem > 0 then inc_amem else 0 |
145 | 165 |
inc_adsk = Node.availDisk node |
166 |
inc_imem = truncate (Node.t_mem node) - Node.n_mem node |
|
167 |
- Node.x_mem node - Node.f_mem node |
|
168 |
inc_icpu = Node.u_cpu node |
|
169 |
inc_idsk = truncate (Node.t_dsk node) - Node.f_dsk node |
|
170 |
|
|
146 | 171 |
in CStats { cs_fmem = x_fmem + Node.f_mem node |
147 | 172 |
, cs_fdsk = x_fdsk + Node.f_dsk node |
148 | 173 |
, cs_amem = x_amem + inc_amem' |
... | ... | |
151 | 176 |
, cs_mmem = max x_mmem inc_amem' |
152 | 177 |
, cs_mdsk = max x_mdsk inc_adsk |
153 | 178 |
, cs_mcpu = x_mcpu |
179 |
, cs_imem = x_imem + inc_imem |
|
180 |
, cs_idsk = x_idsk + inc_idsk |
|
181 |
, cs_icpu = x_icpu + inc_icpu |
|
182 |
, cs_tmem = x_tmem + Node.t_mem node |
|
183 |
, cs_tdsk = x_tdsk + Node.t_dsk node |
|
184 |
, cs_tcpu = x_tcpu + Node.t_cpu node |
|
185 |
, cs_xmem = x_xmem + Node.x_mem node |
|
186 |
, cs_nmem = x_nmem + Node.n_mem node |
|
154 | 187 |
} |
155 | 188 |
|
156 | 189 |
-- | Compute the total free disk and memory in the cluster. |
Also available in: Unified diff