-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Web application deployment manager, focusing on Haskell web frameworks -- -- Handles deployment of web apps, providing a reverse proxy to achieve -- zero downtime deployments. For more information, please see the README -- on Github: https://github.com/snoyberg/keter#readme -- -- Release history: -- --
-- 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 Show (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 -- | 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 data FilePath :: * -- | 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 :: * data Set a :: * -> * data Map k a :: * -> * -> * class (Typeable e, Show e) => Exception e 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 -> 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 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 -> !FilePath -> ListeningPort LPInsecure :: !HostPreference -> !Port -> ListeningPort data KeterConfig KeterConfig :: FilePath -> PortSettings -> !(NonEmptyVector ListeningPort) -> Maybe Text -> !(Vector (Stanza ())) -> Bool -> !Int -> !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 data Stanza port StanzaStaticFiles :: !StaticFilesConfig -> Stanza port StanzaRedirect :: !RedirectConfig -> Stanza port StanzaWebApp :: !(WebAppConfig port) -> Stanza port StanzaReverseProxy :: !ReverseProxyConfig -> Stanza port StanzaBackground :: !BackgroundConfig -> Stanza port -- | An action to be performed for a requested hostname. -- -- This datatype is very similar to Stanza, but is necessarily separate -- since: -- --