The transaction duration was notably off, doing:
```
curl localhost:3000/rpc/sleep?seconds=5 -i
```
Shows `46.1` for the `transaction;dur`, with this fix we obtain
`5007.3`.
Fixes https://github.com/PostgREST/postgrest/issues/4522
This also fixes inaccurate "schema cache queried" logs,
see https://github.com/PostgREST/postgrest/issues/4551.
(cherry picked from commit 013f078bc4)
21 lines
614 B
Haskell
21 lines
614 B
Haskell
module PostgREST.TimeIt
|
|
( timeItT
|
|
) where
|
|
|
|
import GHC.Clock
|
|
import Protolude
|
|
|
|
{-
|
|
- The signature is the same as https://hackage.haskell.org/package/timeit-2.0/docs/src/System-TimeIt.html#timeIt,
|
|
- we vendor this functionality because it gave errors as shown on https://github.com/PostgREST/postgrest/issues/4522 plus
|
|
- the function is small enough. This vendored function is different in that the result is in milliseconds.
|
|
-}
|
|
timeItT :: MonadIO m => m a -> m (Double, a)
|
|
timeItT p = do
|
|
s <- liftIO getMonotonicTime
|
|
x <- p
|
|
e <- liftIO getMonotonicTime
|
|
let time = (e - s) * 1000
|
|
return (time, x)
|
|
|