proof-assistant-bot-0.2.0: src/Proof/Assistant/ResourceLimit.hs
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeApplications #-}
module Proof.Assistant.ResourceLimit where
import GHC.Natural
import System.Posix.Process (nice)
import System.Posix.Resource
import Proof.Assistant.Helpers
import Proof.Assistant.Settings
-- | Make ResourceLimits from soft/hard limits.
makeResourceLimits :: Limit -> ResourceLimits
makeResourceLimits (Limit soft hard)
= ResourceLimits (toResourceLimit soft) (toResourceLimit hard)
where
toResourceLimit = ResourceLimit . fromIntegral
-- | Read Resources from 'ResourceSettings'.
makeLimits :: ResourceSettings -> [(Resource, ResourceLimits)]
makeLimits ResourceSettings{..} =
[ (ResourceTotalMemory, makeResourceLimits totalMemory)
, (ResourceOpenFiles, makeResourceLimits openFiles)
, (ResourceFileSize, makeResourceLimits fileSize)
, (ResourceDataSize, makeResourceLimits dataSize)
, (ResourceCPUTime, makeResourceLimits cpuTime)
]
-- | Read limits from 'ResourceSettings' and set them for current thread.
setLimits :: ResourceSettings -> IO ()
setLimits = mapM_ (uncurry setResourceLimit) . makeLimits
-- | Set 'Priority' for current thread.
setPriority :: Priority -> IO ()
setPriority = nice . toInt @_ @Natural