summaryrefslogtreecommitdiff
path: root/Assistant/Threads/DaemonStatus.hs
blob: f3174c86f6dad12a62b1c782ad61d14fdff35e84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{- git-annex assistant daemon status thread
 -
 - Copyright 2012 Joey Hess <joey@kitenet.net>
 -
 - Licensed under the GNU GPL version 3 or higher.
 -}

module Assistant.Threads.DaemonStatus where

import Assistant.Common
import Assistant.DaemonStatus
import Assistant.ThreadedMonad
import Utility.ThreadScheduler
import Utility.NotificationBroadcaster

thisThread :: ThreadName
thisThread = "DaemonStatus"

{- This writes the daemon status to disk, when it changes, but no more
 - frequently than once every ten minutes.
 -}
daemonStatusThread :: ThreadState -> DaemonStatusHandle -> NamedThread
daemonStatusThread st dstatus = thread $ do
	notifier <- newNotificationHandle
		=<< changeNotifier <$> getDaemonStatus dstatus
	checkpoint
	runEvery (Seconds tenMinutes) $ do
		waitNotification notifier
		checkpoint
	where
		thread = NamedThread thisThread
		checkpoint = do
			status <- getDaemonStatus dstatus
			file <- runThreadState st $ fromRepo gitAnnexDaemonStatusFile
			writeDaemonStatusFile file status