Revision 423b2dd5
b/src/Ganeti/Monitoring/Server.hs | ||
---|---|---|
31 | 31 |
, prepMain |
32 | 32 |
) where |
33 | 33 |
|
34 |
import Control.Applicative |
|
35 |
import Control.Monad |
|
34 | 36 |
import Snap.Core |
35 | 37 |
import Snap.Http.Server |
36 |
import Data.Text
|
|
38 |
import Data.ByteString.Char8
|
|
37 | 39 |
import qualified Text.JSON as J |
38 | 40 |
|
39 | 41 |
import Ganeti.Daemon |
... | ... | |
79 | 81 |
|
80 | 82 |
-- | Reply to the supported API version numbers query. |
81 | 83 |
versionQ :: Snap () |
82 |
versionQ = writeText . pack $ J.encode [latestAPIVersion] |
|
84 |
versionQ = writeBS . pack $ J.encode [latestAPIVersion] |
|
85 |
|
|
86 |
-- | Version 1 of the monitoring HTTP API. |
|
87 |
version1Api :: Snap () |
|
88 |
version1Api = |
|
89 |
let returnNull = writeBS . pack $ J.encode J.JSNull :: Snap () |
|
90 |
in ifTop returnNull <|> |
|
91 |
route |
|
92 |
[ ("list", listHandler) |
|
93 |
, ("report", reportHandler) |
|
94 |
] |
|
95 |
|
|
96 |
-- | Handler for returning lists. |
|
97 |
listHandler :: Snap () |
|
98 |
listHandler = |
|
99 |
dir "collectors" $ writeText "TODO: return the list of collectors" |
|
100 |
|
|
101 |
-- | Handler for returning data collector reports. |
|
102 |
reportHandler :: Snap () |
|
103 |
reportHandler = |
|
104 |
route |
|
105 |
[ ("all", allReports) |
|
106 |
, (":category/:collector", oneReport) |
|
107 |
] |
|
108 |
|
|
109 |
-- | Return the report of all the available collectors |
|
110 |
allReports :: Snap () |
|
111 |
allReports = writeText "TODO: return the reports of all the collectors" |
|
112 |
|
|
113 |
-- | Return the report of one collector |
|
114 |
oneReport :: Snap () |
|
115 |
oneReport = do |
|
116 |
category <- fmap (maybe mzero unpack) $ getParam "category" |
|
117 |
collector <- fmap (maybe mzero unpack) $ getParam "collector" |
|
118 |
writeBS . pack $ |
|
119 |
"TODO: return the report for collector " ++ category |
|
120 |
++ "/" ++ collector |
|
83 | 121 |
|
84 | 122 |
-- | The function implementing the HTTP API of the monitoring agent. |
85 | 123 |
-- TODO: Currently it only replies to the API version query: implement all the |
86 | 124 |
-- missing features. |
87 | 125 |
monitoringApi :: Snap () |
88 | 126 |
monitoringApi = |
89 |
ifTop versionQ |
|
127 |
ifTop versionQ <|> |
|
128 |
dir "1" version1Api |
|
90 | 129 |
|
91 | 130 |
-- | Main function. |
92 | 131 |
main :: MainFn CheckResult PrepResult |
93 | 132 |
main _ _ httpConf = |
94 |
httpServe httpConf monitoringApi |
|
133 |
httpServe httpConf $ method GET monitoringApi |
Also available in: Unified diff