Revision 1a82215d Ganeti/HTools/Node.hs
b/Ganeti/HTools/Node.hs | ||
---|---|---|
26 | 26 |
-} |
27 | 27 |
|
28 | 28 |
module Ganeti.HTools.Node |
29 |
( Node(failN1, name, idx, t_mem, n_mem, f_mem, r_mem, t_dsk, f_dsk, |
|
30 |
p_mem, p_dsk, p_rem, |
|
29 |
( Node(failN1, name, idx, t_mem, n_mem, f_mem, r_mem, |
|
30 |
t_dsk, f_dsk, |
|
31 |
t_cpu, u_cpu, |
|
32 |
p_mem, p_dsk, p_rem, p_cpu, |
|
31 | 33 |
plist, slist, offline) |
32 | 34 |
, List |
33 | 35 |
-- * Constructor |
... | ... | |
41 | 43 |
, setFmem |
42 | 44 |
, setPri |
43 | 45 |
, setSec |
46 |
, addCpus |
|
44 | 47 |
-- * Instance (re)location |
45 | 48 |
, removePri |
46 | 49 |
, removeSec |
... | ... | |
72 | 75 |
, x_mem :: Int -- ^ Unaccounted memory (MiB) |
73 | 76 |
, t_dsk :: Double -- ^ Total disk space (MiB) |
74 | 77 |
, f_dsk :: Int -- ^ Free disk space (MiB) |
78 |
, t_cpu :: Double -- ^ Total CPU count |
|
79 |
, u_cpu :: Int -- ^ Used VCPU count |
|
75 | 80 |
, plist :: [T.Idx]-- ^ List of primary instance indices |
76 | 81 |
, slist :: [T.Idx]-- ^ List of secondary instance indices |
77 | 82 |
, idx :: T.Ndx -- ^ Internal index for book-keeping |
... | ... | |
82 | 87 |
, p_mem :: Double -- ^ Percent of free memory |
83 | 88 |
, p_dsk :: Double -- ^ Percent of free disk |
84 | 89 |
, p_rem :: Double -- ^ Percent of reserved memory |
90 |
, p_cpu :: Double -- ^ Ratio of virtual to physical CPUs |
|
85 | 91 |
, offline :: Bool -- ^ Whether the node should not be used |
86 | 92 |
-- for allocations and skipped from |
87 | 93 |
-- score computations |
... | ... | |
109 | 115 |
-- |
110 | 116 |
-- The index and the peers maps are empty, and will be need to be |
111 | 117 |
-- update later via the 'setIdx' and 'buildPeers' functions. |
112 |
create :: String -> Double -> Int -> Int -> Double -> Int -> Bool -> Node |
|
118 |
create :: String -> Double -> Int -> Int -> Double |
|
119 |
-> Int -> Double -> Bool -> Node |
|
113 | 120 |
create name_init mem_t_init mem_n_init mem_f_init |
114 |
dsk_t_init dsk_f_init offline_init = |
|
121 |
dsk_t_init dsk_f_init cpu_t_init offline_init =
|
|
115 | 122 |
Node |
116 | 123 |
{ |
117 | 124 |
name = name_init, |
... | ... | |
120 | 127 |
f_mem = mem_f_init, |
121 | 128 |
t_dsk = dsk_t_init, |
122 | 129 |
f_dsk = dsk_f_init, |
130 |
t_cpu = cpu_t_init, |
|
131 |
u_cpu = 0, |
|
123 | 132 |
plist = [], |
124 | 133 |
slist = [], |
125 | 134 |
failN1 = True, |
... | ... | |
129 | 138 |
p_mem = (fromIntegral mem_f_init) / mem_t_init, |
130 | 139 |
p_dsk = (fromIntegral dsk_f_init) / dsk_t_init, |
131 | 140 |
p_rem = 0, |
141 |
p_cpu = 0, |
|
132 | 142 |
offline = offline_init, |
133 | 143 |
x_mem = 0 |
134 | 144 |
} |
... | ... | |
178 | 188 |
setSec :: Node -> T.Idx -> Node |
179 | 189 |
setSec t idx = t { slist = idx:(slist t) } |
180 | 190 |
|
191 |
-- | Add primary cpus to a node |
|
192 |
addCpus :: Node -> Int -> Node |
|
193 |
addCpus t count = |
|
194 |
let new_count = (u_cpu t) + count |
|
195 |
in t { u_cpu = new_count, p_cpu = (fromIntegral new_count) / (t_cpu t) } |
|
196 |
|
|
181 | 197 |
-- * Update functions |
182 | 198 |
|
183 | 199 |
-- | Sets the free memory. |
... | ... | |
282 | 298 |
sl = slist t |
283 | 299 |
mp = p_mem t |
284 | 300 |
dp = p_dsk t |
301 |
cp = p_cpu t |
|
285 | 302 |
off = offline t |
286 | 303 |
fn = failN1 t |
287 | 304 |
tmem = t_mem t |
... | ... | |
290 | 307 |
fmem = f_mem t |
291 | 308 |
imem = (truncate tmem) - nmem - xmem - fmem |
292 | 309 |
in |
293 |
printf " %c %-*s %5.0f %5d %5d %5d %5d %5d %5.0f %5d %3d %3d %.5f %.5f" |
|
310 |
printf " %c %-*s %5.0f %5d %5d %5d %5d %5d %5.0f %5d %3d %3d\ |
|
311 |
\ %.5f %.5f %.5f" |
|
294 | 312 |
(if off then '-' else if fn then '*' else ' ') |
295 | 313 |
mname (name t) tmem nmem imem xmem fmem (r_mem t) |
296 | 314 |
((t_dsk t) / 1024) ((f_dsk t) `div` 1024) |
297 | 315 |
(length pl) (length sl) |
298 |
mp dp |
|
316 |
mp dp cp |
Also available in: Unified diff