README.md

# 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