module Hasura.Backends.Postgres.Instances.PingSource
  ( runCockroachDBPing,
  )
where

import Data.Environment qualified as Env
import Data.Text qualified as T
import Database.PG.Query qualified as PG
import Hasura.Backends.Postgres.Connection qualified as PG
import Hasura.Backends.Postgres.Connection.Connect (withPostgresDB)
import Hasura.Prelude
import Hasura.RQL.Types.Common (SourceName, sourceNameToText)
import Hasura.Server.Version

runCockroachDBPing ::
  Env.Environment ->
  (String -> IO ()) ->
  SourceName ->
  PG.PostgresConnConfiguration ->
  IO ()
runCockroachDBPing env pingLog sourceName sourceConnection = do
  let versionMessage = "hasura-graphql-engine-version=" <> tshow currentVersion
      query = PG.fromText ("select 1 /* " <> versionMessage <> " */")
  result <- withPostgresDB env sourceConnection $ do
    PG.discardQE PG.dmlTxErrorHandler query () False
  case result of
    Left _ ->
      pingLog ("Ping for " <> T.unpack (sourceNameToText sourceName) <> " failed")
    Right _ ->
      pingLog ("Ping for " <> T.unpack (sourceNameToText sourceName) <> " succeeded")