62 lines
1.6 KiB
Haskell
62 lines
1.6 KiB
Haskell
{-# LANGUAGE OverloadedStrings #-}
|
|
|
|
module Main (main) where
|
|
|
|
import Aenebris.Config
|
|
import Aenebris.Connection
|
|
( defaultTimeoutConfig
|
|
, microsPerSecond
|
|
, tcUpstreamReadSeconds
|
|
)
|
|
import Aenebris.Proxy
|
|
import Network.HTTP.Client
|
|
( ManagerSettings(..)
|
|
, defaultManagerSettings
|
|
, newManager
|
|
, responseTimeoutMicro
|
|
)
|
|
import System.Environment (getArgs)
|
|
import System.Exit (exitFailure)
|
|
import System.IO (hPutStrLn, stderr)
|
|
|
|
main :: IO ()
|
|
main = do
|
|
args <- getArgs
|
|
|
|
-- Get config file path from args or use default
|
|
let configPath = case args of
|
|
(path:_) -> path
|
|
[] -> "config.yaml"
|
|
|
|
putStrLn $ "Loading configuration from: " ++ configPath
|
|
|
|
result <- loadConfig configPath
|
|
case result of
|
|
Left err -> do
|
|
hPutStrLn stderr $ "ERROR: Failed to load configuration"
|
|
hPutStrLn stderr err
|
|
exitFailure
|
|
|
|
Right config -> do
|
|
case validateConfig config of
|
|
Left err -> do
|
|
hPutStrLn stderr $ "ERROR: Invalid configuration"
|
|
hPutStrLn stderr err
|
|
exitFailure
|
|
|
|
Right () -> do
|
|
putStrLn "Configuration loaded and validated successfully"
|
|
|
|
let upstreamMicros = tcUpstreamReadSeconds defaultTimeoutConfig
|
|
* microsPerSecond
|
|
managerSettings = defaultManagerSettings
|
|
{ managerResponseTimeout = responseTimeoutMicro upstreamMicros
|
|
}
|
|
manager <- newManager managerSettings
|
|
|
|
-- Initialize proxy state (load balancers + health checkers)
|
|
proxyState <- initProxyState config manager
|
|
|
|
-- Start the proxy
|
|
startProxy proxyState
|