-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Web application deployment manager, focusing on Haskell web frameworks -- -- Hackage documentation generation is not reliable. For up to date -- documentation, please see: -- http://www.stackage.org/package/keter. @package keter @version 1.5 -- | 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 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 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 GHC.Show.Show Data.Conduit.Process.Unix.ProcessTrackerException instance GHC.Exception.Type.Exception Data.Conduit.Process.Unix.ProcessTrackerException -- | 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 Data.Yaml.FilePath.ParseYamlFile a => Data.Yaml.FilePath.ParseYamlFile (Data.Yaml.FilePath.NonEmptyVector a) instance Data.Yaml.FilePath.ParseYamlFile GHC.IO.FilePath instance (Data.Yaml.FilePath.ParseYamlFile a, GHC.Classes.Ord a) => Data.Yaml.FilePath.ParseYamlFile (Data.Set.Internal.Set a) instance Data.Yaml.FilePath.ParseYamlFile a => Data.Yaml.FilePath.ParseYamlFile (Data.Vector.Vector a) 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 GHC.Classes.Eq a => GHC.Classes.Eq (Keter.LabelMap.LabelMap a) instance GHC.Show.Show (Keter.LabelMap.LabelMap a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Keter.LabelMap.LabelEntry a) instance GHC.Show.Show (Keter.LabelMap.LabelEntry a) module Keter.Types.Common data SSLConfig SSLFalse :: SSLConfig SSLTrue :: SSLConfig SSL :: !FilePath -> !Vector FilePath -> !FilePath -> SSLConfig data AppId AIBuiltin :: AppId AINamed :: !Appname -> AppId 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 EnsureAliveShouldBeBiggerThenZero :: !Int -> KeterException [keterExceptionGot] :: KeterException -> !Int 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 ReloadFrom :: Maybe String -> String -> LogMessage Terminating :: String -> LogMessage type HostBS = CI ByteString -- | A virtual host we want to serve content from. type Host = CI Text -- | A port for an individual app to listen on. type Port = Int -- | Used for versioning data types. class ToCurrent a where { type family Previous a; } toCurrent :: ToCurrent a => Previous a -> a type Plugins = [Plugin] data Plugin Plugin :: (Appname -> Object -> IO [(Text, Text)]) -> Plugin [pluginGetEnv] :: Plugin -> Appname -> Object -> IO [(Text, Text)] -- | Name of the application. Should just be the basename of the -- application file. type Appname = Text getAppname :: FilePath -> Text logEx :: Q Exp -- | 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. -- -- The Semigroup operation for Map is union, which -- prefers values from the left operand. If m1 maps a key -- k to a value a1, and m2 maps the same key -- to a different value a2, then their union m1 <> -- m2 maps k to a1. 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 -- -- 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 -- -- 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 -- -- 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 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 GHC.Classes.Ord Keter.Types.Common.AppId
instance GHC.Classes.Eq Keter.Types.Common.AppId
instance GHC.Show.Show Keter.Types.Common.KeterException
instance GHC.Classes.Ord Keter.Types.Common.SSLConfig
instance GHC.Classes.Eq Keter.Types.Common.SSLConfig
instance GHC.Show.Show Keter.Types.Common.SSLConfig
instance Data.Yaml.FilePath.ParseYamlFile Keter.Types.Common.SSLConfig
instance Data.Aeson.Types.ToJSON.ToJSON Keter.Types.Common.SSLConfig
instance Data.Aeson.Types.FromJSON.FromJSON Keter.Types.Common.SSLConfig
instance GHC.Show.Show Keter.Types.Common.LogMessage
instance GHC.Exception.Type.Exception Keter.Types.Common.KeterException
instance GHC.Show.Show Keter.Types.Common.AppId
instance Keter.Types.Common.ToCurrent a => Keter.Types.Common.ToCurrent (GHC.Maybe.Maybe 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 GHC.Generics.Generic Keter.Types.Middleware.MiddlewareConfig
instance GHC.Show.Show Keter.Types.Middleware.MiddlewareConfig
instance Data.Aeson.Types.FromJSON.FromJSON Keter.Types.Middleware.MiddlewareConfig
instance Data.Aeson.Types.ToJSON.ToJSON Keter.Types.Middleware.MiddlewareConfig
module Network.HTTP.ReverseProxy.Rewrite
data ReverseProxyConfig
ReverseProxyConfig :: Text -> Int -> Bool -> Text -> !SSLConfig -> Maybe Int -> Set RewriteRule -> Set RewriteRule -> ReverseProxyConfig
[reversedHost] :: ReverseProxyConfig -> Text
[reversedPort] :: ReverseProxyConfig -> Int
[reversedUseSSL] :: ReverseProxyConfig -> Bool
[reversingHost] :: ReverseProxyConfig -> Text
[reversingUseSSL] :: ReverseProxyConfig -> !SSLConfig
[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 GHC.Show.Show Network.HTTP.ReverseProxy.Rewrite.RewriteRule
instance GHC.Classes.Ord Network.HTTP.ReverseProxy.Rewrite.RewriteRule
instance GHC.Classes.Eq Network.HTTP.ReverseProxy.Rewrite.RewriteRule
instance GHC.Show.Show Network.HTTP.ReverseProxy.Rewrite.ReverseProxyConfig
instance GHC.Classes.Ord Network.HTTP.ReverseProxy.Rewrite.ReverseProxyConfig
instance GHC.Classes.Eq Network.HTTP.ReverseProxy.Rewrite.ReverseProxyConfig
instance GHC.Show.Show Network.HTTP.ReverseProxy.Rewrite.RPEntry
instance Data.Aeson.Types.FromJSON.FromJSON Network.HTTP.ReverseProxy.Rewrite.ReverseProxyConfig
instance Data.Aeson.Types.ToJSON.ToJSON Network.HTTP.ReverseProxy.Rewrite.ReverseProxyConfig
instance Data.Default.Class.Default Network.HTTP.ReverseProxy.Rewrite.ReverseProxyConfig
instance Data.Aeson.Types.FromJSON.FromJSON Network.HTTP.ReverseProxy.Rewrite.RewriteRule
instance Data.Aeson.Types.ToJSON.ToJSON Network.HTTP.ReverseProxy.Rewrite.RewriteRule
-- | 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 -> !FilePath -> !FilePath -> Maybe Config -> 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 GHC.Classes.Ord Keter.Types.V04.StaticHost
instance GHC.Classes.Eq Keter.Types.V04.StaticHost
instance GHC.Classes.Ord Keter.Types.V04.Redirect
instance GHC.Classes.Eq Keter.Types.V04.Redirect
instance Data.Default.Class.Default Keter.Types.V04.KeterConfig
instance Data.Yaml.FilePath.ParseYamlFile Keter.Types.V04.KeterConfig
instance Data.Default.Class.Default Keter.Types.V04.PortSettings
instance Data.Aeson.Types.FromJSON.FromJSON Keter.Types.V04.PortSettings
instance Data.Yaml.FilePath.ParseYamlFile Keter.Types.V04.TLSConfig
instance Data.Yaml.FilePath.ParseYamlFile Keter.Types.V04.BundleConfig
instance Data.Aeson.Types.FromJSON.FromJSON Keter.Types.V04.Redirect
instance Data.Yaml.FilePath.ParseYamlFile Keter.Types.V04.StaticHost
instance Data.Yaml.FilePath.ParseYamlFile Keter.Types.V04.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 -> !Bool -> 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:
--
-- -- data MyException = ThisException | ThatException -- deriving Show -- -- 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 -- -- 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 -- -- 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 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
-- | A set of values a.
data Set a
data SSLConfig
SSLFalse :: SSLConfig
SSLTrue :: SSLConfig
SSL :: !FilePath -> !Vector FilePath -> !FilePath -> SSLConfig
data AppId
AIBuiltin :: AppId
AINamed :: !Appname -> AppId
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
EnsureAliveShouldBeBiggerThenZero :: !Int -> KeterException
[keterExceptionGot] :: KeterException -> !Int
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
ReloadFrom :: Maybe String -> String -> LogMessage
Terminating :: String -> LogMessage
type HostBS = CI ByteString
-- | A virtual host we want to serve content from.
type Host = CI Text
-- | A port for an individual app to listen on.
type Port = Int
-- | Used for versioning data types.
class ToCurrent a where {
type family Previous a;
}
toCurrent :: ToCurrent a => Previous a -> a
type Plugins = [Plugin]
data Plugin
Plugin :: (Appname -> Object -> IO [(Text, Text)]) -> Plugin
[pluginGetEnv] :: Plugin -> Appname -> Object -> IO [(Text, Text)]
-- | Name of the application. Should just be the basename of the
-- application file.
type Appname = Text
getAppname :: FilePath -> Text
logEx :: Q Exp
data RewriteRule
RewriteRule :: Text -> Text -> Text -> RewriteRule
[ruleHeader] :: RewriteRule -> Text
[ruleRegex] :: RewriteRule -> Text
[ruleReplacement] :: RewriteRule -> Text
data ReverseProxyConfig
ReverseProxyConfig :: Text -> Int -> Bool -> Text -> !SSLConfig -> Maybe Int -> Set RewriteRule -> Set RewriteRule -> ReverseProxyConfig
[reversedHost] :: ReverseProxyConfig -> Text
[reversedPort] :: ReverseProxyConfig -> Int
[reversedUseSSL] :: ReverseProxyConfig -> Bool
[reversingHost] :: ReverseProxyConfig -> Text
[reversingUseSSL] :: ReverseProxyConfig -> !SSLConfig
[reverseTimeout] :: ReverseProxyConfig -> Maybe Int
[rewriteResponseRules] :: ReverseProxyConfig -> Set RewriteRule
[rewriteRequestRules] :: ReverseProxyConfig -> Set RewriteRule
-- | 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]
data TLSConfig
TLSConfig :: !Settings -> !FilePath -> !FilePath -> Maybe Config -> TLSConfig
data RestartCount
UnlimitedRestarts :: RestartCount
LimitedRestarts :: !Word -> RestartCount
data BackgroundConfig
BackgroundConfig :: !FilePath -> !Vector Text -> !Map Text Text -> !RestartCount -> !Word -> !Set Text -> BackgroundConfig
[bgconfigExec] :: BackgroundConfig -> !FilePath
[bgconfigArgs] :: BackgroundConfig -> !Vector Text
[bgconfigEnvironment] :: BackgroundConfig -> !Map Text Text
[bgconfigRestartCount] :: BackgroundConfig -> !RestartCount
[bgconfigRestartDelaySeconds] :: BackgroundConfig -> !Word
[bgconfigForwardEnv] :: BackgroundConfig -> !Set Text
data AppInput
AIBundle :: !FilePath -> !EpochTime -> AppInput
AIData :: !BundleConfig -> AppInput
data WebAppConfig port
WebAppConfig :: !FilePath -> !Vector Text -> !Map Text Text -> !Host -> !Set Host -> !SSLConfig -> !port -> !Set Text -> !Maybe Int -> !Maybe Int -> WebAppConfig port
[waconfigExec] :: WebAppConfig port -> !FilePath
[waconfigArgs] :: WebAppConfig port -> !Vector Text
[waconfigEnvironment] :: WebAppConfig port -> !Map Text Text
-- | primary host, used for approot
[waconfigApprootHost] :: WebAppConfig port -> !Host
-- | all hosts, not including the approot host
[waconfigHosts] :: WebAppConfig port -> !Set Host
[waconfigSsl] :: WebAppConfig port -> !SSLConfig
[waconfigPort] :: WebAppConfig port -> !port
[waconfigForwardEnv] :: WebAppConfig port -> !Set Text
-- | how long are connections supposed to last
[waconfigTimeout] :: WebAppConfig port -> !Maybe Int
-- | how long in microseconds the app gets before we expect it to bind to a
-- port (default 90 seconds)
[waconfigEnsureAliveTimeout] :: WebAppConfig port -> !Maybe Int
data RedirectDest
RDUrl :: !Text -> RedirectDest
RDPrefix :: !IsSecure -> !Host -> !Maybe Port -> RedirectDest
data SourcePath
SPAny :: SourcePath
SPSpecific :: !Text -> SourcePath
data RedirectAction
RedirectAction :: !SourcePath -> !RedirectDest -> RedirectAction
data RedirectConfig
RedirectConfig :: !Set Host -> !Int -> !Vector RedirectAction -> !SSLConfig -> RedirectConfig
[redirconfigHosts] :: RedirectConfig -> !Set Host
[redirconfigStatus] :: RedirectConfig -> !Int
[redirconfigActions] :: RedirectConfig -> !Vector RedirectAction
[redirconfigSsl] :: RedirectConfig -> !SSLConfig
data StaticFilesConfig
StaticFilesConfig :: !FilePath -> !Set Host -> !Bool -> ![MiddlewareConfig] -> !Maybe Int -> !SSLConfig -> StaticFilesConfig
[sfconfigRoot] :: StaticFilesConfig -> !FilePath
[sfconfigHosts] :: StaticFilesConfig -> !Set Host
[sfconfigListings] :: StaticFilesConfig -> !Bool
[sfconfigMiddleware] :: StaticFilesConfig -> ![MiddlewareConfig]
[sfconfigTimeout] :: StaticFilesConfig -> !Maybe Int
[sfconfigSsl] :: StaticFilesConfig -> !SSLConfig
type ProxyAction = (ProxyActionRaw, RequiresSecure)
-- | An action to be performed for a requested hostname.
--
-- This datatype is very similar to Stanza, but is necessarily separate
-- since:
--
--