hot-shots
Version:
Node.js client for StatsD, DogStatsD, and Telegraf
447 lines (316 loc) • 22.4 kB
Markdown
CHANGELOG
=========
## 14.2.0 (2026-3-14)
* [](https://github.com/bdeitte) Upgrade mocha from 10.x to 11.x and fix all dev dependency security vulnerabilities (serialize-javascript, ajv)
* [](https://github.com/bdeitte) BREAKING: Drop Node.js 16 support, now requires Node.js >= 18.0.0. Usually this type of change only goes in a major update, but given how very old this is, making this a minor update.
## 14.1.1 (2026-3-1)
* [](https://github.com/bdeitte) Version 14.1.0 published without a README for an unknown reason. Ensuring everything is reset locally and running publish again to attempt to fix.
## 14.1.0 (2026-3-1)
* [](https://github.com/bdeitte) Fill in some missing areas for automated tests
* [](https://github.com/bdeitte) CPU performance improvements: cache byteLength in sendMessage, use hrtime.bigint in timer functions, use Map in overrideTags
## 14.0.0 (2026-2-15)
* [](https://github.com/bdeitte) Fix methods losing parameters when given empty object for sampleRate. Fixes [#43](https://github.com/bdeitte/hot-shots/issues/43)
* [](https://github.com/bdeitte) Fix increment/decrement losing tags when called with tags and callback but no value. Fixes [#139](https://github.com/bdeitte/hot-shots/issues/139)
* [](https://github.com/bdeitte) BREAKING: Add dynamic tag support for timer/asyncTimer/asyncDistTimer via context object. Wrapped functions now receive an additional `ctx` parameter as the last argument. Fixes [#202](https://github.com/bdeitte/hot-shots/issues/202)
* [](https://github.com/bdeitte) Fix TCP graceful reconnection not triggering due to string error comparison. Fixes [#301](https://github.com/bdeitte/hot-shots/issues/301)
* [](https://github.com/bdeitte) Allow ':' in telegraph values and add more tag tests. Fixes [#303](https://github.com/bdeitte/hot-shots/issues/303)
## 13.2.0 (2026-2-1)
* [](https://github.com/boblauer) Calculate buffer and message size in a way that accounts for non-ASCII characters
## 13.1.0 (2026-1-24)
* [](https://github.com/bdeitte) Add documentation for OpenTelemetry Collector StatsD receiver compatibility
* [](https://github.com/bdeitte) Sanitize protocol-breaking characters in metric names and tags. Fixes [#238](https://github.com/bdeitte/hot-shots/issues/238). Characters like `|`, `:`, `\n`, `#`, and `,` in metric names or tags are now replaced with `_` to prevent malformed packets.
* [](https://github.com/bdeitte) Document how to handle metrics on shutdown
* [](https://github.com/bdeitte) Prevent "socket ended" errors and handle the client disconnection errors more gracefully. Fixes [#247](https://github.com/bdeitte/hot-shots/issues/247)
## 13.0.0 (2026-1-19)
* [](https://github.com/bdeitte) Breaking: Prefix and suffix now automatically include period separators if needed. If you specify `prefix: 'myapp'`, it will be normalized to `'myapp.'`. Similarly, `suffix: 'prod'` becomes `'.prod'`. This ensures metrics like `myapp.request.time` instead of `myapprequest.time`. If your prefix/suffix already includes the period, no change is needed.
* [](https://github.com/bdeitte) Auto-detect UDP socket type (udp4/udp6) based on host IP address. IPv6 addresses like `::1` will automatically use `udp6` sockets, fixing issues on Node.js 17+ where `localhost` may resolve to IPv6.
* [](https://github.com/bdeitte) Add DogStatsD timestamp support via options object. Metric methods now accept an options object with `sampleRate`, `tags`, and `timestamp` properties. Timestamp can be a Date object or Unix seconds.
* [](https://github.com/bdeitte) Add Sinon.js for fake timers in tests, speeding up DNS cache and UDP socket options tests
## 12.1.0 (2026-1-4)
* [](https://github.com/bdeitte) Add client-side telemetry support with `includeDatadogTelemetry` option (disabled by default and in beta) and telemetryFlushInterval
## 12.0.0 (2025-12-16)
* [](https://github.com/bdeitte) event calls now use prefix and suffix
* [](https://github.com/bdeitte) mock mode no longer creates a socket
* [](https://github.com/bdeitte) using an IP no longer invokes DNS lookup
* [](https://github.com/bdeitte) client close no longer fails when errorHandler is defined but socket is null
* [](https://github.com/bdeitte) tags ending with '\\' no longer breaks telegraph
## 11.4.0 (2025-12-7)
* [](https://github.com/bdeitte) Add debug logging that can be enabled with "NODE_DEBUG=hot-shots"
## 11.3.0 (2025-11-30)
* [](https://github.com/bdeitte) Revert some buffering code to fix tag duplication issue seen with Datadog
## 11.2.0 (2025-8-23)
* [](https://github.com/manishrjain) Add retry mechanism for UDS with udsRetryOptions
## 11.1.1 (2025-8-10)
* [](https://github.com/bdeitte) Revert change to improve memory/performance of overrideTags and add more tests
* [](https://github.com/bdeitte) Upgrade node-unix-dram to support latest Node
## 11.1.0 (2025-6-22)
* [](https://github.com/bdeitte) Add more tests for uncovered areas
* [](https://github.com/bdeitte) When DD_AGENT_HOST is set to empty string, consider it to be undefined
* [](https://github.com/bdeitte) Set max size for maxBufferSize to 8192 when using UDS
* [](https://github.com/bdeitte) Improve memory/performance of overrideTags (reverted in 11.1.1)
## 11.0.0 (2025-6-20)
* [](https://github.com/bdeitte) Stop testing much older Node.js versions and test latest: now testing Node 16 to Node 24
* [](https://github.com/bdeitte) Enable buffering by default (as 8192) for UDS connections
* [](https://github.com/bdeitte) Stop adding extra newline in buffering cases where it's not needed
* [](https://github.com/bdeitte) Flush buffering earlier when possible (reverted in 11.3.0)
* [](https://github.com/bdeitte) Add CLAUDE.md for easlier Claude usage
* [](https://github.com/bdeitte) Ensure client.close() does not throws errors when mock: true is set
## 10.2.1 (2024-10-19)
* [-negri](https://github.com/thiago-negri) Add 'includeDataDogTags' property to 'ClientOptions' type
## 10.2.0 (2024-10-13)
* [-negri](https://github.com/thiago-negri) Add option 'includeDataDogTags'
* [](https://github.com/bdeitte) Upgrade dependencies for security warning and a few README updates
## 10.1.1 (2024-9-12)
* [](https://github.com/matteosb) Handle synchronous socket.send error in sendUsingDnsCache
## 10.1.0 (2024-9-6)
* [](https://github.com/lachlankidson) Add gaugeDelta function
* [](https://github.com/bdeitte) Various dev library updates
* [](https://github.com/bdeitte) Add Node 20 testing
## 10.0.0 (2023-2-3)
* [](https://github.com/imyourmanzi) In TypeScript, narrow callback parameter types
* [](https://github.com/bdeitte) Remove Node 8 from supported list and add testing of Node 18
## 9.3.0 (2022-10-23)
* [-mirzoyan](https://github.com/albert-mirzoyan) add stream property type to ClientOptions
* [](https://github.com/bdeitte) Upgrade unix-dgram to support Node 18
## 9.2.0 (2022-7-30)
* [](https://github.com/hjr3) Add udpSocketOptions to control how UDP socket is created
## 9.1.0 (2022-6-20)
* [](https://github.com/zhyu) Append standard Datadog tags from env vars (DD_ENTITY_ID, DD_ENV, DD_SERVICE, and DD_VERSION)
* [](https://github.com/bdeitte) Check if client is undefined before closing to fix error
* [](https://github.com/bdeitte) Start using GitHub Actions for tests and remove now-broken travis file
* [](https://github.com/bdeitte) Update testing dependencies
## 9.0.0 (2021-10-31)
* [](https://github.com/cesarfd) Add TCP reconnections, similar to how it's done for UDS. Enabled by default and configurable through tcpGracefulErrorHandling/tcpGracefulRestartRateLimit.
* [](https://github.com/sambostock) Document explicit prefix/suffix separators
## 8.5.2 (2021-9-26)
* [](https://github.com/amc6) TypeScript: add missing decrement overload type
## 8.5.1 (2021-9-2)
* [-crisp](https://github.com/tim-crisp) TypeScript: add stream to protocol string union type
* [](https://github.com/bdeitte) Bump path-parse (used just in dev builds) from 1.0.6 to 1.0.7
## 8.5.0 (2021-7-16)
* [](https://github.com/maxday) Add a closingFlushInterval option which allows stopping quicker
## 8.4.0 (2021-7-3)
* [](https://github.com/roim) Use errorHandler when possible on UDS socket replace error
## 8.3.2 (2021-5-29)
* [](https://github.com/cmaddalozzo) Close unix domain socket after unsuccessful attempts to connect
## 8.3.1 (2021-4-1)
* [-z](https://github.com/dvd-z) Fix date_happened to allow usage of numbers
## 8.3.0 (2020-12-16)
* [](https://github.com/chotiwat) Handle UDS errors occurring when sending metrics
## 8.2.1 (2020-12-1)
* [](https://github.com/stephenmathieson) Make close callback optional in TypeScript definition
## 8.2.0 (2020-9-30)
* [](https://github.com/dhermes) Making UDS error handling and recovery more robust. Note these look to be ok in a minor release but are signficant upgrades to how UDS works. Thanks as well to [@prognant](https://github.com/prognant) for an overlapping PR.
## 8.1.0 (2020-9-25)
* [](https://github.com/maleblond) Support multiple values for the same tag key
## 8.0.0 (2020-9-23)
* [](https://github.com/naseemkullah) Change default value for 'host' from 'localhost' to
undefined. This means the default host will now be 127.0.0.1 or ::1,
which has cases where it will speed up sending metrics. This should be a
non-breaking change, but bumping to a major version for it given
it's a very base change to the library.
* [](https://github.com/naseemkullah) Switch from equals to strictEquals in tests
## 7.8.0 (2020-8-28)
* [](https://github.com/bdeitte) Fix some flaky tests
* [](https://github.com/ralphiech) Add missing error handler when socket is not created
* [](https://github.com/ralphiech) Add missing socket checks
* [](https://github.com/dependabot) Bump lodash from 4.17.15 to 4.17.19
* [](https://github.com/DerGut) Add "Congestion error" section to README
## 7.7.1 (2020-8-4)
* [](https://github.com/DerGut) Fix udsGracefulErrorHandling default value
## 7.7.0 (2020-7-29)
* [](https://github.com/tebriel) Add asyncDistTimer function
## 7.6.0 (2020-6-16)
* [](https://github.com/Impeekay) Add date type to timing function
## 7.5.0 (2020-6-5)
* [](https://github.com/benblack86) Unreference underlying socket/interval to prevent process hangs
## 7.4.2 (2020-5-5)
* [](https://github.com/kazk) Fix types for set/unique
## 7.4.1 (2020-4-28)
* [](https://github.com/lbeschastny) Sanitize ',' tags characters for telegraf
## 7.4.0 (2020-4-3)
* [](https://github.com/MichaelSitter) add tagPrefix and tagSeparator options
## 7.3.0 (2020-4-1)
* [](https://github.com/marciopd) Use Date.now() instead of new Date()
* [](https://github.com/chotiwat) Add UDS graceful error handling options to typescript
* [](https://github.com/bdeitte) Update packages, most notably getting node-unix-dgram 2.0.4
## 7.2.0 (2020-3-19)
* [](https://github.com/marciopd) Add cacheDnsTtl
* [](https://github.com/dependabot) Bump acorn from 6.3.0 to 6.4.1
## 7.1.0 (2020-3-4)
* [](https://github.com/wision) Actually fix cachedDns with udp
* [-chow](https://github.com/casey-chow) TypeScript: parameterize function types in timer and asyncTimer
## 7.0.0 (2020-2-13)
* [](https://github.com/tomruggs) Remove support for Node 6- now supporting Node 8.x or higher
* [](https://github.com/tomruggs) Update to the latest mocha version to get rid of a security warning
## 6.8.7 (2020-2-10)
* [](https://github.com/mrknmc) Fix TypeError when increment called without a callback argument
## 6.8.6 (2020-1-28)
* [](https://github.com/ericmustin) callback is not properly passed bytes argument
## 6.8.5 (2019-12-19)
* [](https://github.com/bdeitte) Fix for socket on reading when cacheDns and udp in use
## 6.8.4 (2019-12-18)
* [](https://github.com/bdeitte) Fix cacheDns with udp
## 6.8.3 (2019-12-15)
* [-rudenko](https://github.com/gleb-rudenko) Fix StatsD constructor typing
## 6.8.2 (2019-11-12)
* [](https://github.com/almandsky) Fix useDefaultRoute to work again after abstract transports
## 6.8.1 (2019-10-16)
* [](https://github.com/hayes) Add unref method to transport interface
## 6.8.0 (2019-10-14)
* [](https://github.com/runk) Add new protocol, stream, and a stream parameter for
specifying it.
## 6.7.0 (2019-10-9)
* [](https://github.com/runk) Code refactoring to have abstract transports
## 6.6.0 (2019-10-7)
* [](https://github.com/NinjaBanjo) [@msiebuhr](https://github.com/msiebuhr) Add udsGracefulErrorHandling, ensuring uds
handles socket errors gracefully
## 6.5.1 (2019-9-28)
* [](https://github.com/msiebuhr) Fix crasher when closing Unix Datagram Sockets without callback
## 6.5.0 (2019-9-22)
* [](https://github.com/bdeitte) Update decrement to handle missing arguments the same way
that increment does
* [](https://github.com/bdeitte) Document that memory may grow unbounded in mock mode
* [](https://github.com/bdeitte) Only load in unix-dgram library when uds protocol in use
## 6.4.1 (2019-9-19)
* [](https://github.com/jfirebaugh) Fix cacheDns option when obtaining host from DD_AGENT_HOST
## 6.4.0 (2019-6-28)
* [](https://github.com/tghaas) Add Node 12 support to uds protocol support
* [](https://github.com/jhoch) README clarifications
## 6.3.0 (2019-5-18)
* [](https://github.com/paguillama) Fix user defined tag example on README optional parameters
* [](https://github.com/gabsn) Initial support for uds protocol
* [](https://github.com/bdeitte) Updated and fixed up uds protocol support
## 6.2.0 (2019-4-10)
* [-mez](https://github.com/ahmed-mez) Add support for env variables DD_AGENT_HOST,
DD_DOGSTATSD_PORT, and DD_ENTITY_ID
* [](https://github.com/JamesMGreene) Fix syntax in README example
## 6.1.1 (2019-1-8)
* [](https://github.com/bdeitte) Fix errorHandler to only happen again on errors
* [](https://github.com/Ithildir) Readme fixes
## 6.1.0 (2019-1-5)
* [](https://github.com/bdeitte) Ensure close() call always sends data before closing
* [](https://github.com/bdeitte) Recommend errorHandler over client.socket.on() for handling
errors
* [](https://github.com/mbellerose) Fix the timer function type definition
## 6.0.1 (2018-12-17)
* [](https://github.com/msmnc) Fix regression when tag value is a number
* [](https://github.com/bdeitte) Make non-options in constructor more deprecated
## 6.0.0 (2018-12-15)
[](https://github.com/bdeitte) Major upgrade to the codebase to be more modern,
overhaul tests, and many small tweaks. Most of this is internal to
the project, but there are a few changes to note for everyone:
* Now requires Node 6 or above
* Update close() to handle errors better, not doubling up in error
messages and not leaving uncaught errors
Everything else done here should be internal facing. Those changes
include:
* Use "lebab" to ES6-ify the project
* Switch from jshint and eslint and make syntax updates based on this
* Remove a lot of duplication in tests and many small fixups in tests
* Start using Mocha 4
* Stop using index.js for testing
* Start using the code coverage report as part of the build
* Remove the ignoring of errors on close of tests, and tear down tests in general better
* Stop using "new Buffer", that is deprecated, and use Buffer.from() instead
## 5.9.2 (2018-11-10)
* [](https://github.com/stieg) Add mockBuffer to types
## 5.9.1 (2018-9-18)
* [](https://github.com/etaoins) Add asyncTimer types
* [](https://github.com/blimmer): Add increment doc snippet
## 5.9.0 (2018-7-27)
* [](https://github.com/chrismatheson): Fix timer to have duration in microseconds (was nanoseconds)
* [](https://github.com/chrismatheson): Add asyncTimer functionality
## 5.8.0 (2018-7-17)
* [](https://github.com/michalholasek) Clean up code formatting and split up tests
* [](https://github.com/michalholasek) Add tcp protocol support
* [](https://github.com/remie) Add tcp protocol support
## 5.7.0 (2018-7-4)
* [](https://github.com/Willyham) Add support for recording buffers in mock mode
## 5.6.3 (2018-6-20)
* [](https://github.com/singerb) correct close() type definition
## 5.6.2 (2018-6-15)
* [](https://github.com/mjesuele) Fix time in timer
## 5.6.1 (2018-6-4)
* [](https://github.com/MattySheikh) Typescript: add socket type for StatsD class
## 5.6.0 (2018-6-3)
* [](https://github.com/drewen) TypeScript: add overload types for stats functions
## 5.5.1 (2018-5-30)
* [](https://github.com/emou) Typescript declaration for the 'timer' method
## 5.5.0 (2018-5-30)
* [](https://github.com/drewen) Split up single file, add code coverage capabilities
## 5.4.1 (2018-5-12)
* [](https://github.com/jasonsack) Fixups for new useDefaultRoute option
* [](https://github.com/bdeitte) Test against more modern set of Node versions in Travis
## 5.4.0 (2018-4-26)
* [](https://github.com/RobGraham) Added `distribution()` support for DataDog v6
## 5.3.0 (2018-4-3)
* [](https://github.com/tanelso2) Added support for using default route on Linux
## 5.2.0 (2018-2-28)
* [](https://github.com/ericapisani) Add timer decorator function
## 5.1.0 (2018-2-14)
* [](https://github.com/lautis) Pass key-value tags as objects
## 5.0.1 (2018-2-2)
* [-asapp](https://github.com/punya-asapp) Add childClient to TypeScript types
## 5.0.0 (2017-11-9)
* [](https://github.com/jgwmaxwell) TypeScript typings, resolving the default export issue and missing options from last time. This is being marked as a major release, in caution given the revert last time, but it is not actually known to cause any backwards-compatible issues.
## 4.8.0 (2017-10-31)
* [](https://github.com/Jiggmin) concat prefix and suffix in check function
* [](https://github.com/Jiggmin) commit package-lock.json
## 4.7.1 (2017-10-31)
* [](https://github.com/Jiggmin) Add backwards compatibility for global_tags
## 4.7.0 (2017-9-21)
* [](https://github.com/bdeitte) Revert TypeScript typings, which ended up not being semver minor
## 4.6.0 (2017-9-19)
* [](https://github.com/jgwmaxwell) TypeScript typings
## 4.5.0 (2017-5-4)
* [](https://github.com/jsocol) Support default value with tags in increment
## 4.4.0 (2017-3-23)
* [](https://github.com/RijulB) Global sample rate
## 4.3.1 (2016-11-7)
* [](https://github.com/RandomSeeded) Fix callbacks not being triggered when using buffers
## 4.3.0 (2016-9-30)
* [](https://github.com/ggoodman) Allow socket errors to be handled with errorHandler
## 4.2.0 (2016-8-3)
* [](https://github.com/mhahn) Add support for DataDog service checks
## 4.1.1 (2016-5-22)
* [](https://github.com/ash2k) date_happened should be seconds, not milliseconds
## 4.1.0 (2016-5-8)
* [](https://github.com/ash2k) Support multiline text in DataDog events
## 4.0.0 (2016-5-7)
* [](https://github.com/ash2k) Provided tags, including `childClient()` tags, override global tags with same names.
## 3.1.0 (2016-5-3)
* [](https://github.com/ash2k) Support a client-wide error handler used in case no callback is provided and to handle various exceptions.
## 3.0.1 (2016-4-28)
* [](https://github.com/bdeitte) Add 'use strict' to files and make changes needed for this.
## 3.0.0 (2016-4-27)
* [](https://github.com/ash2k) Method to create child clients. (This is not a backwards-incompatible change but is rather large.)
* [](https://github.com/ash2k) Shrink npm package a bit more
## 2.4.0 (2016-2-26)
* [](https://github.com/arlolra) Shrink npm package
* [](https://github.com/arlolra)/[@bdeitte](https://github.com/bdeitte) Move DNS errors when caching them to send() and use callback when possible
* [](https://github.com/bdeitte) Use callback for Telegraf error when possible
## 2.3.1 (2016-2-3)
* [](https://github.com/Pchelolo) Ensure messages not larger then maxBufferSize
## 2.3.0 (2016-1-17)
* [](https://github.com/bdeitte) Fix increment(name, 0) to send a 0 count instead of 1
* [](https://github.com/bdeitte) Flush the queue when needed on close()
## 2.2.0 (2016-1-10)
* [](https://github.com/bdeitte) Document and expand on close API
* [](https://github.com/bdeitte) Catch more error cases for callbacks
## 2.1.2 (2015-12-9)
* [](https://github.com/bdeitte) Even more doc updates
* [](https://github.com/mmoulton) Fix multiple tags with Telegraf
## 2.1.1 (2015-12-9)
* [](https://github.com/bdeitte) Doc updates
## 2.1.0 (2015-12-9)
* [](https://github.com/mmoulton) Add options.telegraf to enable support for Telegraf's StatsD line protocol format
* [](https://github.com/mmoulton) Ensure message callback is sent in buffered case, even when we just buffer.
## 2.0.0 (2015-10-22)
* [](https://github.com/jjofseattle) Add options.maxBufferSize and options.bufferFlushInterval
* [](https://github.com/bdeitte) Change options.global_tags to options.globalTags for consistency
## 1.0.2 (2015-09-25)
* [](https://github.com/ainsleyc) Thrown error when cacheDNS flag fails to resolve DNS name
## 1.0.1 (2015-09-24)
* [](https://github.com/bdeitte) Add the event API used by DogStatsD
* [](https://github.com/sivy) Start from the base of https://github.com/sivy/node-statsd