groot-0.0.1.0: src/Groot/CLI/List/Cluster.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Groot.CLI.List.Cluster
( printClusterSummary
) where
import Control.Lens
import Control.Monad.IO.Class
import Control.Monad.Trans.Maybe
import Control.Monad.Trans.Reader
import Data.Conduit
import qualified Data.Conduit.List as CL
import Data.Data
import Data.Maybe (maybeToList)
import Data.Text (Text)
import qualified Data.Text as T
import GHC.Generics
import Network.AWS
import qualified Network.AWS.ECS as ECS
import Text.PrettyPrint.Tabulate (Tabulate, printTable)
import qualified Text.PrettyPrint.Tabulate as Tabs
import Groot.CLI.List.Common
import Groot.Console
import Groot.Core
import Groot.Types
data ClusterSummary = ClusterSummary
{ name :: String
, status :: String
, runningTasks :: Int
, pendingTasks :: Int
, instances :: Int
} deriving (Eq, Show, Generic, Data)
instance Tabulate ClusterSummary Tabs.ExpandWhenNested
instance HasSummary ECS.Cluster ClusterSummary where
summarize cls = ClusterSummary <$> cName <*> cStatus <*> cRunning <*> cPending <*> cInstances
where cName = T.unpack <$> cls ^. ECS.cClusterName
cStatus = T.unpack <$> cls ^. ECS.cStatus
cRunning = cls ^. ECS.cRunningTasksCount
cPending = cls ^. ECS.cPendingTasksCount
cInstances = cls ^. ECS.cRegisteredContainerInstancesCount
summarizeClusters :: Maybe ClusterRef -> AWS [ClusterSummary]
summarizeClusters Nothing = runConduit $ fetchClusters =$= CL.mapMaybe summarize =$ CL.consume
summarizeClusters (Just c) = maybeToList <$> do
cl <- runMaybeT (findCluster c)
return $ cl >>= summarize
printClusterSummary :: Maybe ClusterRef -> GrootM IO ()
printClusterSummary x = do
env <- ask
desc <- runResourceT . runAWS env $ summarizeClusters x
case desc of
[] -> putWarn ("No clusters found" :: Text)
xs -> liftIO $ printTable xs