core-telemetry 0.2.3.2 → 0.2.3.4
raw patch · 2 files changed
+25/−10 lines, 2 filesdep +zlibdep ~core-datadep ~core-programdep ~core-textPVP ok
version bump matches the API change (PVP)
Dependencies added: zlib
Dependency ranges changed: core-data, core-program, core-text
API changes (from Hackage documentation)
Files
- core-telemetry.cabal +5/−4
- lib/Core/Telemetry/Honeycomb.hs +20/−6
core-telemetry.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: core-telemetry-version: 0.2.3.2+version: 0.2.3.4 synopsis: Advanced telemetry description: This is part of a library to help build command-line programs, both tools and longer-running daemons.@@ -52,9 +52,9 @@ async , base >=4.11 && <5 , bytestring- , core-data >=0.3.3- , core-program >=0.5.0- , core-text >=0.3.7+ , core-data >=0.3.3.1+ , core-program >=0.5.0.2+ , core-text >=0.3.7.1 , exceptions , http-streams , io-streams@@ -67,4 +67,5 @@ , template-haskell >=2.14 && <3 , text , unix+ , zlib default-language: Haskell2010
lib/Core/Telemetry/Honeycomb.hs view
@@ -35,8 +35,9 @@ honeycombExporter, ) where +import Codec.Compression.GZip qualified as GZip (compress) import Control.Exception.Safe qualified as Safe (catch, finally, throw)-import Core.Data.Clock (Time, unTime, getCurrentTimeNanoseconds)+import Core.Data.Clock (Time, getCurrentTimeNanoseconds, unTime) import Core.Data.Structures (Map, fromMap, insertKeyValue, intoMap, lookupKeyValue) import Core.Encoding.Json import Core.Program.Arguments@@ -49,6 +50,8 @@ import Core.Text.Utilities import Data.ByteString (ByteString) import Data.ByteString qualified as B (ByteString)+import Data.ByteString.Builder (Builder)+import Data.ByteString.Builder qualified as Builder (lazyByteString) import Data.ByteString.Char8 qualified as C (append, null, putStrLn) import Data.ByteString.Lazy qualified as L (ByteString) import Data.Fixed@@ -57,7 +60,8 @@ import Network.Http.Client import System.Environment (lookupEnv) import System.Exit (ExitCode (..))-import System.IO.Streams (InputStream)+import System.IO.Streams (InputStream, OutputStream)+import System.IO.Streams qualified as Streams (write) import System.Posix.Process qualified as Posix (exitImmediately) {- |@@ -233,6 +237,13 @@ writeIORef r Nothing ) +compressBody :: Bytes -> OutputStream Builder -> IO ()+compressBody bytes o = do+ let x = fromBytes bytes+ let x' = GZip.compress x+ let b = Builder.lazyByteString x'+ Streams.write (Just b) o+ postEventToHoneycombAPI :: IORef (Maybe Connection) -> ApiKey -> Dataset -> JsonValue -> IO () postEventToHoneycombAPI r apikey dataset json = attempt False where@@ -242,7 +253,7 @@ c <- acquireConnection r -- actually transmit telemetry to Honeycomb- sendRequest c q (simpleBody (fromBytes (encodeToUTF8 json)))+ sendRequest c q (compressBody (encodeToUTF8 json)) receiveResponse c handler ) ( \(e :: SomeException) -> do@@ -251,14 +262,17 @@ cleanupConnection r case retrying of False -> do- putStrLn "Reattempting"+ putStrLn "internal: Reconnecting to Honeycomb" attempt True- True -> Safe.throw e+ True -> do+ putStrLn "internal: Failed to re-establish connection to Honeycomb"+ Safe.throw e ) q = buildRequest1 $ do http POST (fromRope ("/1/batch/" <> dataset)) setContentType "application/json"+ setHeader "Content-Encoding" "gzip" setHeader "X-Honeycomb-Team" (fromRope (apikey)) {-@@ -285,7 +299,7 @@ pure () _ -> do -- some other status!- putStrLn "Unexpected status returned;"+ putStrLn "internal: Unexpected status returned;" C.putStrLn body _ -> putStrLn "internal: wtf?" _ -> do