|
|
|
@ -34,6 +34,7 @@ import Language.Haskell.Printf |
|
|
|
import Network.HTTP.Client (defaultManagerSettings, |
|
|
|
import Network.HTTP.Client (defaultManagerSettings, |
|
|
|
httpLbs, newManager, |
|
|
|
httpLbs, newManager, |
|
|
|
parseRequest, |
|
|
|
parseRequest, |
|
|
|
|
|
|
|
responseStatus, |
|
|
|
withManager) |
|
|
|
withManager) |
|
|
|
import Network.HTTP.Client.MultipartFormData (formDataBody, partBS) |
|
|
|
import Network.HTTP.Client.MultipartFormData (formDataBody, partBS) |
|
|
|
|
|
|
|
|
|
|
|
@ -48,6 +49,7 @@ sinkThread server token killMv chan logger = whileM_ (not <$> wasKilled) $ do |
|
|
|
log Info "GotifyTradeSink thread started" |
|
|
|
log Info "GotifyTradeSink thread started" |
|
|
|
manager <- newManager defaultManagerSettings |
|
|
|
manager <- newManager defaultManagerSettings |
|
|
|
log Debug "Connected" |
|
|
|
log Debug "Connected" |
|
|
|
|
|
|
|
sendToSink manager "Gotify tradesink started" |
|
|
|
sinkThread' manager |
|
|
|
sinkThread' manager |
|
|
|
log Info "Disconnected" |
|
|
|
log Info "Disconnected" |
|
|
|
where |
|
|
|
where |
|
|
|
@ -55,15 +57,8 @@ sinkThread server token killMv chan logger = whileM_ (not <$> wasKilled) $ do |
|
|
|
sinkThread' manager = do |
|
|
|
sinkThread' manager = do |
|
|
|
maybeTrade <- BC.tryReadChan chan |
|
|
|
maybeTrade <- BC.tryReadChan chan |
|
|
|
case maybeTrade of |
|
|
|
case maybeTrade of |
|
|
|
Just trade -> do |
|
|
|
Just trade -> sendToSink manager (encodeTrade trade) |
|
|
|
request <- parseRequest $ server <> "/message?token=" <> token |
|
|
|
Nothing -> threadDelay 1000000 |
|
|
|
requestWithData <- |
|
|
|
|
|
|
|
formDataBody [ partBS "title" "Trade" |
|
|
|
|
|
|
|
, partBS "message" (encodeTrade trade) |
|
|
|
|
|
|
|
, partBS "priority" "5"] request |
|
|
|
|
|
|
|
void $ httpLbs requestWithData manager |
|
|
|
|
|
|
|
Nothing -> do |
|
|
|
|
|
|
|
threadDelay 1000000 |
|
|
|
|
|
|
|
whenM (isEmptyMVar killMv) $ sinkThread' manager |
|
|
|
whenM (isEmptyMVar killMv) $ sinkThread' manager |
|
|
|
|
|
|
|
|
|
|
|
wasKilled = isJust <$> tryReadMVar killMv |
|
|
|
wasKilled = isJust <$> tryReadMVar killMv |
|
|
|
@ -77,5 +72,14 @@ sinkThread server token killMv chan logger = whileM_ (not <$> wasKilled) $ do |
|
|
|
(strategyId . tradeSignalId $ trade) |
|
|
|
(strategyId . tradeSignalId $ trade) |
|
|
|
(signalName . tradeSignalId $ trade) |
|
|
|
(signalName . tradeSignalId $ trade) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sendToSink manager bs = do |
|
|
|
|
|
|
|
request <- parseRequest $ server <> "/message?token=" <> token |
|
|
|
|
|
|
|
requestWithData <- |
|
|
|
|
|
|
|
formDataBody [ partBS "title" "Message" |
|
|
|
|
|
|
|
, partBS "message" bs |
|
|
|
|
|
|
|
, partBS "priority" "5"] request |
|
|
|
|
|
|
|
response <- httpLbs requestWithData manager |
|
|
|
|
|
|
|
log Debug $ "Response status: " <> (T.pack . show . responseStatus) response |
|
|
|
|
|
|
|
|
|
|
|
stopSinkThread killMv threadId = putMVar killMv () >> threadDelay 10000000 |
|
|
|
stopSinkThread killMv threadId = putMVar killMv () >> threadDelay 10000000 |
|
|
|
|
|
|
|
|
|
|
|
|