# Qtrace
Quick function latency analysis and visualization based on Erlang tracing.
Traces function calls and collects latency measurements in microseconds. Uses histogram-based aggregation to provide quantile analysis (P50, P95, P99) and terminal-based visualization of performance distributions across multiple functions.
## Usage
```elixir
# Start a tracing session, tracing all processes
session = Qtrace.start_session(:all)
# Trace specific functions
Qtrace.trace_function(session, MyApp, :my_function, 2)
Qtrace.trace_function(session, MyApp, :another_function, 1)
# ... run your code ...
# Visualize all traced functions
Qtrace.plot_all_histograms(session)
# Get specific quantiles
p95 = Qtrace.get_quantile(session, 0.95, MyModule, :my_function, 2)
```
### Example Output
```txt
Latency Histogram: Qtrace.Demo.web_request/0
================================================================================
0 13 26 39 52
5.9ms │███ (3)
6.9ms │█ (1)
8.1ms │██ (2)
10.3ms │█ (1)
11.2ms │██████ (5)
12.1ms │█████ (4)
13.2ms │███ (3)
14.2ms │███████ (6)
15.4ms │████████████████ (14)
16.7ms │█████████████████ (15)
18.1ms │████████████████████ (17)
19.6ms │█████████████████████████████████ (29)
21.3ms │██████████████████████████████████████████████████████████ (50)
23.0ms │██████████████████████████████████████████ (36)
24.9ms │███████████████████████████████████████████████ (41)
27.0ms │████████████████████████████████████████████████████████████ (52)
29.3ms │█████████████████████████████████████████████████████████ (49)
31.7ms │███████████████████████████████████████████████████████████ (51)
34.4ms │██████████████████████████████████████ (33)
37.2ms │████████████████████████████████████████ (35)
40.3ms │████████████████████████ (21)
43.7ms │███████ (6)
47.3ms │███ (3)
51.3ms │██ (2)
134.0ms │██ (2)
157.2ms │█ (1)
199.9ms │█ (1)
216.6ms │█████████ (8)
234.6ms │██ (2)
254.2ms │██ (2)
275.4ms │███ (3)
298.3ms │██ (2)
323.2ms │██ (2)
└────────────────────────────────────────────────────────────
0 13 26 39 52
Stats:
Min: 5.9ms
Max: 323.2ms
Samples: 502
P50: 27.0ms
P95: 47.3ms
P99: 275.4ms
```
## Installation
Add `qtrace` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:qtrace, "~> 1.0"}
]
end
```
## Documentation
Full documentation is available at [https://hexdocs.pm/qtrace](https://hexdocs.pm/qtrace).
## License
MIT License