module System.Mesos.Types (
MasterInfo(..),
masterInfo,
SlaveInfo(..),
slaveInfo,
ExecutorInfo(..),
executorInfo,
FrameworkInfo(..),
frameworkInfo,
Offer(..),
Request(..),
Filters(..),
filters,
TaskInfo(..),
taskInfo,
TaskExecutionInfo(..),
CommandInfo(..),
commandInfo,
CommandURI(..),
commandURI,
CommandValue (..),
Value(..),
Resource(..),
resource,
Status(..),
TaskStatus(..),
TaskState(..),
isTerminal,
FrameworkID(..),
SlaveID(..),
OfferID(..),
TaskID(..),
ExecutorID(..),
ContainerID(..),
ContainerInfo (..),
Volume (..),
Mode (..),
ContainerType (..),
HealthCheck (..),
HealthCheckStrategy (..),
ResourceStatistics(..),
ResourceUsage(..),
PerformanceStatistics(..),
Credential(..),
credential
) where
import Data.ByteString (ByteString)
import Data.String
import Data.Word
isTerminal :: TaskState -> Bool
isTerminal s = case s of
Finished -> True
Failed -> True
Killed -> True
Lost -> True
_ -> False
data TaskState
= Staging
| Starting
| TaskRunning
| Finished
| Failed
| Killed
| Lost
deriving (Show, Eq)
instance Enum TaskState where
fromEnum Staging = 6
fromEnum Starting = 0
fromEnum TaskRunning = 1
fromEnum Finished = 2
fromEnum Failed = 3
fromEnum Killed = 4
fromEnum Lost = 5
toEnum 0 = Starting
toEnum 1 = TaskRunning
toEnum 2 = Finished
toEnum 3 = Failed
toEnum 4 = Killed
toEnum 5 = Lost
toEnum 6 = Staging
toEnum _ = error "Unsupported task state"
data Status = NotStarted | Running | Aborted | Stopped
deriving (Show, Eq)
instance Enum Status where
fromEnum Running = 2
fromEnum NotStarted = 1
fromEnum Aborted = 3
fromEnum Stopped = 4
toEnum 1 = NotStarted
toEnum 2 = Running
toEnum 3 = Aborted
toEnum 4 = Stopped
toEnum _ = error "Unsupported status"
newtype FrameworkID = FrameworkID { fromFrameworkID :: ByteString }
deriving (Show, Eq, IsString)
newtype OfferID = OfferID { fromOfferID :: ByteString }
deriving (Show, Eq, IsString)
newtype SlaveID = SlaveID { fromSlaveID :: ByteString }
deriving (Show, Eq, IsString)
newtype TaskID = TaskID { fromTaskID :: ByteString }
deriving (Show, Eq, IsString)
newtype ExecutorID = ExecutorID { fromExecutorID :: ByteString }
deriving (Show, Eq, IsString)
newtype ContainerID = ContainerID { fromContainerID :: ByteString }
deriving (Show, Eq, IsString)
data FrameworkInfo = FrameworkInfo
{ frameworkUser :: !ByteString
, frameworkName :: !ByteString
, frameworkID :: !(Maybe FrameworkID)
, frameworkFailoverTimeout :: !(Maybe Double)
, frameworkCheckpoint :: !(Maybe Bool)
, frameworkRole :: !(Maybe ByteString)
, frameworkHostname :: !(Maybe ByteString)
, frameworkPrincipal :: !(Maybe ByteString)
}
deriving (Show, Eq)
frameworkInfo :: ByteString -> ByteString -> FrameworkInfo
frameworkInfo u n = FrameworkInfo u n Nothing Nothing Nothing Nothing Nothing Nothing
data HealthCheckStrategy
= HTTPCheck
{ httpCheckPort :: !Word32
, httpCheckPath :: !(Maybe ByteString)
, httpCheckStatuses :: ![Word32]
}
| CommandCheck
{ commandCheckCommand :: !CommandInfo
} deriving (Show, Eq)
data HealthCheck = HealthCheck
{ healthCheckStrategy :: !HealthCheckStrategy
, healthCheckDelaySeconds :: !(Maybe Double)
, healthCheckIntervalSeconds :: !(Maybe Double)
, healthCheckTimeoutSeconds :: !(Maybe Double)
, healthCheckConsecutiveFailures :: !(Maybe Word32)
, healthCheckGracePeriodSeconds :: !(Maybe Double)
} deriving (Show, Eq)
data CommandInfo = CommandInfo
{ commandInfoURIs :: ![CommandURI]
, commandEnvironment :: !(Maybe [(ByteString, ByteString)])
, commandValue :: !CommandValue
, commandUser :: !(Maybe ByteString)
}
deriving (Show, Eq)
commandInfo :: CommandValue -> CommandInfo
commandInfo v = CommandInfo [] Nothing v Nothing
data CommandURI = CommandURI
{ commandURIValue :: !ByteString
, commandURIExecutable :: !(Maybe Bool)
, commandURIExtract :: !(Maybe Bool)
}
deriving (Show, Eq)
commandURI :: ByteString -> CommandURI
commandURI v = CommandURI v Nothing Nothing
data CommandValue = ShellCommand !ByteString
| RawCommand !ByteString ![ByteString]
deriving (Show, Eq)
data ExecutorInfo = ExecutorInfo
{ executorInfoExecutorID :: !ExecutorID
, executorInfoFrameworkID :: !FrameworkID
, executorInfoCommandInfo :: !CommandInfo
, executorInfoContainerInfo :: !(Maybe ContainerInfo)
, executorInfoResources :: ![Resource]
, executorName :: !(Maybe ByteString)
, executorSource :: !(Maybe ByteString)
, executorData :: !(Maybe ByteString)
}
deriving (Show, Eq)
executorInfo :: ExecutorID -> FrameworkID -> CommandInfo -> [Resource] -> ExecutorInfo
executorInfo eid fid ci rs = ExecutorInfo eid fid ci Nothing rs Nothing Nothing Nothing
data MasterInfo = MasterInfo
{ masterInfoID :: !ByteString
, masterInfoIP :: !Word32
, masterInfoPort :: !(Maybe Word32)
, masterInfoPID :: !(Maybe ByteString)
, masterInfoHostname :: !(Maybe ByteString)
}
deriving (Show, Eq)
masterInfo :: ByteString -> Word32 -> MasterInfo
masterInfo id ip = MasterInfo id ip Nothing Nothing Nothing
data SlaveInfo = SlaveInfo
{ slaveInfoHostname :: !ByteString
, slaveInfoPort :: !(Maybe Word32)
, slaveInfoResources :: ![Resource]
, slaveInfoAttributes :: ![(ByteString, Value)]
, slaveInfoSlaveID :: !(Maybe SlaveID)
, slaveInfoCheckpoint :: !(Maybe Bool)
}
deriving (Show, Eq)
slaveInfo :: ByteString -> [Resource] -> [(ByteString, Value)] -> SlaveInfo
slaveInfo hn rs as = SlaveInfo hn Nothing rs as Nothing Nothing
newtype Filters = Filters
{ refuseSeconds :: Maybe Double
}
deriving (Show, Eq)
filters :: Filters
filters = Filters Nothing
credential :: ByteString -> Credential
credential p = Credential p Nothing
data Value
= Scalar !Double
| Ranges ![(Word64, Word64)]
| Set ![ByteString]
| Text !ByteString
deriving (Show, Eq)
data Resource = Resource
{ resourceName :: !ByteString
, resourceValue :: !Value
, resourceRole :: !(Maybe ByteString)
}
deriving (Show, Eq)
resource :: ByteString -> Value -> Resource
resource n v = Resource n v Nothing
data ResourceStatistics = ResourceStatistics
{ resourceStatisticsTimestamp :: !Double
, resourceStatisticsCPUsUserTimeSecs :: !(Maybe Double)
, resourceStatisticsCPUsSystemTimeSecs :: !(Maybe Double)
, resourceCPUsLimit :: !Double
, resourceCPUsPeriods :: !(Maybe Word32)
, resourceCPUsThrottled :: !(Maybe Word32)
, resourceCPUsThrottledTimeSecs :: !(Maybe Double)
, resourceMemoryResidentSetSize :: !(Maybe Word64)
, resourceMemoryLimitBytes :: !(Maybe Word64)
, resourceMemoryFileBytes :: !(Maybe Word64)
, resourceMemoryAnonymousBytes :: !(Maybe Word64)
, resourceMemoryMappedFileBytes :: !(Maybe Word64)
, resourcePerformanceStatistics :: !(Maybe PerformanceStatistics)
, resourceNetRxPackets :: !(Maybe Word64)
, resourceNetRxBytes :: !(Maybe Word64)
, resourceNetRxErrors :: !(Maybe Word64)
, resourceNetRxDropped :: !(Maybe Word64)
, resourceNetTxPackets :: !(Maybe Word64)
, resourceNetTxBytes :: !(Maybe Word64)
, resourceNetTxErrors :: !(Maybe Word64)
, resourceNetTxDropped :: !(Maybe Word64)
}
deriving (Show, Eq)
data ResourceUsage = ResourceUsage
{ resourceUsageSlaveID :: !SlaveID
, resourceUsageFrameworkID :: !FrameworkID
, resourceUsageExecutorID :: !(Maybe ExecutorID)
, resourceUsageExecutorName :: !(Maybe ByteString)
, resourceUsageTaskID :: !(Maybe TaskID)
, resourceUsageStatistics :: !(Maybe ResourceStatistics)
}
deriving (Show, Eq)
data PerformanceStatistics = PerformanceStatistics
{ performanceStatisticsTimestamp :: !Double
, performanceStatisticsDuration :: !Double
, performanceStatisticsCycles :: !(Maybe Word64)
, performanceStatisticsStalledCyclesFrontend :: !(Maybe Word64)
, performanceStatisticsStalledCyclesBackend :: !(Maybe Word64)
, performanceStatisticsInstructions :: !(Maybe Word64)
, performanceStatisticsCacheReferences :: !(Maybe Word64)
, performanceStatisticsCacheMisses :: !(Maybe Word64)
, performanceStatisticsBranches :: !(Maybe Word64)
, performanceStatisticsBranchMisses :: !(Maybe Word64)
, performanceStatisticsBusCycles :: !(Maybe Word64)
, performanceStatisticsRefCycles :: !(Maybe Word64)
, performanceStatisticsCpuClock :: !(Maybe Double)
, performanceStatisticsTaskClock :: !(Maybe Double)
, performanceStatisticsPageFaults :: !(Maybe Word64)
, performanceStatisticsMinorFaults :: !(Maybe Word64)
, performanceStatisticsMajorFaults :: !(Maybe Word64)
, performanceStatisticsContextSwitches :: !(Maybe Word64)
, performanceStatisticsCpuMigrations :: !(Maybe Word64)
, performanceStatisticsAlignmentFaults :: !(Maybe Word64)
, performanceStatisticsEmulationFaults :: !(Maybe Word64)
, performanceStatisticsL1DcacheLoads :: !(Maybe Word64)
, performanceStatisticsL1DcacheLoadMisses :: !(Maybe Word64)
, performanceStatisticsL1DcacheStores :: !(Maybe Word64)
, performanceStatisticsL1DcacheStoreMisses :: !(Maybe Word64)
, performanceStatisticsL1DcachePrefetches :: !(Maybe Word64)
, performanceStatisticsL1DcachePrefetchMisses :: !(Maybe Word64)
, performanceStatisticsL1IcacheLoads :: !(Maybe Word64)
, performanceStatisticsL1IcacheLoadMisses :: !(Maybe Word64)
, performanceStatisticsL1IcachePrefetches :: !(Maybe Word64)
, performanceStatisticsL1IcachePrefetchMisses :: !(Maybe Word64)
, performanceStatisticsLlcLoads :: !(Maybe Word64)
, performanceStatisticsLlcLoadMisses :: !(Maybe Word64)
, performanceStatisticsLlcStores :: !(Maybe Word64)
, performanceStatisticsLlcStoreMisses :: !(Maybe Word64)
, performanceStatisticsLlcPrefetches :: !(Maybe Word64)
, performanceStatisticsLlcPrefetchMisses :: !(Maybe Word64)
, performanceStatisticsDtlbLoads :: !(Maybe Word64)
, performanceStatisticsDtlbLoadMisses :: !(Maybe Word64)
, performanceStatisticsDtlbStores :: !(Maybe Word64)
, performanceStatisticsDtlbStoreMisses :: !(Maybe Word64)
, performanceStatisticsDtlbPrefetches :: !(Maybe Word64)
, performanceStatisticsDtlbPrefetchMisses :: !(Maybe Word64)
, performanceStatisticsItlbLoads :: !(Maybe Word64)
, performanceStatisticsItlbLoadMisses :: !(Maybe Word64)
, performanceStatisticsBranchLoads :: !(Maybe Word64)
, performanceStatisticsBranchLoadMisses :: !(Maybe Word64)
, performanceStatisticsNodeLoads :: !(Maybe Word64)
, performanceStatisticsNodeLoadMisses :: !(Maybe Word64)
, performanceStatisticsNodeStores :: !(Maybe Word64)
, performanceStatisticsNodeStoreMisses :: !(Maybe Word64)
, performanceStatisticsNodePrefetches :: !(Maybe Word64)
, performanceStatisticsNodePrefetchMisses :: !(Maybe Word64)
} deriving (Show, Eq)
data Request = Request
{ requestSlaveID :: !(Maybe SlaveID)
, reqResources :: ![Resource]
}
deriving (Show, Eq)
data Offer = Offer
{ offerID :: !OfferID
, offerFrameworkID :: !FrameworkID
, offerSlaveID :: !SlaveID
, offerHostname :: !ByteString
, offerResources :: ![Resource]
, offerAttributes :: ![(ByteString, Value)]
, offerExecutorIDs :: ![ExecutorID]
}
deriving (Show, Eq)
data TaskExecutionInfo
= TaskCommand !CommandInfo
| TaskExecutor !ExecutorInfo
deriving (Eq, Show)
data TaskInfo = TaskInfo
{ taskName :: !ByteString
, taskID :: !TaskID
, taskSlaveID :: !SlaveID
, taskResources :: ![Resource]
, taskImplementation :: !TaskExecutionInfo
, taskData :: !(Maybe ByteString)
, taskContainer :: !(Maybe ContainerInfo)
, taskHealthCheck :: !(Maybe HealthCheck)
}
deriving (Show, Eq)
taskInfo :: ByteString -> TaskID -> SlaveID -> [Resource] -> TaskExecutionInfo -> TaskInfo
taskInfo n t s rs i = TaskInfo n t s rs i Nothing Nothing Nothing
data TaskStatus = TaskStatus
{ taskStatusTaskID :: !TaskID
, taskStatusState :: !TaskState
, taskStatusMessage :: !(Maybe ByteString)
, taskStatusData :: !(Maybe ByteString)
, taskStatusSlaveID :: !(Maybe SlaveID)
, taskStatusExecutorID :: !(Maybe ExecutorID)
, taskStatusTimestamp :: !(Maybe Double)
, taskStatusHealthy :: !(Maybe Bool)
}
deriving (Show, Eq)
data Credential = Credential
{ credentialPrincipal :: !ByteString
, credentialSecret :: !(Maybe ByteString)
}
deriving (Show, Eq)
data ACLEntity = Some ![ByteString]
| Any
| None
deriving (Show, Eq)
data RegisterFrameworkACL = RegisterFrameworkACL { registerFrameworkPrincipals :: ACLEntity, registerFrameworkRoles :: ACLEntity } deriving (Show, Eq)
data RunTaskACL = RunTaskACL { runTaskPrincipals :: ACLEntity, runTaskUsers :: ACLEntity } deriving (Show, Eq)
data ShutdownFrameworkACL = ShutdownFrameworkACL { shutdownFrameworkPrincipals :: ACLEntity, shutdownFrameworkFrameworkPrincipals :: ACLEntity } deriving (Show, Eq)
data ACLSettings = ACLSettings
{ aclSettingsPermissive :: !(Maybe Bool)
, aclSettingsRegisterFrameworks :: ![RegisterFrameworkACL]
, aclSettingsRunTasks :: ![RunTaskACL]
, aclSettingsShutdownFramework :: ![ShutdownFrameworkACL]
} deriving (Show, Eq)
data RateLimit = RateLimit
{ rateLimitQPS :: !(Maybe Double)
, rateLimitPrincipal :: !ByteString
, rateLimitCapacity :: !(Maybe Word64)
} deriving (Show, Eq)
data RateLimits = RateLimits
{ rateLimits :: ![RateLimit]
, rateLimitsAggregateDefaultQPS :: !(Maybe Double)
, rateLimitsAggregateDefaultCapacity :: !(Maybe Double)
} deriving (Show, Eq)
data Mode = ReadWrite
| ReadOnly
deriving (Show, Eq)
instance Enum Mode where
fromEnum ReadWrite = 1
fromEnum ReadOnly = 2
toEnum 1 = ReadWrite
toEnum 2 = ReadOnly
toEnum _ = error "Unsupported volume mode"
data Volume = Volume
{ volumeContainerPath :: !ByteString
, volumeHostPath :: !(Maybe ByteString)
, volumeMode :: !Mode
} deriving (Show, Eq)
data ContainerType = Docker { dockerImage :: ByteString }
| Unknown Int
deriving (Show, Eq)
data ContainerInfo = ContainerInfo
{ containerInfoContainerType :: !ContainerType
, containerInfoVolumes :: ![Volume]
} deriving (Show, Eq)