Revision ba00ad4d Ganeti/HTools/Rapi.hs

b/Ganeti/HTools/Rapi.hs
18 18
import Text.Printf (printf)
19 19
import Ganeti.HTools.Utils
20 20

  
21

  
22
-- Some constants
23

  
24
-- | The fixed drbd overhead per disk (only used with 1.2's sdx_size)
25
drbdOverhead = 128
26

  
27
getUrl :: String -> IO (Result String)
21
-- | Read an URL via curl and return the body if successful
22
getUrl :: (Monad m) => String -> IO (m String)
28 23
getUrl url = do
29 24
  (code, body) <- curlGetString url [CurlSSLVerifyPeer False,
30 25
                                     CurlSSLVerifyHost 0]
31 26
  return (case code of
32
            CurlOK -> Ok body
33
            _ -> Bad $ printf "Curl error for '%s', error %s"
27
            CurlOK -> return body
28
            _ -> fail $ printf "Curl error for '%s', error %s"
34 29
                 url (show code))
35 30

  
36 31
getInstances :: String -> IO (Result String)
......
54 49
parseInstance :: JSObject JSValue -> Result String
55 50
parseInstance a =
56 51
    let name = getStringElement "name" a
57
        disk = case getIntElement "disk_usage" a of
58
                 Bad _ -> let log_sz = liftM2 (+)
59
                                       (getIntElement "sda_size" a)
60
                                       (getIntElement "sdb_size" a)
61
                          in liftM2 (+) log_sz (Ok $ drbdOverhead * 2)
62
                 x@(Ok _) -> x
63
        bep = fromObj "beparams" a
52
        disk = getIntElement "disk_usage" a
53
        mem = getObjectElement "beparams" a >>= getIntElement "memory"
64 54
        pnode = getStringElement "pnode" a
65
        snode = (liftM head $ getListElement "snodes" a)
66
                >>= readEitherString
67
        mem = case bep of
68
                Bad _ -> getIntElement "admin_ram" a
69
                Ok o -> getIntElement "memory" o
55
        snode = (liftM head $ getListElement "snodes" a) >>= readEitherString
70 56
        running = getStringElement "status" a
71 57
    in
72 58
      name |+ (show `liftM` mem) |+

Also available in: Unified diff