# LiveLoad v0.0.1-rc.28 - Table of Contents

A load testing framework for simulating real, distributed, live load on your application.

## DISCLAIMER

The LiveLoad repo is currently private as I am building out the functionality and validating that it works as expected.

## GUIDES

- Guides
  - [Writing Your First Scenario](writing_your_first_scenario.md)
  - [Phoenix Baselines](phoenix_baselines.md)

- Changes
  - [Devlog](devlog.md)
  - [Changelog](changelog.md)

## Modules

- LiveLoad
  - [LiveLoad](LiveLoad.md): <!-- HEX PACKAGE DESCRIPTION START -->
  - [LiveLoad.JSON](LiveLoad.JSON.md): `LiveLoad.JSON` is a simple delegation module which delegates to one of a few optional JSON parsers.
`LiveLoad` requires JSON decoding for decoding certain messages via the browser protocol.

- LiveLoad.Cluster
  - [LiveLoad.Cluster](LiveLoad.Cluster.md): `LiveLoad.Cluster` defines the creation of an ephemeral cluster of nodes (via `FLAME`) that `LiveLoad` runs its scenarios on.
  - [LiveLoad.Cluster.Node](LiveLoad.Cluster.Node.md): `LiveLoad.Cluster.Node` implements the `FLAME.Trackable` protocol to allow `LiveLoad` to maintain the `FLAME.Pool` nodes for the duration of the `LiveLoad.Scenario`.

- LiveLoad.Result
  - [LiveLoad.Result](LiveLoad.Result.md): `LiveLoad.Result` defines the summarized result of a full distributed load test.
This result is a compact, serializable representation of all of the metrics collected while the load test was running across all of the nodes.
It can be used by reporters in order to render reports of what occured during the entirety of a load test.
  - [LiveLoad.Result.Bucket](LiveLoad.Result.Bucket.md): A single time bucket in the overall scenario's time series metrics.
  - [LiveLoad.Result.DimensionedCounter](LiveLoad.Result.DimensionedCounter.md): A counter with both a total aggregated value and an optional dimensional breakdown.
  - [LiveLoad.Result.DimensionedHistogram](LiveLoad.Result.DimensionedHistogram.md): A histogram with both a total aggregated value and an optional dimensional breakdown.
  - [LiveLoad.Result.NodeResult](LiveLoad.Result.NodeResult.md): Per-node scenario results to allow drilling down to how scenarios behaved on specific nodes.
  - [LiveLoad.Result.PrecomputedQuantiles](LiveLoad.Result.PrecomputedQuantiles.md): Precomputed compact quantile curve materialized from an underlying [`:ddskerl.ddsketch/0`](https://hexdocs.pm/ddskerl/ddskerl.html#t:ddsketch/0)
collected by the LiveLoad scenario telemetry pipeline.
  - [LiveLoad.Result.ScenarioResult](LiveLoad.Result.ScenarioResult.md): A result for a scenario run, including summarized user results, aggregated counters, histograms, and bucketed time series data.

  - [LiveLoad.Result.Users](LiveLoad.Result.Users.md): Overall summary of users that completed a scenario run.

- Scenario
  - [LiveLoad.Scenario](LiveLoad.Scenario.md): A behaviour module for implementing a load testing scenario to be run via LiveLoad.
  - [LiveLoad.Scenario.Context](LiveLoad.Scenario.Context.md): A context struct that is given to every `c:LiveLoad.Scenario.run/3` callback while running a `LiveLoad.Scenario`.
It wraps the `LiveLoad.Browser.Context` details for the runner and provides a simple API for interacting with the browser.
  - [LiveLoad.Scenario.Error](LiveLoad.Scenario.Error.md): Any error that occurs within a `LiveLoad.Scenario` is marked on the `LiveLoad.Scenario.Context`
as a `LiveLoad.Scenario.Error`.

- Browser
  - [LiveLoad.Browser](LiveLoad.Browser.md): `LiveLoad.Browser` is the struct representing the browser abstraction that is used in a `LiveLoad.Scenario`.
It wraps the given implementation of the `LiveLoad.Browser.Connection` behaviour. All operations on the browser
instance are delegated to the `LiveLoad.Browser.Connection` implementation.
  - [LiveLoad.Browser.Context](LiveLoad.Browser.Context.md): `LiveLoad.Browser.Context` is an isolated context where all operations of a `LiveLoad.Scenario` take place.
It has a parent `LiveLoad.Browser`, and whatever private data is related to the current connection's underlying context.

- Browser.Connection
  - [LiveLoad.Browser.Connection](LiveLoad.Browser.Connection.md): `LiveLoad.Browser.Connection` defines a behaviour for how to connect to browsers with LiveLoad.
  - [LiveLoad.Browser.Connection.Playwright](LiveLoad.Browser.Connection.Playwright.md): An implementation of `LiveLoad.Browser.Connection` that uses the `PlaywrightEx` library to run and communicate with a Playwright instance.

## Mix Tasks

- [mix live_load.install](Mix.Tasks.LiveLoad.Install.md): Downloads and installs the necessary Playwright driver and browser binaries for `LiveLoad`.

