-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Web application deployment manager, focusing on Haskell web frameworks -- @package keter @version 1.4.3 module Keter.LabelMap -- | A data structure for storing a hierarchical set of domain labels from -- TLD down, supporting wildcards. -- -- Data structure is mutually recursive with LabelEntry, and each -- level of the tree supports a static assignment for a hostname such as: -- --
-- example.com ---- -- Or a wildcard assignment for a hostname such as: -- --
-- *.example.com ---- -- Or a wildcard assignment with a set of teptions, for example: -- --
-- *.example.com -- admin.example.com ---- -- And lastly, empty labels are supported so that, of course, an -- assignment for example.com does not necessarily have any subdomains -- available. As an example suppose we have the following assigned -- domains: -- --
-- example.com -- foo.example.com -- *.bar.example.com -- *.qux.example.com -- baz.qux.example.com ---- -- This will resolve to the following value, with some loose pseudocode -- notation. -- --
-- Static (map) -- 'com' -> Unassigned Static (map) -- 'example' -> Assigned a (map) -- 'foo' -> Assigned a EmptyLabelMap -- 'bar' -> Unassigned (Wildcard (Assigned a EmptyLabelMap) -- 'qux' -> Unassigned (WildcardExcept (Assigned a (map))) -- 'baz' -> Assigned a EmptyLabelMap ---- -- Note that the hostname "bar.example.com" is unassigned, only the -- wildcard was set. data LabelMap a insert :: ByteString -> a -> LabelMap a -> LabelMap a delete :: ByteString -> LabelMap a -> LabelMap a lookup :: ByteString -> LabelMap a -> Maybe a labelAssigned :: ByteString -> LabelMap a -> Bool empty :: LabelMap a instance Eq a => Eq (LabelEntry a) instance Show (LabelMap a) instance Eq a => Eq (LabelMap a) instance Show (LabelEntry a) module Data.Conduit.Process.Unix -- | Represents the child process which handles process cleanup. -- -- Since 0.2.1 data ProcessTracker -- | Fork off the child cleanup process. -- -- This will ideally only be run once for your entire application. -- -- Since 0.2.1 initProcessTracker :: IO ProcessTracker -- | Abstract type containing information on a process which will be -- restarted. data MonitoredProcess -- | Run the given command, restarting if the process dies. monitorProcess :: (ByteString -> IO ()) -> ProcessTracker -> Maybe ByteString -> ByteString -> ByteString -> [ByteString] -> [(ByteString, ByteString)] -> (ByteString -> IO ()) -> (ExitCode -> IO Bool) -> IO MonitoredProcess -- | Terminate the process and prevent it from being restarted. terminateMonitoredProcess :: MonitoredProcess -> IO () instance Typeable ProcessTrackerException instance Show ProcessTrackerException instance Exception ProcessTrackerException module Data.Conduit.LogFile -- | Represents a folder used for totating log files. -- -- Since 0.2.1 data RotatingLog -- | Create a new RotatingLog. -- -- Since 0.2.1 openRotatingLog :: FilePath -> Word -> IO RotatingLog addChunk :: RotatingLog -> ByteString -> IO () close :: RotatingLog -> IO () defaultMaxTotal :: Word -- | A RotatingLog which performs no logging. -- -- Since 0.2.1 dummy :: RotatingLog -- | Handles allocation of temporary directories and unpacking of bundles -- into them. Sets owner and group of all created files and directories -- as necessary. module Codec.Archive.TempTarball data TempFolder setup :: FilePath -> IO TempFolder unpackTempTar :: Maybe (UserID, GroupID) -> TempFolder -> FilePath -> Text -> (FilePath -> IO a) -> IO a module Keter.Types.Middleware data MiddlewareConfig AcceptOverride :: MiddlewareConfig Autohead :: MiddlewareConfig Jsonp :: MiddlewareConfig MethodOverride :: MiddlewareConfig MethodOverridePost :: MiddlewareConfig AddHeaders :: ![(ByteString, ByteString)] -> MiddlewareConfig -- | Realm [(username,password)] BasicAuth :: !String -> ![(ByteString, ByteString)] -> MiddlewareConfig -- | Status Message Local :: !Int -> !ByteString -> MiddlewareConfig processMiddleware :: [MiddlewareConfig] -> Middleware toMiddleware :: MiddlewareConfig -> Middleware composeMiddleware :: [Middleware] -> Middleware instance Show MiddlewareConfig instance Generic MiddlewareConfig instance Datatype D1MiddlewareConfig instance Constructor C1_0MiddlewareConfig instance Constructor C1_1MiddlewareConfig instance Constructor C1_2MiddlewareConfig instance Constructor C1_3MiddlewareConfig instance Constructor C1_4MiddlewareConfig instance Constructor C1_5MiddlewareConfig instance Constructor C1_6MiddlewareConfig instance Constructor C1_7MiddlewareConfig instance ToJSON MiddlewareConfig instance FromJSON MiddlewareConfig -- | Utilities for dealing with YAML config files which contain relative -- file paths. module Data.Yaml.FilePath -- | Parse a config file, using the ParseYamlFile typeclass. decodeFileRelative :: ParseYamlFile a => FilePath -> IO (Either ParseException a) -- | A replacement for the .: operator which will both parse a -- file path and apply the relative file logic. lookupBase :: ParseYamlFile a => BaseDir -> Object -> Text -> Parser a -- | A replacement for the .:? operator which will both parse a -- file path and apply the relative file logic. lookupBaseMaybe :: ParseYamlFile a => BaseDir -> Object -> Text -> Parser (Maybe a) -- | The directory from which we're reading the config file. data BaseDir -- | A replacement for the standard FromJSON typeclass which can -- handle relative filepaths. class ParseYamlFile a parseYamlFile :: ParseYamlFile a => BaseDir -> Value -> Parser a data NonEmptyVector a NonEmptyVector :: !a -> !(Vector a) -> NonEmptyVector a instance ParseYamlFile a => ParseYamlFile (NonEmptyVector a) instance ParseYamlFile a => ParseYamlFile (Vector a) instance (ParseYamlFile a, Ord a) => ParseYamlFile (Set a) instance ParseYamlFile FilePath module Network.HTTP.ReverseProxy.Rewrite data ReverseProxyConfig ReverseProxyConfig :: Text -> Int -> Text -> Bool -> Maybe Int -> Set RewriteRule -> Set RewriteRule -> ReverseProxyConfig reversedHost :: ReverseProxyConfig -> Text reversedPort :: ReverseProxyConfig -> Int reversingHost :: ReverseProxyConfig -> Text reverseUseSSL :: ReverseProxyConfig -> Bool reverseTimeout :: ReverseProxyConfig -> Maybe Int rewriteResponseRules :: ReverseProxyConfig -> Set RewriteRule rewriteRequestRules :: ReverseProxyConfig -> Set RewriteRule data RewriteRule RewriteRule :: Text -> Text -> Text -> RewriteRule ruleHeader :: RewriteRule -> Text ruleRegex :: RewriteRule -> Text ruleReplacement :: RewriteRule -> Text data RPEntry RPEntry :: ReverseProxyConfig -> Manager -> RPEntry config :: RPEntry -> ReverseProxyConfig httpManager :: RPEntry -> Manager simpleReverseProxy :: Manager -> ReverseProxyConfig -> Application instance Eq RewriteRule instance Ord RewriteRule instance Show RewriteRule instance Eq ReverseProxyConfig instance Ord ReverseProxyConfig instance Show ReverseProxyConfig instance ToJSON RewriteRule instance FromJSON RewriteRule instance Default ReverseProxyConfig instance ToJSON ReverseProxyConfig instance FromJSON ReverseProxyConfig instance Show RPEntry module Keter.Types.Common -- | Name of the application. Should just be the basename of the -- application file. type Appname = Text data Plugin Plugin :: (Appname -> Object -> IO [(Text, Text)]) -> Plugin pluginGetEnv :: Plugin -> Appname -> Object -> IO [(Text, Text)] type Plugins = [Plugin] -- | Used for versioning data types. class ToCurrent a where type family Previous a toCurrent :: ToCurrent a => Previous a -> a -- | A port for an individual app to listen on. type Port = Int -- | A virtual host we want to serve content from. type Host = CI Text type HostBS = CI ByteString getAppname :: FilePath -> Text data LogMessage ProcessCreated :: FilePath -> LogMessage InvalidBundle :: FilePath -> SomeException -> LogMessage ProcessDidNotStart :: FilePath -> LogMessage ExceptionThrown :: Text -> SomeException -> LogMessage RemovingPort :: Int -> LogMessage UnpackingBundle :: FilePath -> LogMessage TerminatingApp :: Text -> LogMessage FinishedReloading :: Text -> LogMessage TerminatingOldProcess :: AppId -> LogMessage RemovingOldFolder :: FilePath -> LogMessage ReceivedInotifyEvent :: Text -> LogMessage ProcessWaiting :: FilePath -> LogMessage OtherMessage :: Text -> LogMessage ErrorStartingBundle :: Text -> SomeException -> LogMessage SanityChecksPassed :: LogMessage ReservingHosts :: AppId -> (Set Host) -> LogMessage ForgetingReservations :: AppId -> (Set Host) -> LogMessage ActivatingApp :: AppId -> (Set Host) -> LogMessage DeactivatingApp :: AppId -> (Set Host) -> LogMessage ReactivatingApp :: AppId -> (Set Host) -> (Set Host) -> LogMessage WatchedFile :: Text -> FilePath -> LogMessage data KeterException CannotParsePostgres :: FilePath -> KeterException ExitCodeFailure :: FilePath -> ExitCode -> KeterException NoPortsAvailable :: KeterException InvalidConfigFile :: ParseException -> KeterException InvalidKeterConfigFile :: !FilePath -> !ParseException -> KeterException CannotReserveHosts :: !AppId -> !(Map Host AppId) -> KeterException FileNotExecutable :: !FilePath -> KeterException ExecutableNotFound :: !FilePath -> KeterException logEx :: Q Exp data AppId AIBuiltin :: AppId AINamed :: !Appname -> AppId -- | File and directory names are values of type String, whose -- precise meaning is operating system dependent. Files can be opened, -- yielding a handle which can then be used to operate on the contents of -- that file. type FilePath = String -- | A space efficient, packed, unboxed Unicode text type. data Text :: * -- | A space-efficient representation of a Word8 vector, supporting -- many efficient operations. -- -- A ByteString contains 8-bit bytes, or by using the operations -- from Data.ByteString.Char8 it can be interpreted as containing -- 8-bit characters. data ByteString :: * -- | A set of values a. data Set a :: * -> * -- | A Map from keys k to values a. data Map k a :: * -> * -> * -- | Any type that you wish to throw or catch as an exception must be an -- instance of the Exception class. The simplest case is a new -- exception type directly below the root: -- --
-- data MyException = ThisException | ThatException -- deriving (Show, Typeable) -- -- instance Exception MyException ---- -- The default method definitions in the Exception class do what -- we need in this case. You can now throw and catch -- ThisException and ThatException as exceptions: -- --
-- *Main> throw ThisException `catch` \e -> putStrLn ("Caught " ++ show (e :: MyException))
-- Caught ThisException
--
--
-- In more complicated examples, you may wish to define a whole hierarchy
-- of exceptions:
--
-- -- --------------------------------------------------------------------- -- -- Make the root exception type for all the exceptions in a compiler -- -- data SomeCompilerException = forall e . Exception e => SomeCompilerException e -- deriving Typeable -- -- instance Show SomeCompilerException where -- show (SomeCompilerException e) = show e -- -- instance Exception SomeCompilerException -- -- compilerExceptionToException :: Exception e => e -> SomeException -- compilerExceptionToException = toException . SomeCompilerException -- -- compilerExceptionFromException :: Exception e => SomeException -> Maybe e -- compilerExceptionFromException x = do -- SomeCompilerException a <- fromException x -- cast a -- -- --------------------------------------------------------------------- -- -- Make a subhierarchy for exceptions in the frontend of the compiler -- -- data SomeFrontendException = forall e . Exception e => SomeFrontendException e -- deriving Typeable -- -- instance Show SomeFrontendException where -- show (SomeFrontendException e) = show e -- -- instance Exception SomeFrontendException where -- toException = compilerExceptionToException -- fromException = compilerExceptionFromException -- -- frontendExceptionToException :: Exception e => e -> SomeException -- frontendExceptionToException = toException . SomeFrontendException -- -- frontendExceptionFromException :: Exception e => SomeException -> Maybe e -- frontendExceptionFromException x = do -- SomeFrontendException a <- fromException x -- cast a -- -- --------------------------------------------------------------------- -- -- Make an exception type for a particular frontend compiler exception -- -- data MismatchedParentheses = MismatchedParentheses -- deriving (Typeable, Show) -- -- instance Exception MismatchedParentheses where -- toException = frontendExceptionToException -- fromException = frontendExceptionFromException ---- -- We can now catch a MismatchedParentheses exception as -- MismatchedParentheses, SomeFrontendException or -- SomeCompilerException, but not other types, e.g. -- IOException: -- --
-- *Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: MismatchedParentheses))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: SomeFrontendException))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: SomeCompilerException))
-- Caught MismatchedParentheses
-- *Main> throw MismatchedParentheses catch e -> putStrLn ("Caught " ++ show (e :: IOException))
-- *** Exception: MismatchedParentheses
--
class (Typeable * e, Show e) => Exception e
-- | The SomeException type is the root of the exception type
-- hierarchy. When an exception of type e is thrown, behind the
-- scenes it is encapsulated in a SomeException.
data SomeException :: *
instance Typeable KeterException
instance Eq AppId
instance Ord AppId
instance Show KeterException
instance Show AppId
instance Exception KeterException
instance Show LogMessage
instance ToCurrent a => ToCurrent (Maybe a)
-- | Legacy types from Keter version 0.4. Retained to keep backwards
-- compatibility in config file format.
module Keter.Types.V04
data AppConfig
AppConfig :: FilePath -> [Text] -> Text -> Bool -> Set Text -> Object -> AppConfig
configExec :: AppConfig -> FilePath
configArgs :: AppConfig -> [Text]
configHost :: AppConfig -> Text
configSsl :: AppConfig -> Bool
configExtraHosts :: AppConfig -> Set Text
configRaw :: AppConfig -> Object
data BundleConfig
BundleConfig :: Maybe AppConfig -> Set StaticHost -> Set Redirect -> BundleConfig
bconfigApp :: BundleConfig -> Maybe AppConfig
bconfigStaticHosts :: BundleConfig -> Set StaticHost
bconfigRedirects :: BundleConfig -> Set Redirect
data StaticHost
StaticHost :: Text -> FilePath -> StaticHost
shHost :: StaticHost -> Text
shRoot :: StaticHost -> FilePath
data Redirect
Redirect :: Text -> Text -> Redirect
redFrom :: Redirect -> Text
redTo :: Redirect -> Text
data KeterConfig
KeterConfig :: FilePath -> PortSettings -> HostPreference -> Port -> Maybe TLSConfig -> Maybe Text -> Set ReverseProxyConfig -> Bool -> Int -> KeterConfig
kconfigDir :: KeterConfig -> FilePath
kconfigPortMan :: KeterConfig -> PortSettings
kconfigHost :: KeterConfig -> HostPreference
kconfigPort :: KeterConfig -> Port
kconfigSsl :: KeterConfig -> Maybe TLSConfig
kconfigSetuid :: KeterConfig -> Maybe Text
kconfigReverseProxy :: KeterConfig -> Set ReverseProxyConfig
kconfigIpFromHeader :: KeterConfig -> Bool
-- | Maximum request time in milliseconds per connection.
kconfigConnectionTimeBound :: KeterConfig -> Int
-- | Default connection time bound in milliseconds.
fiveMinutes :: Int
data TLSConfig
TLSConfig :: !Settings -> !TLSSettings -> TLSConfig
-- | Controls execution of the nginx thread. Follows the settings type
-- pattern. See: http://www.yesodweb.com/book/settings-types.
data PortSettings
PortSettings :: [Port] -> PortSettings
-- | Which ports to assign to apps. Defaults to unassigned ranges from IANA
portRange :: PortSettings -> [Port]
instance Eq StaticHost
instance Ord StaticHost
instance Eq Redirect
instance Ord Redirect
instance FromJSON PortSettings
instance Default PortSettings
instance ParseYamlFile TLSConfig
instance ParseYamlFile KeterConfig
instance Default KeterConfig
instance FromJSON Redirect
instance ParseYamlFile StaticHost
instance ParseYamlFile BundleConfig
instance ParseYamlFile AppConfig
module Keter.Types.V10
data BundleConfig
BundleConfig :: !(Vector (Stanza ())) -> !Object -> BundleConfig
bconfigStanzas :: BundleConfig -> !(Vector (Stanza ()))
-- | settings used for plugins
bconfigPlugins :: BundleConfig -> !Object
data ListeningPort
LPSecure :: !HostPreference -> !Port -> !FilePath -> !(Vector FilePath) -> !FilePath -> ListeningPort
LPInsecure :: !HostPreference -> !Port -> ListeningPort
data KeterConfig
KeterConfig :: FilePath -> PortSettings -> !(NonEmptyVector ListeningPort) -> Maybe Text -> !(Vector (Stanza ())) -> Bool -> !Int -> !Int -> !(Map Text Text) -> !Int -> KeterConfig
kconfigDir :: KeterConfig -> FilePath
kconfigPortPool :: KeterConfig -> PortSettings
kconfigListeners :: KeterConfig -> !(NonEmptyVector ListeningPort)
kconfigSetuid :: KeterConfig -> Maybe Text
kconfigBuiltinStanzas :: KeterConfig -> !(Vector (Stanza ()))
kconfigIpFromHeader :: KeterConfig -> Bool
-- | External HTTP port when generating APPROOTs.
kconfigExternalHttpPort :: KeterConfig -> !Int
-- | External HTTPS port when generating APPROOTs.
kconfigExternalHttpsPort :: KeterConfig -> !Int
-- | Environment variables to be passed to all apps.
kconfigEnvironment :: KeterConfig -> !(Map Text Text)
-- | Maximum request time in milliseconds per connection.
kconfigConnectionTimeBound :: KeterConfig -> !Int
-- | Whether we should force redirect to HTTPS routes.
type RequiresSecure = Bool
data Stanza port
Stanza :: (StanzaRaw port) -> RequiresSecure -> Stanza port
data StanzaRaw port
StanzaStaticFiles :: !StaticFilesConfig -> StanzaRaw port
StanzaRedirect :: !RedirectConfig -> StanzaRaw port
StanzaWebApp :: !(WebAppConfig port) -> StanzaRaw port
StanzaReverseProxy :: !ReverseProxyConfig -> ![MiddlewareConfig] -> !(Maybe Int) -> StanzaRaw port
StanzaBackground :: !BackgroundConfig -> StanzaRaw port
-- | An action to be performed for a requested hostname.
--
-- This datatype is very similar to Stanza, but is necessarily separate
-- since:
--
--