packages feed

hnormalise-0.4.7.0: src/HNormalise/Torque/Internal.hs

{- hnormalise - a log normalisation library
 -
 - Copyright Andy Georges (c) 2017
 -
 - All rights reserved.
 -
 - Redistribution and use in source and binary forms, with or without
 - modification, are permitted provided that the following conditions are met:
 -
 - * Redistributions of source code must retain the above copyright
 - notice, this list of conditions and the following disclaimer.
 -
 - * Redistributions in binary form must reproduce the above
 - copyright notice, this list of conditions and the following
 - disclaimer in the documentation and/or other materials provided
 - with the distribution.
 -
 - * Neither the name of Author name here nor the names of other
 - contributors may be used to endorse or promote products derived
 - from this software without specific prior written permission.
 -
 - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-}

{-# LANGUAGE DeriveGeneric         #-}
{-# LANGUAGE DuplicateRecordFields #-}

module HNormalise.Torque.Internal where

--------------------------------------------------------------------------------
import           Data.Text
import           GHC.Generics (Generic)

--------------------------------------------------------------------------------
-- | `TorqueParseResult` encapsulates the results we get from parsing torque lines
data TorqueParseResult
    = TorqueQueue TorqueJobQueue
    | TorqueStart TorqueJobStart
    | TorqueDelete TorqueJobDelete
    | TorqueExit TorqueJobExit
    | TorqueAbort TorqueJobAbort
    | TorqueRerun TorqueJobRerun
    deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
-- | `TorqueEntryType` distinguishes between accounting data entry Types
data TorqueEntryType
    = TorqueQueueEntry
    | TorqueStartEntry
    | TorqueDeleteEntry
    | TorqueExitEntry
    | TorqueAbortEntry
    | TorqueRerunEntry
    deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobShortNode = TorqueJobShortNode
    { number :: !Int
    , ppn    :: !(Maybe Int)
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobFQNode = TorqueJobFQNode
    { name :: !Text
    , ppn  :: !(Maybe Int)
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobNode = TSN TorqueJobShortNode
                   | TFN [TorqueJobFQNode]
                   deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueExecHost = TorqueExecHost
    { name  :: !Text
    , cores :: ![Int]
    } deriving (Show, Eq, Generic)

instance Ord TorqueExecHost where
    compare (TorqueExecHost t1 _) (TorqueExecHost t2 _) = compare t1 t2

--------------------------------------------------------------------------------
data TorqueWalltime = TorqueWalltime
    { days    :: !Int
    , hours   :: !Int
    , minutes :: !Int
    , seconds :: !Int
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueResourceRequest = TorqueResourceRequest
    { mem           :: !(Maybe Integer)
    , advres        :: !(Maybe Text)
    , naccesspolicy :: !(Maybe Text)
    , ncpus         :: !(Maybe Int)
    , cputime       :: !(Maybe TorqueWalltime)
    , prologue      :: !(Maybe Text)
    , epilogue      :: !(Maybe Text)
    , neednodes     :: !(Maybe TorqueJobNode)
    , nice          :: !(Maybe Int)
    , nodeCount     :: !Int
    , nodes         :: !TorqueJobNode
    , select        :: !(Maybe Text)
    , qos           :: !(Maybe Text)
    , other         :: !(Maybe Text)
    , feature       :: !(Maybe Text)
    , host          :: !(Maybe Text)
    , procs         :: !(Maybe Text)
    , nodeset       :: !(Maybe Text)
    , tpn           :: !(Maybe Text)
    , pmem          :: !(Maybe Integer)
    , vmem          :: !(Maybe Integer)
    , pvmem         :: !(Maybe Integer)
    , mppmem        :: !(Maybe Integer)
    , walltime      :: !TorqueWalltime
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueResourceUsage = TorqueResourceUsage
    { cputime  :: !Integer
    , energy   :: !(Maybe Integer)
    , mem      :: !Integer
    , vmem     :: !Integer
    , walltime :: !TorqueWalltime
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobTime = TorqueJobTime
    { ctime     :: !Integer
    , qtime     :: !Integer
    , etime     :: !Integer
    , startTime :: !Integer
    , endTime   :: !(Maybe Integer)
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobExit = TorqueJobExit
    { torqueDatestamp     :: !Text
    , name                :: !TorqueJobName
    , user                :: !Text
    , group               :: !Text
    , account             :: !(Maybe Text)
    , jobname             :: !Text
    , queue               :: !Text
    , startCount          :: !(Maybe Int)
    , owner               :: !Text
    , session             :: !Integer
    , times               :: !TorqueJobTime
    , execHost            :: ![TorqueExecHost]
    , resourceRequest     :: !TorqueResourceRequest
    , resourceUsage       :: !TorqueResourceUsage
    , totalExecutionSlots :: !Int
    , uniqueNodeCount     :: !Int
    , exitStatus          :: !Int
    , torqueEntryType     :: TorqueEntryType
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobName = TorqueJobName
    { number  :: !Integer
    , arrayId :: !(Maybe Integer)
    , master  :: !Text
    , cluster :: !Text
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobQueue = TorqueJobQueue
    { torqueDatestamp :: !Text
    , name            :: !TorqueJobName
    , queue           :: !Text
    , torqueEntryType :: TorqueEntryType
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobStart = TorqueJobStart
    { torqueDatestamp :: !Text
    , name            :: !TorqueJobName
    , user            :: !Text
    , group           :: !Text
    , account         :: !(Maybe Text)
    , jobname         :: !Text
    , queue           :: !Text
    , owner           :: !Text
    , times           :: !TorqueJobTime
    , execHost        :: ![TorqueExecHost]
    , resourceRequest :: !TorqueResourceRequest
    , torqueEntryType :: TorqueEntryType
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueRequestor = TorqueRequestor
    { user   :: !Text
    , whence :: !Text
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobDelete = TorqueJobDelete
    { torqueDatestamp :: !Text
    , name            :: !TorqueJobName
    , requestor       :: !TorqueRequestor
    , torqueEntryType :: TorqueEntryType
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobAbort = TorqueJobAbort
    { torqueDatestamp :: !Text
    , name            :: !TorqueJobName
    , torqueEntryType :: TorqueEntryType
    } deriving (Show, Eq, Generic)

--------------------------------------------------------------------------------
data TorqueJobRerun = TorqueJobRerun
    { torqueDatestamp :: !Text
    , name            :: !TorqueJobName
    , torqueEntryType :: TorqueEntryType
    } deriving (Show, Eq, Generic)