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