v1.5.0 - 2024-09-26
- Add support for Datadog Statsd extensions sample rates, container IDs, and explicit timestamps per #211. Thanks to @iksaif for this contribution.
v1.4.0 - 2024-04-28
- Make the previously internal
MultiLineWriter
andSocketStats
structs available from thecadence::ext
module per #206. These can be useful when creating customMetricSink
implementations. Thanks to @mlowicki for this contribution.
v1.3.0 - 2024-03-23
- Add support for using
u64
,i32
, andu32
types as counters per #201. Thanks to @James-Bartman for this contribution. - Add
MetricSink::stats()
method to theMetricSink
interface to allow sinks to expose low-level network telemetry per #203. Thanks to @mlowicki for this contribution. - Add
StatsdClient::flush()
method to the client to allow time-sensitive metrics to be flushed sooner than they otherwise might be per #200. Thanks to @James-Bartman for this contribution;
v1.2.0 - 2024-02-20
- Add
QueuingMetricSinkBuilder
to allow an error handler to be set for the wrappedMetricSink
implementation per #195. Thanks to @mlowicki for this contribution.
v1.1.0 - 2024-02-03
- Update
crossbeam-channel
dependency to0.5.11
. - Bump minimum supported Rust version to
1.60
from1.56
. - Add
MetricSink::flush()
implementation toQueuingMetricSink
per #191. Thanks to @mlowicki for this contribution.
v1.0.0 - 2023-12-02
- Remove deprecated
StatsdClient::from_udp_host
method andCompat
trait per #181. These methods have been deprecated sincev0.26
. See MIGRATION.md for more information.
v0.29.1 - 2023-05-22
- Fix a bug where distribution metrics didn't include default tags per #184. Thanks to @danielsig727 for this contribution.
v0.29.0 - 2022-04-02
- Add support for "default tags" that can be added to a
StatsdClient
when creating it using the builder per #172. Default tags will be automatically added to all metrics emitted by the client. Thanks to @look for this contribution.
v0.28.0 - 2022-01-28
- Breaking change - Add support for packed values
which allows multiple values to be sent as a single metric for histogram,
distribution, and timer types per #169.
The Cadence client now accepts
Vec<T>
for histogram, distribution, and timer methods. Note that this feature is a Datadog extension and so may not be supported by your server. It is supported by versions>=v6.25.0 && <v7.0.0
or>=v7.25.0
of the Datadog agent. Thanks to @Jason8Ni for this contribution.
v0.27.0 - 2021-12-26
- Breaking change -
StatsdClient
no longer implements theClone
trait due to now usingBox
internally instead ofArc
per #163. WhereStatsdClient
was.clone()
'd previously, it should now be wrapped with anArc
to enable it to be cloned. - Minor performance improvement in the way metric tags are formatted per #161.
v0.26.0 - 2021-07-23
- Breaking change - Client traits are now generic across supported types of
values #132. This change
should be source-compatible in most cases for users importing the Cadence
prelude
module. Type-specific deprecated methods have been moved to a newCompat
trait to ease this migration. This trait and its implementation will be removed in a future release. See MIGRATION.md for more information. - Add support for
f64
values for histogram and distribution metric types per #131. - Minimum supported Rust version for Cadence is now 1.41 per #138.
v0.25.0 - 2021-03-21
-
Breaking change - Added support for DataDog distribution metric types per #125 thanks to @duarten.
-
Breaking change - Rewrite
SpyMetricSink
andBufferedSpyMetricSink
introduced in 0.22.0 to use channels for making written metrics available instead of sharedWrite
implementation wrapped with aMutex
. The newly changed sinks now return acrossbeam_channel::Receiver<Vec<u8>>
instance from their constructors that callers can use to read any metrics written by the sink. This avoids accidental cases of mutex poisoning which can happen when theMutex
is held when an assertion fails as part of a test per #124.Examples of how to use the newly rewritten sinks can be found in:
-
Breaking change - Remove unsafe uses of
static mut
used for global state related to macros which caused undefined behavior per #129 thanks to @parasyte. A consequence of this thatcadence_macros::set_global_default
andcadence_macros::get_global_default
now only accept instances ofStatsdClient
, not the traitMetricClient
.
v0.24.0 - 2021-02-02
cadence-macros
yanked due to causing undefined behavior #129
- Split the project into two crates. The
cadence
crate will continue to contain the primary client and API. Thecadence-macros
crate contains convenience macros for removing some boilerplate required to emit metrics per #114. - Fix
MultilineWriter
(used by buffered sinks) to honor theWrite::write
contract per #117.
v0.23.0 - 2020-12-14
- Breaking change - Add method to emit
f64
types as gauges per #106. - Update
crossbeam-channel
dependency to0.5
per #110.
v0.22.0 - 2020-10-08
- Add new
SpyMetricSink
andBufferedSpyMetricSink
to allow inspecting metrics sent by Cadence as part of integration testing an application per #103.
v0.21.1 - 2020-09-02
- Minor documentation improvements.
v0.21.0 - 2020-09-02
- Add a
.flush()
method to theMetricSink
trait to allow applications to flush metrics out-of-band per #100.
v0.20.0 - 2020-04-07
- The
QueuingMetricSink
can now be created with a fixed queue size using the::with_capacity()
constructor. This allows users to limit the amount of memory used by sending metrics (in case the wrapped sink can't keep up with the rate of metrics being sent due to to some sort of error). - Updated dependency on
crossbeam_channel
to version0.4.0+
; - Breaking change - The
Histogrammed
trait now includes methods for sendingDuration
objects, converted to nanoseconds, as histogram values. - Breaking change - The
QueuingMetricSink::panics()
method now returns au64
, not ausize
.
v0.19.1 - 2019-10-12
- Minor documentation improvements.
v0.19.0 - 2019-10-06
- Fix cases where sending large payloads (a single metric larger than a UDP packet while using the buffered UDP sink) caused an extra UDP packet to be sent containing only a newline per #87.
- Add support for emitting metrics over a Unix socket via the new
UnixMetricSink
andBufferedUnixMetricSink
per #86 thanks to Daniel Smith. - Deprecate the
StatsdClient::from_udp_host
constructor which will be removed in a future release. Users are encouraged to use the::from_sink()
and::builder()
constructors instead. - All Cadence examples (in the
examples
directory) are now available under the CC0 agreement (basically public domain even in countries with no such concept).
v0.18.0 - 2019-07-31
- Allow empty strings to be use for metric prefixes. Previously, this would
result in metrics with a leading
.
, now an empty prefix results in just the bare metric key. - Breaking change - Update Cadence to build with Rust 2018 per #82. Note that Cadence should still work fine with Rust 2015 code bases as well as Rust 2018 code bases. This is marked as a breaking change but will likely not require changes for most users. See the Rust edition docs for more information.
v0.17.1 - 2019-03-30
- Replace internal use of crossbeam
MsQueue
with channels from thecrossbeam_channel
crate per #79. This change improves performance of theQueuingMetricSink
, reducing the time taken to submit a metric by about 50%. This is a non-breaking change.
v0.16.0 - 2018-12-07
- Breaking change - Require that all sinks and error handlers used with
StatsdClient
are panic safe, that is, they implementRefUnwindSafe
per #77. Note that all sinks included with Cadence are panic safe so this shouldn't be much of a change for many users. See also Rust #54768 for more information about the reasoning for the change.
v0.15.1 - 2018-07-19
- Update Cadence crate to forbid any uses of
unsafe {}
code. - Minor documentation improvements.
v0.15.0 - 2018-07-12
- Breaking change - Add support for
Set
metric types. Sets can be used to count the number of unique occurences of an event. Per #62. - Updated dependency on
crossbeam
to the latest version (0.3.2).
v0.14.0 - 2018-04-11
- Breaking change - Rename the
MetricBuilder::send()
method toMetricBuilder::try_send()
and create a new.send()
method that discards successful results and invokes a custom handler for error results. Handlers can be set by using a builder via theStatsdClient::builder()
method. Per #65.
v0.13.2 - 2018-03-13
- Warn when
MetricBuilder
instances aren't used when adding tags to metrics per #63.
v0.13.1 - 2018-02-07
- Minor documentation improvements.
v0.13.0 - 2018-02-06
- Breaking change - Added
_with_tags
method variants to all traits for emitting metrics (Counted
,Timed
,Gauged
,Metered
,Histogrammed
) per #41. These methods will return aMetricBuilder
instance that can be used to add Datadog style tags to metrics. Tags are an extension so they may not be supported by all Statsd servers. - The
Metric
trait (which is used by each type of metric object for returning a&str
representation of itself) is now part of the public API.
v0.12.2 - 2017-11-29
- Fix off-by-one bug in underlying functionality for
BufferedUdpSink
that would have caused extra writes to the UDP socket per #59.
v0.12.1 - 2017-09-21
- Minor documentation improvements and code cleanup.
v0.12.0 - 2017-02-09
- Add new
time_duration
method toTimed
trait per #48. This allows users to record timings using theDuration
struct from the standard library. - Add examples of Cadence usage per #36.
v0.11.0 - 2017-01-18
- Breaking change - Remove deprecated
AsyncMetricSink
per #47. Users are encouraged to switch toQueuingMetricSink
instead.QueuingMetricSink
has similar performance, emits metrics asynchronously in another thread, and has a more ergonomic signature (not requiring a generic parameter for the wrapped sink). - Breaking change - Remove the generic parameter
T
from theStatsdClient
per #45. Instead of requiring all users of the client to care about theMetricSink
implementation, put it behind anArc
pointer in the client and remove the typeT
from the signature. This makes the client easier to use and share between threads. - Remove use of
Arc
inside various sinks per #35.
v0.10.0 - 2017-01-08
- Breaking change - Remove deprecated
ConsoleMetricSink
andLoggingMetricSink
per #46. Users wishing to still use these sinks are encouraged to copy the code into their own projects or use Cadence version 0.9.1 until they migrate away from them. - Deprecate
AsyncMetricSink
per #34. Anyone still usingAsyncMetricSink
is encouraged to switch toQueuingMetricSink
instead. Performance should be comparable butQueuingMetricSink
can be shared between threads without requiring a.clone()
.
v0.9.1 - 2017-01-01
- Change deprecation version of
LoggingMetricSink
andConsoleMetricSink
to 0.10.0.
v0.9.0 - 2017-01-01
- Implement
QueuingMetricSink
utilizing a lock-free queue from the Crossbeam library per #30. - Add new metric type, histograms, per #40.
- Deprecate
LoggingMetricSink
per #32. - Deprecate
ConsoleMetricSink
per #33.
v0.8.2 - 2016-12-12
- Internal code cleanup per #29.
v0.8.1 - 2016-10-11
- Minor documentation fixes.
v0.8.0 - 2016-08-27
- Add new
BufferedUdpMetricSink
implementation of aMetricSink
that buffers multiple metrics before sending then in a single network operation per #18. - Add new
AsyncMetricSink
implementation of aMetricSink
that wraps another sink and sends metrics asynchronously using a thread pool per #23. - Implement
Clone
trait for all builtin sinks for easier use with multiple threads, specifically theAsyncMetricSink
per #24.
v0.7.0 - 2016-07-27
- Add new
MetricClient
trait implemented byStatsdClient
that encompasses all of the other traits for emitting metrics (Counted
,Timed
,Gauged
, andMetered
) so that users can refer to a single type when used with generics or behind a pointer per #20.
v0.6.0 - 2016-07-20
- Change Cadence to be dual licensed under Apache and MIT licenses per #12.
- Improve documentation around
MetricSink
trait per #13. - Behavior change - Change UDP sockets created by
StatsdClient::from_udp_host
to be created in non-blocking mode by default per #14. While this does change previous behavior, users of the library shouldn't notice much of a change. In instances where the caller would have blocked before, they will get aMetricError
wrapping anio::Error
(with anErrorKind
ofWouldBlock
). Users wishing to restore the old behavior can do so by creating a custom instance ofUdpMetricSink
. Thanks to the Tikv team for the inspiration.
v0.5.2 - 2016-07-02
- Increase test coverage per #10.
- Add documentation for setting up a UDP socket in non-blocking mode per #8.
v0.5.1 - 2016-06-07
- Remove
debug!
call in internal StatsdClient call to cut down on log noise per #7.
v0.5.0 - 2016-03-10
- Breaking change - Rename the constructor of
UdpMetricSink
fromnew
tofrom
to better match Rust naming conventions for conversion constructors.
v0.4.0 - 2016-02-18
- Change name of method for getting metric
&str
representation. The old name implied that the instance was consumed which it was not. - Create
cadence::prelude
module for easy import ofCounted
,Timed
,Gauged
, andMetered
traits via a glob import. Fixes #4.
v0.3.0 - 2016-02-07
- Change
LoggingMetricSink
log target tocadence::metrics
. - Minor documentation improvements. Fixes #1.
- Add benchmarks to test suite.
- Reduce heap allocations when emitting metrics. Fixes #3.
v0.2.1 - 2015-12-27
- Change Cadence from MIT license to Apache-2.0 for better compatibility with BSD and GPLv3 licensed code.
v0.2.0 - 2015-12-26
- Remove unused development dependency.
- Add
Hash
trait to assorted metric types (Counter
,Timer
,Gauge
,Meter
). - Documentation improvements.
v0.1.0 - 2015-12-22
- Initial release.