This project uses Break Versioning
[com.taoensso/tufte "2.4.0"]
This is a very minor maintenance release. It should be non-breaking. See here for recommended steps when updating any Clojure/Script dependencies.
v2.3.0
Identical to
v2.3.0-RC1
(2022 Jul 18)
[com.taoensso/tufte "2.3.0"]
This is a major feature and fix release. Should be non-breaking for vast majority of folks.
See here for recommended steps when updating any Clojure/Script dependencies.
v2.2.0
v2.2.0
add-accumulating-handler!
: fix broken default val and examples(local (local ...))
nested profiling (Clj only) (@awkay)(dynamic (local ...))
nested profilingprofile/d
options are compile-time and runtimev2.2.0
profile/d
optionsv2.2.0
pdata-proxy
-> pdata-local
pdata-local
[com.taoensso/tufte "2.3.0-RC1"]
This is a major feature and fix release. Should be non-breaking for vast majority of folks.
See here for recommended steps when updating any Clojure/Script dependencies.
v2.2.0
v2.2.0
add-accumulating-handler!
: fix broken default val and examples(local (local ...))
nested profiling (Clj only) (@awkay)(dynamic (local ...))
nested profilingprofile/d
options are compile-time and runtimev2.2.0
profile/d
optionsv2.2.0
pdata-proxy
-> pdata-local
pdata-local
[com.taoensso/tufte "2.2.0"]
This is a major feature release. Should be non-breaking.
See here for recommended steps when updating any Clojure/Script dependencies.
Changes since v2.1.0
:
set-min-level!
, set-ns-pattern!
, with-min-level
, with-ns-pattern
: prefer just using the relevant dynamic vars directly.New since v2.1.0
:
*min-level*
can now be an int, or a [[<ns-pattern> <int>] ...]
for ns-specific levels.*min-level*
init val can now be set via taoensso.tufte.min-level.edn
JVM property, or TAOENSSO_TUFTE_MIN_LEVEL_EDN
env var.*ns-filter*
can now be a pred fn, or an ns-pattern (which will be auto compiled to a pred fn).*ns-filter*
init val can now be set via taoensso.tufte.ns-pattern.edn
JVM property, or TAOENSSO_TUFTE_NS_PATTERN_EDN
env var.[com.taoensso/tufte "2.2.0-RC1"]
This is a major feature release. Should be non-breaking. See here for a tip re: general recommended steps when updating any Clojure/Script dependencies.
New since v2.1.0
:
*min-level*
can now be an int, or a [[<ns-pattern> <int>] ...]
for ns-specific levels.*min-level*
init val can now be set via taoensso.tufte.min-level
JVM property, or TAOENSSO_TUFTE_MIN_LEVEL
env var.*ns-filter*
can now be a pred fn, or an ns-pattern (which will be auto compiled to a pred fn).*ns-filter*
init val can now be set via taoensso.tufte.ns-pattern
JVM property, or TAOENSSO_TUFTE_NS_PATTERN
env var.Changes since v2.1.0
:
set-min-level!
, set-ns-pattern!
, with-min-level
, with-ns-pattern
: prefer just using the relevant dynamic vars directly.[com.taoensso/tufte "2.1.0"]
Identical to "2.1.0-RC5" (besides some docstring tweaks).
This is an API-non-breaking feature release (though
format-pstats
output has changed). Big thanks to @ivarref for much of the work+input on this release!Feedback and bug reports welcome, especially for the Cljs implementation which I'm not currently using myself.
Thank you!
merge-pstats
clock total should now mostly be lossless (@ivarref)format-pstats
: add configurable columns filter, sort, id format (@ivarref)format-id-fn
(@ivarref)defnp-
macrodefnp
: add support for explicit ^{:tufte/id _}
to override automatic ids:p25
, :p75
merge-pstats
compaction wasn't always working, could lead to OOMs (@ivarref)format-pstats
output (@meeseekz)[com.taoensso/tufte "2.0.1"]
This is a trivial, non-breaking hotfix release
[com.taoensso/tufte "2.0.0"]
This is a major, breaking feature release. Please report any issues, thank you!
Tufte v2 introduces API flexibility improvements to expand on Tufte's strengths as an ongoing application performance monitoring tool.
Main objectives of the v2 API:
These objectives are related: percentiles are expensive to calculate, so infeasible to do on the same thread as profiling capture. Also, stats like percentiles are inherently inaccurate to merge.
By deferring the conversion of captured times to stats, the Tufte v2 API makes it easy to support both lossless merging (by merging times, not stats) - and the inclusion of more expensive stats like percentiles (since the cost of stats computation can be incurred on demand, and off the capturing thread).
The net result: the v2 API is more flexible since it decouples time capture and stats computation.
The decoupling is particularly handy for the ongoing performance monitoring of production applications: the application thread/s can inexpensively capture timing info for deferred/async digestion by a background analytics/monitoring task.
tl;dr The v2 API returns PStats
objects that can be ~losslessly merged, or derefed to actually compute statistics.
BREAKING (1): profiled
return value has changed: [<result> <?stats-map>]
-> [<result> <?pstats-obj>]
.
BREAKING (2): profile
handler keys have changed: :stats
, :stats-str_
-> :pstats
, :pstats-str_
.
BREAKING (3): Utils were renamed: merge-stats
-> merge-pstats
, format-stats
-> format-pstats
.
BREAKING (4): Stats maps keys have changed: #{:count :min :max :mean :mad :time}
-> #{:n :min :max :mean :mad :sum :p50 :p90 :p95 :p99}
.
New: Various readability tweaks+improvements to the output of format-pstats
.
New: profiled
and profile
calls now accept an :nmax
option to control size of captured time buffers (used to prevent OOMs).
New: Stats will now automatically include :tufte/compaction
info when buffer sizes were exceeded.
New: added several new fully-documented low-level primitives for advanced users: new-pdata
, with-profiling
, capture-time!
.
Impl: Significant performance improvements to both dynamic and thread-local profiling.
If you use only profile
with an out-the-box (println or timbre) handler, there are no breaking changes for you.
If you use profile
with any custom handlers, you'll need to update your handler fns:
If you use profiled
, see BREAKING (1, 3, 4) above.
[com.taoensso/tufte "1.4.0"]
This is a minor, non-breaking feature release
format-stats
output spacing (@kassapo)[com.taoensso/tufte "1.3.0"]
This is a minor, non-breaking feature release
format-stats
table (@austinhaas)[com.taoensso/tufte "1.2.0"]
This is a minor, non-breaking feature release
capture-time!
util fn[com.taoensso/tufte "1.1.3"]
This is a non-breaking hotfix release.
Hotfix: Fix broken micro-optimization for conditional profiling (@balajirrao, @kassapo)
[com.taoensso/tufte "1.1.2"]
This is a non-breaking hotfix release.
Hotfix: Fix broken handler namespace filters (@knotschi)
[com.taoensso/tufte "1.1.1"]
This is a non-breaking hotfix release.
Hotfix: [#16] Fix merge-stats
typo (@atdixon)
Impl: [#14] Add short mention of laziness to relevant doc-strings
[com.taoensso/tufte "1.1.0"]
NB This release now requires Clojure >= 1.7. Please continue to use
v1.0.x
if you're stuck on Clojure < 1.7.
Impl: Bump minimum Clojure dependency, migrate from .cljx to .cljc
[com.taoensso/tufte "1.0.2"]
Hotfix: [#6] Fix non-dynamic p-nesting support
[com.taoensso/tufte "1.0.1"]
Hotfix: [#4] Fix broken reference (@federkasten)
[com.taoensso/tufte "1.0.0"]
No changes from
1.0.0-RC2
[com.taoensso/tufte "1.0.0-RC2"]
Hotfix: [#2] Timbre handler: fix broken timbre level support (@gtrak)
[com.taoensso/tufte "1.0.0-RC1"]
Initial release
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close