mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-16 18:42:30 +03:00
33 lines
1017 B
Haskell
33 lines
1017 B
Haskell
|
module Hasura.PingSources
|
||
|
( runPingSources,
|
||
|
)
|
||
|
where
|
||
|
|
||
|
import Control.Concurrent.Extended qualified as Conc
|
||
|
import Hasura.Prelude
|
||
|
import Hasura.RQL.Types.Backend (Backend (..))
|
||
|
import Hasura.RQL.Types.Source (SourcePingCache, SourcePingInfo (..))
|
||
|
import Hasura.SQL.AnyBackend qualified as AB
|
||
|
|
||
|
-- | A forever running IO loop that performs regular pings for DBs that need it
|
||
|
-- these are used to send a fingerprint to third parties that wish to attribute
|
||
|
-- users to Hasura
|
||
|
runPingSources ::
|
||
|
(String -> IO ()) ->
|
||
|
IO SourcePingCache ->
|
||
|
IO a
|
||
|
runPingSources pingLog fetchPingCacheIO =
|
||
|
forever $ do
|
||
|
pingCache <- liftIO fetchPingCacheIO
|
||
|
for_ pingCache $ \someSourcePingInfo ->
|
||
|
AB.dispatchAnyBackend @Backend
|
||
|
someSourcePingInfo
|
||
|
\(thisSourcePingInfo :: SourcePingInfo b) ->
|
||
|
runPingSource @b
|
||
|
pingLog
|
||
|
(_spiName thisSourcePingInfo)
|
||
|
(_spiConnection thisSourcePingInfo)
|
||
|
|
||
|
-- Sleep the thread for a minute
|
||
|
liftIO $ Conc.sleep $ seconds 60
|