refactor(users/Profpatsch/whatcd-resolver): use builder for otel
This makes `addAttribute` a little nicer to handle, because we can now just put a `(builder, value)` tuple (yay, orphan instances!) Change-Id: I145a0d2b764d44755fb3c548a40188f13ee4ed83 Reviewed-on: https://cl.tvl.fyi/c/depot/+/12956 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
This commit is contained in:
parent
444b67b010
commit
77aadfa46c
7 changed files with 62 additions and 29 deletions
|
|
@ -1,7 +1,9 @@
|
|||
{-# LANGUAGE DeriveAnyClass #-}
|
||||
{-# OPTIONS_GHC -Wno-orphans #-}
|
||||
|
||||
module AppT where
|
||||
|
||||
import Builder
|
||||
import Control.Monad.Logger qualified as Logger
|
||||
import Control.Monad.Logger.CallStack
|
||||
import Control.Monad.Reader
|
||||
|
|
@ -98,6 +100,9 @@ addEventSimple span name =
|
|||
jsonAttribute :: Enc -> Otel.Attribute
|
||||
jsonAttribute e = e & Enc.encToTextPretty & Otel.toAttribute
|
||||
|
||||
instance Otel.ToAttribute (a, TextBuilder a) where
|
||||
toAttribute (a, b) = buildText b a & Otel.toAttribute
|
||||
|
||||
parseOrThrow :: (MonadThrow m, MonadIO m) => Otel.Span -> FieldParser from to -> from -> m to
|
||||
parseOrThrow span fp f =
|
||||
f & Field.runFieldParser fp & \case
|
||||
|
|
@ -208,6 +213,7 @@ runPGTransaction (Transaction transaction) = do
|
|||
withPGTransaction pool $ \conn -> do
|
||||
unliftIO $ runReaderT transaction conn
|
||||
|
||||
-- | Best effort to convert a value to a JSON string that can be put in an Otel attribute.
|
||||
toOtelJsonAttr :: (ToOtelJsonAttr a) => a -> Otel.Attribute
|
||||
toOtelJsonAttr = toOtelJsonAttrImpl >>> Enc.encToTextPretty >>> Otel.toAttribute
|
||||
|
||||
|
|
@ -215,6 +221,9 @@ toOtelJsonAttr = toOtelJsonAttrImpl >>> Enc.encToTextPretty >>> Otel.toAttribute
|
|||
class ToOtelJsonAttr a where
|
||||
toOtelJsonAttrImpl :: a -> Enc
|
||||
|
||||
instance ToOtelJsonAttr Enc where
|
||||
toOtelJsonAttrImpl = id
|
||||
|
||||
-- | Bytes are leniently converted to Text, because they are often used as UTF-8 encoded strings.
|
||||
instance ToOtelJsonAttr ByteString where
|
||||
toOtelJsonAttrImpl = Enc.text . bytesToTextUtf8Lenient
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue