on master help sign in
Adds back the logs endpoints
363df85Deni Bertovic
Network/Docker.hs+11−15
@@ -18,6 +18,7 @@ import OpenSSL (withOpenSSL)
18import OpenSSL.Session (SSLContext, context)
18import OpenSSL.Session (SSLContext, context)
19import qualified OpenSSL.Session as SSL
19import qualified OpenSSL.Session as SSL
20import Pipes
20import Pipes
21+import Pipes
21import qualified Pipes.ByteString as PB
22import qualified Pipes.ByteString as PB
22import qualified Pipes.HTTP as PH
23import qualified Pipes.HTTP as PH
23import Text.Printf (printf)
24import Text.Printf (printf)
@@ -129,21 +130,16 @@ deleteContainerWithOpts :: DockerClientOpts -> DeleteOpts -> String -> IO (Statu
129deleteContainerWithOpts clientOpts deleteOpts cid = (^. responseStatus) <$>
130deleteContainerWithOpts clientOpts deleteOpts cid = (^. responseStatus) <$>
130 runDocker (deleteContainerM clientOpts (SDeleteContainerEndpoint cid deleteOpts))
131 runDocker (deleteContainerM clientOpts (SDeleteContainerEndpoint cid deleteOpts))
131
132
132−-- getContainerLogsStream :: DockerClientOpts -> String -> IO ()
133+getContainerLogsWithOpts :: DockerClientOpts -> LogOpts -> String -> IO (L.ByteString)
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)
134+getContainerLogsWithOpts clientOpts l cid = (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid l))
141−
142
135
136+getContainerLogs :: DockerClientOpts -> String -> IO (L.ByteString)
143− -- False -> (^. responseBody) <$> run (getContainerLogsM clientOpts (SContainerLogsEndpoint cid "0"))
137+getContainerLogs clientOpts cid = (^. responseBody) <$> runDocker (getContainerLogsM clientOpts (SContainerLogsEndpoint cid defaultLogOpts))
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
148
138
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}
149
145
Network/Docker/Internal.hs+11−6
@@ -9,13 +9,13 @@ import Data.Aeson (FromJSON, ToJSON, Value, decode,
9 eitherDecode, toJSON)
9 eitherDecode, toJSON)
10import Data.Aeson.Lens (key, _String)
10import Data.Aeson.Lens (key, _String)
11import qualified Data.ByteString.Lazy as L
11import qualified Data.ByteString.Lazy as L
12−import Network.Docker.Types
13import Network.Wreq
12import Network.Wreq
14−import Pipes
13+-- import Pipes
15−import qualified Pipes.ByteString as PB
14+-- import qualified Pipes.ByteString as PB
16−import qualified Pipes.HTTP as PH
15+-- import qualified Pipes.HTTP as PH
17import Text.Printf (printf)
16import Text.Printf (printf)
18
17
18+import Network.Docker.Types
19
19
20emptyPost = "" :: String
20emptyPost = "" :: String
21
21
@@ -46,8 +46,10 @@ getEndpoint (SKillContainerEndpoint cid) = printf "/containers/%s/kill" cid
46getEndpoint (SRestartContainerEndpoint cid) = printf "/containers/%s/restart" cid
46getEndpoint (SRestartContainerEndpoint cid) = printf "/containers/%s/restart" cid
47getEndpoint (SPauseContainerEndpoint cid) = printf "/containers/%s/pause" cid
47getEndpoint (SPauseContainerEndpoint cid) = printf "/containers/%s/pause" cid
48getEndpoint (SUnpauseContainerEndpoint cid) = printf "/containers/%s/unpause" cid
48getEndpoint (SUnpauseContainerEndpoint cid) = printf "/containers/%s/unpause" cid
49−getEndpoint (SContainerLogsEndpoint cid) = printf "/containers/%s/logs?stdout=1&stderr=1" cid
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)
50−getEndpoint (SDeleteContainerEndpoint cid (DeleteOpts removeVolumes force)) = printf "/containers/%s?v=%s;force=%s" cid (show removeVolumes) (show force)
51+getEndpoint (SDeleteContainerEndpoint cid (DeleteOpts removeVolumes force)) =
52+ printf "/containers/%s?v=%s;force=%s" cid (show removeVolumes) (show force)
51
53
52fullUrl :: DockerClientOpts -> SEndpoint a -> URL
54fullUrl :: DockerClientOpts -> SEndpoint a -> URL
53fullUrl clientOpts endpoint = constructUrl (baseUrl clientOpts) (apiVersion clientOpts) (getEndpoint endpoint)
55fullUrl clientOpts endpoint = constructUrl (baseUrl clientOpts) (apiVersion clientOpts) (getEndpoint endpoint)
@@ -97,6 +99,9 @@ startContainerM clientOpts e c = _dockerPostQuery clientOpts e c
97deleteContainerM :: DockerClientOpts -> SEndpoint DeleteContainerEndpoint -> HttpRequestM (SEndpoint DeleteContainerEndpoint)
99deleteContainerM :: DockerClientOpts -> SEndpoint DeleteContainerEndpoint -> HttpRequestM (SEndpoint DeleteContainerEndpoint)
98deleteContainerM clientOpts e = _dockerDeleteQuery clientOpts e
100deleteContainerM clientOpts e = _dockerDeleteQuery clientOpts e
99
101
102+getContainerLogsM :: DockerClientOpts -> SEndpoint ContainerLogsEndpoint -> HttpRequestM (SEndpoint ContainerLogsEndpoint)
103+getContainerLogsM clientOpts e = _dockerGetQuery clientOpts e
104+
100-- getContainerLogsM :: DockerClientOpts -> SEndpoint ContainerLogsEndpoint -> Bool -> HttpRequestM (SEndpoint ContainerLogsEndpoint)
105-- getContainerLogsM :: DockerClientOpts -> SEndpoint ContainerLogsEndpoint -> Bool -> HttpRequestM (SEndpoint ContainerLogsEndpoint)
101-- getContainerLogsM clientOpts e f = case f of
106-- getContainerLogsM clientOpts e f = case f of
102-- False -> _dockerGetQuery clientOpts e
107-- False -> _dockerGetQuery clientOpts e
Network/Docker/Types.hs+9−1
@@ -66,7 +66,7 @@ data SEndpoint (a :: Endpoint) where
66 SRestartContainerEndpoint :: String -> SEndpoint RestartContainerEndpoint
66 SRestartContainerEndpoint :: String -> SEndpoint RestartContainerEndpoint
67 SPauseContainerEndpoint :: String -> SEndpoint PauseContainerEndpoint
67 SPauseContainerEndpoint :: String -> SEndpoint PauseContainerEndpoint
68 SUnpauseContainerEndpoint :: String -> SEndpoint UnpauseContainerEndpoint
68 SUnpauseContainerEndpoint :: String -> SEndpoint UnpauseContainerEndpoint
69− SContainerLogsEndpoint :: String -> SEndpoint ContainerLogsEndpoint
69+ SContainerLogsEndpoint :: String -> LogOpts-> SEndpoint ContainerLogsEndpoint
70 SDeleteContainerEndpoint :: String -> DeleteOpts -> SEndpoint DeleteContainerEndpoint
70 SDeleteContainerEndpoint :: String -> DeleteOpts -> SEndpoint DeleteContainerEndpoint
71
71
72defaultClientOpts :: DockerClientOpts
72defaultClientOpts :: DockerClientOpts
@@ -128,6 +128,14 @@ data DeleteOpts = DeleteOpts
128
128
129defaultDeleteOpts = DeleteOpts False False
129defaultDeleteOpts = DeleteOpts False False
130
130
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
131
139
132data DockerContainer = DockerContainer
140data DockerContainer = DockerContainer
133 { _containerId :: ResourceId
141 { _containerId :: ResourceId