@@ -6,12 +6,13 @@ module DMC.Lib
66 ( runDMC
77 ) where
88
9−import Prelude hiding (unlines)
9+import Prelude hiding (unlines, unwords)
1010
11+import Chronos
1112import Control.Monad
1213import Data.Maybe (fromMaybe)
1314import Data.Proxy
14−import Data.Text (pack, unlines, unpack)
15+import Data.Text (pack, unlines, unpack, unwords)
1516import Options.Generic
1617import Network.HTTP.Client (defaultManagerSettings, managerResponseTimeout, newManager, responseTimeoutMicro)
1718import Network.URI
@@ -22,7 +23,18 @@ import System.IO
2223import System.IO.Temp
2324import System.Process.Typed
2425
25−import API.Lib (Deployment (Deployment), DeploymentAPI)
26+import API.Lib ( Deployment (Deployment)
27+ , DeploymentAPI
28+ , DeploymentInfo (DeploymentInfo)
29+ , deployment
30+ , logs
31+ , DeploymentLog (DeploymentLog)
32+ , action
33+ , deploymentTag
34+ , deploymentEnvs
35+ , exitCode
36+ , createdAt
37+ )
2638
2739data Args
2840 = Create { name :: Text, tag :: Text, envs :: [Text] }
@@ -30,6 +42,7 @@ data Args
3042 | Edit { name :: Text }
3143 | Destroy { name :: Text }
3244 | Update { name :: Text, tag :: Text }
45+ | Info { name :: Text }
3346 deriving (Generic, Show)
3447
3548instance ParseRecord Args where
@@ -72,7 +85,7 @@ handleCommand clientEnv Edit {name} = do
7285 Just ed -> do
7386 res <- flip runClientM clientEnv $ get name
7487 case res of
75− Right ((Deployment _ t e) : _) -> editEnvs ed e >>= sendUpdate t
88+ Right (Deployment _ t e : _) -> editEnvs ed e >>= sendUpdate t
7689 Right [] -> print $ "deployment " ++ unpack name ++ " not found"
7790 Left err -> print $ "request failed, reason: " ++ show err
7891 Nothing -> print "environment variable $EDITOR not found"
@@ -92,10 +105,17 @@ handleCommand clientEnv Update {name, tag}
92105 = handleResponse =<< runClientM (update name $ Deployment name tag envs) clientEnv
93106 where envs = ["UNUSED_KEY=UNUSED_VALUE"]
94107
108+handleCommand clientEnv Info {name} = do
109+ res <- runClientM (info name) clientEnv
110+ case res of
111+ Right (i : _) -> printInfo i
112+ Right [] -> print $ "deployment " ++ unpack name ++ " not found"
113+ Left err -> print $ "request failed, reason: " ++ show err
114+
95115deploymentAPI :: Proxy DeploymentAPI
96116deploymentAPI = Proxy
97117
98−(list :<|> create :<|> get :<|> edit :<|> destroy :<|> update) :<|> ping = client deploymentAPI
118+(list :<|> create :<|> get :<|> edit :<|> destroy :<|> update :<|> info) :<|> ping = client deploymentAPI
99119
100120list :: ClientM [Text]
101121
@@ -109,7 +129,27 @@ destroy :: Text -> ClientM Text
109129
110130update :: Text -> Deployment -> ClientM Text
111131
132+info :: Text -> ClientM [DeploymentInfo]
133+
112134ping :: ClientM Text
113135
114136handleResponse (Right result) = putStrLn (unpack result) >> putStrLn "done"
115137handleResponse (Left err) = putStrLn $ "command failed, reason: " ++ show err
138+
139+printInfo DeploymentInfo {deployment, logs} = do
140+ let Deployment n t e = deployment
141+ putStrLn "Current settings:"
142+ putStrLn $ "tag: " ++ unpack t
143+ putStrLn $ "envs: " ++ unpack (unwords e)
144+ putStrLn $ "URL: " ++ unpack n ++ ".kube.thebestagent.pro"
145+ putStrLn ""
146+ putStrLn "Last logs:"
147+ mapM_ ppDeploymentLog $ reverse logs
148+
149+ppDeploymentLog DeploymentLog {action, deploymentTag, deploymentEnvs, exitCode, createdAt}
150+ = putStrLn . unpack . unwords $ [ encode_YmdHMS SubsecondPrecisionAuto w3c (timeToDatetime . Time . fromIntegral $ createdAt * 10^9)
151+ , action
152+ , deploymentTag
153+ , unwords deploymentEnvs
154+ , pack $ show exitCode
155+ ]