packages feed

pgmq-hasql-0.1.3.0: src/Pgmq/Hasql/Statements/QueueObservability.hs

module Pgmq.Hasql.Statements.QueueObservability
  ( listQueues,
    queueMetrics,
    allQueueMetrics,
  )
where

import Hasql.Decoders qualified as D
import Hasql.Encoders qualified as E
import Hasql.Statement (Statement, preparable)
import Pgmq.Hasql.Decoders (queueDecoder, queueMetricsDecoder)
import Pgmq.Hasql.Encoders (queueNameEncoder)
import Pgmq.Hasql.Statements.Types (QueueMetrics)
import Pgmq.Types (Queue, QueueName)

-- | List all queues that currently exist
-- | https://pgmq.github.io/pgmq/api/sql/functions/#list_queues
listQueues :: Statement () [Queue]
listQueues = preparable sql E.noParams decoder
  where
    sql = "select * from pgmq.list_queues()"
    decoder = D.rowList queueDecoder

-- | https://pgmq.github.io/pgmq/api/sql/functions/#metrics
queueMetrics :: Statement QueueName QueueMetrics
queueMetrics = preparable sql queueNameEncoder decoder
  where
    sql = "select * from pgmq.metrics($1)"
    decoder = D.singleRow queueMetricsDecoder

-- | https://pgmq.github.io/pgmq/api/sql/functions/#metrics_all
allQueueMetrics :: Statement () [QueueMetrics]
allQueueMetrics = preparable sql E.noParams decoder
  where
    sql = "select * from pgmq.metrics_all()"
    decoder = D.rowList queueMetricsDecoder