on master help sign in
Adds back the logs endpoints

TODO: The streaming log endpoint doesn't use the Free monad like all the other endpoints. I'm not yet sure how to accomplish that.

commit363df85f6a14c87009a55f43ba53af8111944e99 authorDeni Bertovic <deni@denibertovic.com> dateTue 23 Feb 2016, 15:05 (11 years ago) parent0943a5a
3 files changed+31−22
Network/Docker.hs+11−15 Network/Docker/Internal.hs+11−6 Network/Docker/Types.hs+9−1
Network/Docker.hs+11−15
@@ -18,6 +18,7 @@ import OpenSSL (withOpenSSL)
1818import OpenSSL.Session (SSLContext, context)
1919import qualified OpenSSL.Session as SSL
2020import Pipes
21+import Pipes
2122import qualified Pipes.ByteString as PB
2223import qualified Pipes.HTTP as PH
2324import Text.Printf (printf)
@@ -129,21 +130,16 @@ deleteContainerWithOpts :: DockerClientOpts -> DeleteOpts -> String -> IO (Statu
129130deleteContainerWithOpts clientOpts deleteOpts cid = (^. responseStatus) <$>
130131 runDocker (deleteContainerM clientOpts (SDeleteContainerEndpoint cid deleteOpts))
131132
132−-- getContainerLogsStream :: DockerClientOpts -> String -> IO ()
133−-- getContainerLogsStream clientOpts containerId = do
134−-- req <- PH.parseUrl (fullUrl clientOpts url)
135−-- let req' = req {PH.method = "GET"}
136−-- PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout
137−-- where url = (printf "/containers/%s/logs?stdout=1&stderr=1&follow=1" containerId)
138−
139−-- getContainerLogs :: DockerClientOpts -> String -> Bool -> IO (L.ByteString)
140−-- getContainerLogs clientOpts cid follow = (^. responseBody) <$> run (getContainerLogsM clientOpts (SContainerLogsEndpoint cid) follow)
141−
133+getContainerLogsWithOpts :: DockerClientOpts -> LogOpts -> String -> IO (L.ByteString)
134+getContainerLogsWithOpts clientOpts l cid = (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid l))
142135
143− -- False -> (^. responseBody) <$> run (getContainerLogsM clientOpts (SContainerLogsEndpoint cid "0"))
144− -- True -> error "dinamo"
145− -- req <- PH.parseUrl (SContainerLogsEndpoint cid "1")
146− -- let req' = req {PH.method = "GET"}
147− -- PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout
136+getContainerLogs :: DockerClientOpts -> String -> IO (L.ByteString)
137+getContainerLogs clientOpts cid = (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid defaultLogOpts))
148138
139+getContainerLogsStream :: DockerClientOpts -> String -> IO ()
140+getContainerLogsStream clientOpts cid = do
141+ req <- PH.parseUrl (fullUrl clientOpts url)
142+ let req' = req {PH.method = "GET"}
143+ PH.withManager PH.defaultManagerSettings $ \m -> PH.withHTTP req' m $ \resp -> runEffect $ PH.responseBody resp >-> PB.stdout
144+ where url = SContainerLogsEndpoint cid defaultLogOpts{follow=True}
149145
Network/Docker/Internal.hs+11−6
@@ -9,13 +9,13 @@ import Data.Aeson (FromJSON, ToJSON, Value, decode,
99 eitherDecode, toJSON)
1010import Data.Aeson.Lens (key, _String)
1111import qualified Data.ByteString.Lazy as L
12−import Network.Docker.Types
1312import Network.Wreq
14−import Pipes
15−import qualified Pipes.ByteString as PB
16−import qualified Pipes.HTTP as PH
13+-- import Pipes
14+-- import qualified Pipes.ByteString as PB
15+-- import qualified Pipes.HTTP as PH
1716import Text.Printf (printf)
1817
18+import Network.Docker.Types
1919
2020emptyPost = "" :: String
2121
@@ -46,8 +46,10 @@ getEndpoint (SKillContainerEndpoint cid) = printf "/containers/%s/kill" cid
4646getEndpoint (SRestartContainerEndpoint cid) = printf "/containers/%s/restart" cid
4747getEndpoint (SPauseContainerEndpoint cid) = printf "/containers/%s/pause" cid
4848getEndpoint (SUnpauseContainerEndpoint cid) = printf "/containers/%s/unpause" cid
49−getEndpoint (SContainerLogsEndpoint cid) = printf "/containers/%s/logs?stdout=1&stderr=1" cid
50−getEndpoint (SDeleteContainerEndpoint cid (DeleteOpts removeVolumes force)) = printf "/containers/%s?v=%s;force=%s" cid (show removeVolumes) (show force)
49+getEndpoint (SContainerLogsEndpoint cid (LogOpts stdout stderr follow )) =
50+ printf "/containers/%s/logs?stdout=%s&stderr=%s&follow=%s" cid (show stdout) (show stderr) (show follow)
51+getEndpoint (SDeleteContainerEndpoint cid (DeleteOpts removeVolumes force)) =
52+ printf "/containers/%s?v=%s;force=%s" cid (show removeVolumes) (show force)
5153
5254fullUrl :: DockerClientOpts -> SEndpoint a -> URL
5355fullUrl clientOpts endpoint = constructUrl (baseUrl clientOpts) (apiVersion clientOpts) (getEndpoint endpoint)
@@ -97,6 +99,9 @@ startContainerM clientOpts e c = _dockerPostQuery clientOpts e c
9799deleteContainerM :: DockerClientOpts -> SEndpoint DeleteContainerEndpoint -> HttpRequestM (SEndpoint DeleteContainerEndpoint)
98100deleteContainerM clientOpts e = _dockerDeleteQuery clientOpts e
99101
102+getContainerLogsM :: DockerClientOpts -> SEndpoint ContainerLogsEndpoint -> HttpRequestM (SEndpoint ContainerLogsEndpoint)
103+getContainerLogsM clientOpts e = _dockerGetQuery clientOpts e
104+
100105-- getContainerLogsM :: DockerClientOpts -> SEndpoint ContainerLogsEndpoint -> Bool -> HttpRequestM (SEndpoint ContainerLogsEndpoint)
101106-- getContainerLogsM clientOpts e f = case f of
102107-- False -> _dockerGetQuery clientOpts e
Network/Docker/Types.hs+9−1
@@ -66,7 +66,7 @@ data SEndpoint (a :: Endpoint) where
6666 SRestartContainerEndpoint :: String -> SEndpoint RestartContainerEndpoint
6767 SPauseContainerEndpoint :: String -> SEndpoint PauseContainerEndpoint
6868 SUnpauseContainerEndpoint :: String -> SEndpoint UnpauseContainerEndpoint
69− SContainerLogsEndpoint :: String -> SEndpoint ContainerLogsEndpoint
69+ SContainerLogsEndpoint :: String -> LogOpts-> SEndpoint ContainerLogsEndpoint
7070 SDeleteContainerEndpoint :: String -> DeleteOpts -> SEndpoint DeleteContainerEndpoint
7171
7272defaultClientOpts :: DockerClientOpts
@@ -128,6 +128,14 @@ data DeleteOpts = DeleteOpts
128128
129129defaultDeleteOpts = DeleteOpts False False
130130
131+data LogOpts = LogOpts
132+ { stdout :: Bool
133+ , stderr :: Bool
134+ , follow :: Bool
135+ } deriving (Eq, Show)
136+
137+
138+defaultLogOpts = LogOpts True True False
131139
132140data DockerContainer = DockerContainer
133141 { _containerId :: ResourceId