58 lines
1.8 KiB
Haskell
58 lines
1.8 KiB
Haskell
{- git-annex assistant webapp control
|
|
-
|
|
- Copyright 2012 Joey Hess <joey@kitenet.net>
|
|
-
|
|
- Licensed under the GNU AGPL version 3 or higher.
|
|
-}
|
|
|
|
{-# LANGUAGE CPP, TypeFamilies, QuasiQuotes, MultiParamTypeClasses, TemplateHaskell, OverloadedStrings, RankNTypes #-}
|
|
|
|
module Assistant.WebApp.Control where
|
|
|
|
import Assistant.WebApp.Common
|
|
import Locations.UserConfig
|
|
import Utility.LogFile
|
|
import Assistant.DaemonStatus
|
|
|
|
import Control.Concurrent
|
|
import System.Posix (getProcessID, signalProcess, sigTERM)
|
|
import qualified Data.Map as M
|
|
|
|
getShutdownR :: Handler RepHtml
|
|
getShutdownR = page "Shutdown" Nothing $
|
|
$(widgetFile "control/shutdown")
|
|
|
|
getShutdownConfirmedR :: Handler RepHtml
|
|
getShutdownConfirmedR = page "Shutdown" Nothing $ do
|
|
{- Wait 2 seconds before shutting down, to give the web page time
|
|
- to display. -}
|
|
void $ liftIO $ forkIO $ do
|
|
threadDelay 2000000
|
|
signalProcess sigTERM =<< getProcessID
|
|
$(widgetFile "control/shutdownconfirmed")
|
|
|
|
{- Quite a hack, and doesn't redirect the browser window. -}
|
|
getRestartR :: Handler RepHtml
|
|
getRestartR = page "Restarting" Nothing $ do
|
|
void $ liftIO $ forkIO $ do
|
|
threadDelay 2000000
|
|
program <- readProgramFile
|
|
unlessM (boolSystem "sh" [Param "-c", Param $ restartcommand program]) $
|
|
error "restart failed"
|
|
$(widgetFile "control/restarting")
|
|
where
|
|
restartcommand program = program ++ " assistant --stop; " ++
|
|
program ++ " webapp"
|
|
|
|
getRestartThreadR :: ThreadName -> Handler ()
|
|
getRestartThreadR name = do
|
|
m <- liftAssistant $ startedThreads <$> getDaemonStatus
|
|
liftIO $ maybe noop snd $ M.lookup name m
|
|
redirectBack
|
|
|
|
getLogR :: Handler RepHtml
|
|
getLogR = page "Logs" Nothing $ do
|
|
logfile <- liftAnnex $ fromRepo gitAnnexLogFile
|
|
logs <- liftIO $ listLogs logfile
|
|
logcontent <- liftIO $ concat <$> mapM readFile logs
|
|
$(widgetFile "control/log")
|