diff options
author | Gregor Kleen <pngwjpgh@users.noreply.github.com> | 2016-07-17 14:23:18 +0200 |
---|---|---|
committer | Gregor Kleen <pngwjpgh@users.noreply.github.com> | 2016-07-17 14:23:18 +0200 |
commit | ac4cf4a0a494eafe55364f816569c517684fdf32 (patch) | |
tree | aef00a7e75baf2467761ee147c6d458090e3ea19 /server | |
parent | 7f84192054e2f3c2e379588b15cf73aaecfbad0b (diff) | |
download | thermoprint-ac4cf4a0a494eafe55364f816569c517684fdf32.tar thermoprint-ac4cf4a0a494eafe55364f816569c517684fdf32.tar.gz thermoprint-ac4cf4a0a494eafe55364f816569c517684fdf32.tar.bz2 thermoprint-ac4cf4a0a494eafe55364f816569c517684fdf32.tar.xz thermoprint-ac4cf4a0a494eafe55364f816569c517684fdf32.zip |
override some dyre params via environment
Diffstat (limited to 'server')
-rw-r--r-- | server/src/Thermoprint/Server.hs | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/server/src/Thermoprint/Server.hs b/server/src/Thermoprint/Server.hs index f73a418..07462da 100644 --- a/server/src/Thermoprint/Server.hs +++ b/server/src/Thermoprint/Server.hs | |||
@@ -67,6 +67,8 @@ import Servant.API | |||
67 | import Servant.Utils.Links | 67 | import Servant.Utils.Links |
68 | import Network.URI | 68 | import Network.URI |
69 | 69 | ||
70 | import System.Environment (lookupEnv) | ||
71 | |||
70 | import Database.Persist.Sql (runMigrationSilent, ConnectionPool, runSqlPool) | 72 | import Database.Persist.Sql (runMigrationSilent, ConnectionPool, runSqlPool) |
71 | 73 | ||
72 | 74 | ||
@@ -135,28 +137,33 @@ thermoprintServer :: ( MonadLoggerIO m | |||
135 | -> (m :~> IO) -- ^ 'dyre' controls the base of the monad-transformer-stack ('IO') but we let the user specify much of the rest of it (we handle 'ResourceT' ourselves, since we need it to fork properly). Therefore we require a specification of how to collapse the stack. | 137 | -> (m :~> IO) -- ^ 'dyre' controls the base of the monad-transformer-stack ('IO') but we let the user specify much of the rest of it (we handle 'ResourceT' ourselves, since we need it to fork properly). Therefore we require a specification of how to collapse the stack. |
136 | -> ResourceT m (Config (ResourceT m)) -> IO () | 138 | -> ResourceT m (Config (ResourceT m)) -> IO () |
137 | -- ^ Run the server | 139 | -- ^ Run the server |
138 | thermoprintServer dyre io = Dyre.wrapMain $ Dyre.defaultParams | 140 | thermoprintServer dyre io = do |
139 | { Dyre.projectName = "thermoprint-server" | 141 | cfgDir <- lookupEnv "THERMOPRINT_CONFIG" |
140 | , Dyre.realMain = realMain | 142 | cacheDir <- lookupEnv "THERMOPRINT_CACHE" |
141 | , Dyre.showError = flip (\msg -> fmap (\cfg -> cfg { dyreError = Just msg })) | 143 | Dyre.wrapMain $ Dyre.defaultParams |
142 | , Dyre.configCheck = dyre | 144 | { Dyre.projectName = "thermoprint-server" |
143 | } | 145 | , Dyre.realMain = realMain |
144 | where | 146 | , Dyre.showError = flip (\msg -> fmap (\cfg -> cfg { dyreError = Just msg })) |
145 | realMain cfg = unNat (io . Nat runResourceT) $ do | 147 | , Dyre.configCheck = dyre |
146 | tMgr <- threadManager resourceForkIO | 148 | , Dyre.configDir = cfgDir |
147 | flip finally (cleanup tMgr) $ do | 149 | , Dyre.cacheDir = cacheDir |
148 | Config{..} <- cfg | 150 | } |
149 | maybe (return ()) ($(logErrorS) "Dyre" . T.pack) dyreError | 151 | where |
150 | mapM_ ($(logWarnS) "DB") =<< runSqlPool (runMigrationSilent migrateAll) =<< ask | 152 | realMain cfg = unNat (io . Nat runResourceT) $ do |
151 | forM_ printers $ fork tMgr . runPrinter | 153 | tMgr <- threadManager resourceForkIO |
152 | gcChan <- liftIO newTChanIO | 154 | flip finally (cleanup tMgr) $ do |
153 | fork tMgr $ jobGC gcChan | 155 | Config{..} <- cfg |
154 | let | 156 | maybe (return ()) ($(logErrorS) "Dyre" . T.pack) dyreError |
155 | runQM' (queueManagers -> QMConfig qm nat) printer = unNat nat $ runQM gcChan qm printer | 157 | mapM_ ($(logWarnS) "DB") =<< runSqlPool (runMigrationSilent migrateAll) =<< ask |
156 | mapM_ (fork tMgr . uncurry runQM') $ Map.toList printers | 158 | forM_ printers $ fork tMgr . runPrinter |
157 | nChan <- liftIO $ newBroadcastTChanIO | 159 | gcChan <- liftIO newTChanIO |
158 | let | 160 | fork tMgr $ jobGC gcChan |
159 | printerUrl :: API.PrinterId -> URI | 161 | let |
160 | printerUrl = safeLink thermoprintAPI (Proxy :: Proxy ("jobs" :> QueryParam "printer" API.PrinterId :> Get '[JSON] (Seq (API.JobId, UTCTime, JobStatus)))) | 162 | runQM' (queueManagers -> QMConfig qm nat) printer = unNat nat $ runQM gcChan qm printer |
161 | mapM_ (fork tMgr . uncurry (notifyOnChange nChan ((==) `on` fromZipper)) . bimap printerUrl queue) $ Map.toList printers | 163 | mapM_ (fork tMgr . uncurry runQM') $ Map.toList printers |
162 | liftIO . Warp.runSettings warpSettings . withPush nChan . serve thermoprintAPI . flip enter API.thermoprintServer =<< handlerNat printers nChan | 164 | nChan <- liftIO $ newBroadcastTChanIO |
165 | let | ||
166 | printerUrl :: API.PrinterId -> URI | ||
167 | printerUrl = safeLink thermoprintAPI (Proxy :: Proxy ("jobs" :> QueryParam "printer" API.PrinterId :> Get '[JSON] (Seq (API.JobId, UTCTime, JobStatus)))) | ||
168 | mapM_ (fork tMgr . uncurry (notifyOnChange nChan ((==) `on` fromZipper)) . bimap printerUrl queue) $ Map.toList printers | ||
169 | liftIO . Warp.runSettings warpSettings . withPush nChan . serve thermoprintAPI . flip enter API.thermoprintServer =<< handlerNat printers nChan | ||