View Source API Reference Data Streams Ex v1.2.2

Modules

This is a port of the data-streams-go library to Elixir.

A GenServer instance responsible for aggregating many points of data together into 10 second buckets, and then sending them to the Datadog agent. It holds many structs in its memory, looking something like this

Responsible for parsing application configuration to usable chunks in the application.

Logic for linking current running container id to data stream traces.

This module deals with storing a Datadog.DataStreams.Pathway in process, so it can be propagated later on. In Golang, this is handled via Context which is a grab bag that is passed down the whole calling stack. We don't have an equivalent in Elixir, so we instead piggy back off of OpenTelemetry.Baggage. This essentially lets us do the same thing without needing to manually pass data down the calling stack.

Fowler-Noll-Vo variant 1 64-bit hash implementation. Use for Datadog.DataStreams.Pathway hashing.

Functions for integrating Kafka tracing with DataStreams.

A pathway is used to monitor how payloads are sent across different services.

Encoding logic for a payload. This is the top level struct we send to Datadog. It wraps all other information. These are primarily sent via MessagePack, although uses Protobuf encoded binary for latency records.

Handles propagating Datadog.DataStreams.Pathway via encoding and adding to message headers.

A helper module to enumerate and filter over data stream tags.

An HTTP client for Datadog data streams reporting. It uses the Finch library for requests.

A minimal implementation of the distributed quantile sketch (DDSketch) algorithm as implemented in the sketches-go library. For more information, please read the sketches-go README.

Basic module for handling various index mapping algorithms. All functions in this module proxy to the respective index mapping implementation module.

LogarithmicMapping is an IndexMapping that is memory-optimal, that is to say that given a targeted relative accuracy, it requires the least number of indices to cover a given range of values. This is done by logarithmically mapping floating-point values to integers.

Different stores use different data structures and techniques to store data. Each with unique trade offs and memory usage. All functions in this module proxy to the respective index mapping implementation module.

The Dense store is a dynamically growing contiguous (non-sparse) store. The number of bins are bound only by the size of the :array that can be allocated.