craft-0.0.0.1: src/Craft/Upstart.hs
module Craft.Upstart where
import Craft
import Control.Lens hiding (noneOf)
import Text.Megaparsec
type ServiceName = String
data Service
= Service
{ _name :: String
, _status :: String
}
makeLenses ''Service
get :: ServiceName -> Craft (Maybe Service)
get sn =
exec "/sbin/status" [sn] >>= \case
ExecFail _ -> return Nothing
ExecSucc r -> Just . Service sn <$> parseExecResult (ExecSucc r) (statusParser sn) (r ^. stdout)
statusParser :: String -> Parsec String String
statusParser sn = do
void $ string sn >> space >> some (noneOf "/") >> char '/'
some $ noneOf ","
start :: Service -> Craft ()
start Service{..} = when (_status /= "running") $ exec_ "/sbin/start" [_name]
restart :: Service -> Craft ()
restart Service{..} = exec_ "/sbin/restart" [_name]