# Changelog
## [v0.19.1](https://github.com/tshlabs/cadence/tree/0.19.1) - 2019-10-12
* Minor documentation improvements.
## [v0.19.0](https://github.com/tshlabs/cadence/tree/0.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](https://github.com/tshlabs/cadence/issues/87).
* Add support for emitting metrics over a Unix socket via the new `UnixMetricSink`
and `BufferedUnixMetricSink` per [#86](https://github.com/tshlabs/cadence/pull/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](https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt)
agreement (basically public domain even in countries with no such concept).
## [v0.18.0](https://github.com/tshlabs/cadence/tree/0.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](https://github.com/tshlabs/cadence/issues/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](https://doc.rust-lang.org/edition-guide/rust-2018/index.html)
for more information.
## [v0.17.1](https://github.com/tshlabs/cadence/tree/0.17.1) - 2019-03-30
* Replace internal use of crossbeam `MsQueue` with channels from the
`crossbeam_channel` crate per [#79](https://github.com/tshlabs/cadence/issues/79).
This change improves performance of the `QueuingMetricSink`, reducing
the time taken to submit a metric by about 50%. This is a non-breaking
change.
## [v0.16.0](https://github.com/tshlabs/cadence/tree/0.16.0) - 2018-12-07
* **Breaking change** - Require that all sinks and error handlers used with
`StatsdClient` are panic safe, that is, they implement `RefUnwindSafe` per
[#77](https://github.com/tshlabs/cadence/issues/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](https://github.com/rust-lang/rust/issues/54768)
for more information about the reasoning for the change.
## [v0.15.1](https://github.com/tshlabs/cadence/tree/0.15.1) - 2018-07-19
* Update Cadence crate to forbid any uses of `unsafe {}` code.
* Minor documentation improvements.
## [v0.15.0](https://github.com/tshlabs/cadence/tree/0.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](https://github.com/tshlabs/cadence/pull/72).
* Updated dependency on `crossbeam` to the latest version (0.3.2).
## [v0.14.0](https://github.com/tshlabs/cadence/tree/0.14.0) - 2018-04-11
* **Breaking change** - Rename the `MetricBuilder::send()` method to
`MetricBuilder::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 the `StatsdClient::builder()` method.
Per [#65](https://github.com/tshlabs/cadence/issues/65).
## [v0.13.2](https://github.com/tshlabs/cadence/tree/0.13.2) - 2018-03-13
* Warn when `MetricBuilder` instances aren't used when adding tags to metrics
per [#63](https://github.com/tshlabs/cadence/issues/63).
## [v0.13.1](https://github.com/tshlabs/cadence/tree/0.13.1) - 2018-02-07
* Minor documentation improvements.
## [v0.13.0](https://github.com/tshlabs/cadence/tree/0.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](https://github.com/tshlabs/cadence/issues/41). These methods will
return a `MetricBuilder` instance that can be used to add
[Datadog](https://docs.datadoghq.com/developers/dogstatsd/) 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](https://github.com/tshlabs/cadence/tree/0.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](https://github.com/tshlabs/cadence/issues/59).
## [v0.12.1](https://github.com/tshlabs/cadence/tree/0.12.1) - 2017-09-21
* Minor documentation improvements and code cleanup.
## [v0.12.0](https://github.com/tshlabs/cadence/tree/0.12.0) - 2017-02-09
* Add new `time_duration` method to `Timed` trait per
[#48](https://github.com/tshlabs/cadence/issues/48). This allows users to record
timings using the `Duration` struct from the standard library.
* Add examples of Cadence usage per [#36](https://github.com/tshlabs/cadence/issues/36).
## [v0.11.0](https://github.com/tshlabs/cadence/tree/0.11.0) - 2017-01-18
* **Breaking change** - Remove deprecated `AsyncMetricSink` per
[#47](https://github.com/tshlabs/cadence/issues/47). Users are encouraged to
switch to `QueuingMetricSink` 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 the `StatsdClient` per
[#45](https://github.com/tshlabs/cadence/issues/45). Instead of requiring all users
of the client to care about the `MetricSink` implementation, put it behind an `Arc`
pointer in the client and remove the type `T` from the signature. This makes the
client easier to use and share between threads.
* Remove use of `Arc` inside various sinks per [#35](https://github.com/tshlabs/cadence/issues/35).
## [v0.10.0](https://github.com/tshlabs/cadence/tree/0.10.0) - 2017-01-08
* **Breaking change** - Remove deprecated `ConsoleMetricSink` and `LoggingMetricSink`
per [#46](https://github.com/tshlabs/cadence/issues/46). Users wishing to still use
these sinks are encouraged to
[copy the code](https://github.com/tshlabs/cadence/blob/0.9.1/src/sinks/mod.rs)
into their own projects or use Cadence version 0.9.1 until they migrate away from them.
* Deprecate `AsyncMetricSink` per [#34](https://github.com/tshlabs/cadence/issues/34).
Anyone still using `AsyncMetricSink` is encouraged to switch to `QueuingMetricSink`
instead. Performance should be comparable but `QueuingMetricSink` can be shared
between threads without requiring a `.clone()`.
## [v0.9.1](https://github.com/tshlabs/cadence/tree/0.9.1) - 2017-01-01
* Change deprecation version of `LoggingMetricSink` and `ConsoleMetricSink` to 0.10.0.
## [v0.9.0](https://github.com/tshlabs/cadence/tree/0.9.0) - 2017-01-01
* Implement `QueuingMetricSink` utilizing a lock-free queue from the Crossbeam
library per [#30](https://github.com/tshlabs/cadence/issues/30).
* Add new metric type, histograms, per [#40](https://github.com/tshlabs/cadence/issues/40).
* Deprecate `LoggingMetricSink` per [#32](https://github.com/tshlabs/cadence/issues/32).
* Deprecate `ConsoleMetricSink` per [#33](https://github.com/tshlabs/cadence/issues/33).
## [v0.8.2](https://github.com/tshlabs/cadence/tree/0.8.2) - 2016-12-12
* Internal code cleanup per [#29](https://github.com/tshlabs/cadence/issues/29).
## [v0.8.1](https://github.com/tshlabs/cadence/tree/0.8.1) - 2016-10-11
* Minor documentation fixes.
## [v0.8.0](https://github.com/tshlabs/cadence/tree/0.8.0) - 2016-08-27
* Add new `BufferedUdpMetricSink` implementation of a `MetricSink` that
buffers multiple metrics before sending then in a single network operation
per [#18](https://github.com/tshlabs/cadence/issues/18).
* Add new `AsyncMetricSink` implementation of a `MetricSink` that wraps
another sink and sends metrics asynchronously using a thread pool per
[#23](https://github.com/tshlabs/cadence/issues/23).
* Implement `Clone` trait for all builtin sinks for easier use with multiple
threads, specifically the `AsyncMetricSink` per
[#24](https://github.com/tshlabs/cadence/issues/24).
## [v0.7.0](https://github.com/tshlabs/cadence/tree/0.7.0) - 2016-07-27
* Add new `MetricClient` trait implemented by `StatsdClient` that encompasses
all of the other traits for emitting metrics (`Counted`, `Timed`, `Gauged`,
and `Metered`) so that users can refer to a single type when used with
generics or behind a pointer per [#20](https://github.com/tshlabs/cadence/issues/20).
## [v0.6.0](https://github.com/tshlabs/cadence/tree/0.6.0) - 2016-07-20
* Change Cadence to be dual licensed under Apache and MIT licenses per
[#12](https://github.com/tshlabs/cadence/issues/12).
* Improve documentation around `MetricSink` trait per
[#13](https://github.com/tshlabs/cadence/issues/13).
* **Behavior change** - Change UDP sockets created by
`StatsdClient::from_udp_host` to be created in non-blocking mode by default
per [#14](https://github.com/tshlabs/cadence/issues/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 a `MetricError` wrapping an `io::Error` (with an `ErrorKind` of
`WouldBlock`). Users wishing to restore the old behavior can do so by
creating a custom instance of `UdpMetricSink`. Thanks to the
[Tikv](https://github.com/pingcap/tikv) team for the inspiration.
## [v0.5.2](https://github.com/tshlabs/cadence/tree/0.5.2) - 2016-07-02
* Increase test coverage per [#10](https://github.com/tshlabs/cadence/issues/10).
* Add documentation for setting up a UDP socket in non-blocking mode per
[#8](https://github.com/tshlabs/cadence/issues/8).
## [v0.5.1](https://github.com/tshlabs/cadence/tree/0.5.1) - 2016-06-07
* Remove `debug!` call in internal StatsdClient call to cut down on log
noise per [#7](https://github.com/tshlabs/cadence/pull/7).
## [v0.5.0](https://github.com/tshlabs/cadence/tree/0.5.0) - 2016-03-10
* **Breaking change** - Rename the constructor of `UdpMetricSink` from `new`
to `from` to better match Rust naming conventions for conversion constructors.
## [v0.4.0](https://github.com/tshlabs/cadence/tree/0.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 of `Counted`, `Timed`,
`Gauged`, and `Metered` traits via a glob import. Fixes
[#4](https://github.com/tshlabs/cadence/issues/4).
## [v0.3.0](https://github.com/tshlabs/cadence/tree/0.3.0) - 2016-02-07
* Change `LoggingMetricSink` log target to `cadence::metrics`.
* Minor documentation improvements. Fixes [#1](https://github.com/tshlabs/cadence/issues/1).
* Add benchmarks to test suite.
* Reduce heap allocations when emitting metrics. Fixes
[#3](https://github.com/tshlabs/cadence/issues/3).
## [v0.2.1](https://github.com/tshlabs/cadence/tree/0.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](https://github.com/tshlabs/cadence/tree/0.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](https://github.com/tshlabs/cadence/tree/0.1.0) - 2015-12-22
* Initial release.