packages feed

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]