h$"!3      !"#$%&'()*+,-./012None >core-telemetryOutput metrics to the terminal. This is mostly useful for debugging, but it can also be used as general output mechanism if your program is mostly concerned with gathering metrics and displaying them.None None >dcore-telemetry=Indicate which "dataset" spans and events will be posted intocore-telemetryConfigure your application to send telemetry in the form of spans and traces to the Honeycomb observability service.  context <-  ... context' <-   [] context   context' ... None > H  core-telemetryGet the MAC address of the first interface that's not the loopback device. If something goes weird then we return a valid but bogus address (in the locally administered addresses block).  core-telemetryGenerate an identifier suitable for use in a trace context. Trace identifiers are 16 bytes. We incorporate the time to nanosecond precision, the host system's MAC address, and a random element. This is similar to a version 1 UUID, but we render the least significant bits of the time stamp ordered first so that visual distinctiveness is on the left. The MAC address in the lower 48 bits is not reversed, leaving the most distinctiveness [the actual host as opposed to manufacturer OIN] hanging on the right hand edge of the identifier. The two bytes of randomness are in the middle. core-telemetryGenerate an identifier for a span. We only have 8 bytes to work with. We use the nanosecond prescision timestamp with the nibbles reversed, and then overwrite the last two bytes with a random value. core-telemetry Render the  and  identifiers representing a span calling onward to another component in a distributed system. The W3C Trace Context recommendation specifies the HTTP header  traceparent with the 16 byte trace identifier and the 8 byte span identifier formatted as follows: traceparent: 00-fd533dbf96ecdc610156482ae36c24f7-1d1e9dbf96ec4649-00  core-telemetryGet the identifier of the current trace, if you are ithin a trace started by  beginTrace or  usingTrace. core-telemetryGet the identifier of the current span, if you are currently within a span created by  encloseSpan.      None > core-telemetryA telemetry value that can be sent over the wire. This is a wrapper around JSON values of type string, number, or boolean. You create these using the  method provided by a " instance and passing them to the  function in a span or  if noting an event.core-telemetryRecord the name of the service that this span and its children are a part of. A reasonable default is the name of the binary that's running, but frequently you'll want to put something a bit more nuanced or specific to your application. This is the overall name of the independent service, component, or program complimenting the label set when calling , which by contrast descibes the name of the current phase, step, or even function name within the overall scope of the "service".This will end up as the  service_name parameter when exported.core-telemetry4Activate the telemetry subsystem for use within the   monad.Each exporter specified here will add setup and configuration to the context, including command-line options and environment variables needed as approrpiate:  context' <-  [  ] context This will allow you to then select the appropriate backend at runtime: $ !burgerservice --telemetry=console 8which will result in it spitting out metrics as it goes,  calories = 667.0 flavour = true meal_name = "hamburger" precise = 45.0  and so on.core-telemetry Begin a span.You need to call this from within the context of a trace, which is established either by calling  or + somewhere above this point in the program.You can nest spans as you make your way through your program, which means each span has a parent (except for the first one, which is the root span) In the context of a trace, allows an observability tool to reconstruct the sequence of events and to display them as a nested tree correspoding to your program flow.1The current time will be noted when entering the 3< this span encloses, and its duration recorded when the sub Program exits. Start time, duration, the unique identifier of the span (generated for you), the identifier of the parent, and the unique identifier of the overall trace will be appended as metadata points and then sent to the telemetry channel.core-telemetry9Start a new trace. A random identifier will be generated.You must have a single "root span" immediately below starting a new trace.  program ::     () program = do  $ do ( "Service Request" $ do ... core-telemetryBegin a new trace, but using a trace identifier provided externally. This is the most common case. Internal services that are play a part of a larger request will inherit a job identifier, sequence number, or other externally supplied unique code. Even an internet facing web service might have a correlation ID provided by the outside load balancers.If you are continuting an existing trace within the execution path of another, larger, enclosing service then you need to specify what the parent span's identifier is in the second argument.  program ::     () program = do -- do something that gets the trace ID trace <- ... -- and something to get the parent span ID parent <- ...  ( trace) (4 ( span)) $ do , "Internal processing" $ do ... core-telemetry%Add measurements to the current span.   [  "calories" (667 :: 5) , % "precise" measurement ,  "meal_name" ("hamburger" :: 6) ,  "flavour" 7 ] The 3 function is a method provided by instances of the  Telemtetry typeclass which is mostly a wrapper around constructing key/value pairs suitable to be sent as measurements up to an observability service.core-telemetryRecord telemetry about an event. Specify a label for the event and then whichever metrics you wish to record.The emphasis of this package is to create traces and spans. There are, however, times when you just want to send telemetry about an event. You can use  to accomplish this.If you do call ' within an enclosing span created with  (the usual and expected use case) then this event will be "linked" to this span so that the observability tool can display it attached to the span in the in which it occured.  & "Make tea" [  "sugar" 8 ] core-telemetry,Override the start time of the current span.Under normal circumstances this shouldn't be necessary. The start and end of a span are recorded automatically when calling . Observabilty tools are designed to be used live; traces and spans should be created in real time in your code.core-telemetry8Reset the accumulated metadata metrics to the emtpy set.This isn't something you'd need in normal circumstances, as inheriting contextual metrics from surrounding code is usually what you want. But if you have a significant change of setting then clearing the attached metadata may be appropriate; after all, observability tools visualizing a trace will show you the context an event was encountered in.$core-telemetry%The usual warning about assuming the  ByteString is ASCII or UTF-8 applies here. Don't use this to send binary mush.%core-telemetry%The usual warning about assuming the  ByteString is ASCII or UTF-8 applies here. Don't use this to send binary mush.None >!n2core-telemetryOutput metrics to stdout" in the form of a raw JSON object.22None!! 29  !"#$% &'()*+,-./0123456789:;<=>? @ABCDEFGHCDICDJ-core-telemetry-0.1.9.1-Kif0pGsTwaaHZvHXMEJQu3Core.Telemetry.ObservabilityCore.Telemetry.ConsoleCore.Telemetry.GeneralCore.Telemetry.HoneycombCore.Telemetry.IdentifiersCore.Telemetry.StructuredCore.Program.Execute configureinitializeTelemetry executeWithProgramconsoleExporterNoneCore.Telemetry+core-program-0.4.4.0-1m1Y8NqH2qKHUI6yiWrIPjCore.Program.ContextSpanTraceExportergeneralExporterDatasethoneycombExporterhostMachineIdentitycreateIdentifierTracetoHexReversed64 toHexNormal64toHexReversed32 toHexNormal32createIdentifierSpancreateTraceParentHeadergetIdentifierTracegetIdentifierSpanLabel Telemetrymetric MetricValuesetServiceName encloseSpan beginTrace usingTrace telemetry sendEvent setStartTime clearMetrics$fTelemetryJsonValue$fTelemetryBool$fTelemetryText$fTelemetryText0$fTelemetryByteString$fTelemetryByteString0 $fTelemetry[]$fTelemetryRope$fTelemetryScientific$fTelemetryDouble$fTelemetryFloat$fTelemetryInteger$fTelemetryWord64$fTelemetryWord32$fTelemetryInt64$fTelemetryInt32$fTelemetryInt$fShowMetricValuestructuredExporterbase GHC.MaybeJustghc-prim GHC.TypesInt(core-text-0.3.5.0-E8dMwZxEKVG1Ki9JsESAc2Core.Text.RopeRopeTrueFalse