> For the complete documentation index, see [llms.txt](https://docs.metric.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.metric.xyz/run-a-pool/price-updates-and-monitoring.md).

# Operate a pool

Every pool needs monitoring. Only update-dependent pools need an update pipeline.

## Keep pricing operational

* Check that every required feed stays usable, including feeds kept fresh by a shared updater you don't run. A shared updater can stop or change its cadence without telling you.
* Test stale-data handling end to end. Through your Price Provider, confirm that a stale price is rejected and that quoting recovers once a fresh update arrives.
* For **conditional updates**, watch two things: whether your updates reach the update pipeline, and which quote is actually used when trades execute. An idle feed's stored timestamp can look stale even when the pipeline is healthy, and fresh even when it isn't. On its own it doesn't tell you the feed is live.
* Set alerts on missing data, not just bad values. If an update or monitoring signal stops arriving, that should page you. It shouldn't just go quiet.

Setup: [Oracles](/how-pools-work/oracles.md) · [Best practices](/run-a-pool/chain-specific-guides.md) · [Open source kit](/run-a-pool/examples.md).

## Monitor the pool

* **Pricing:** update age, quote failures and divergence from an independent reference.
* **Execution:** failed swaps, slippage and available liquidity in both directions.
* **Capital:** inventory and position value separately from LP earnings.
* **Controls:** pause state, guard settings, pending provider/admin changes and pool tier.
* **Routers:** Test through the route traders will use. Gated oracle reads may reject direct calls even while the pool is working correctly, so a failed direct read doesn't prove the pool is broken.
* **Extensions:** Watch extension guards by direction and size. A tripped guard, such as StopLoss, can block trades in one direction or above a certain size while the pool stays open otherwise. Check liquidity on each side separately.

## Respond to failures

1. Stop the damage. If pricing is unavailable or wrong, halt quoting, or have the admin call `factory.pausePool(pool)`.
   * **A swap pause doesn't lock deposits or withdrawals.** Their extension rules still apply.
   * An admin can't lift a protocol-level pause.
2. Fix the cause, then run the [launch checks](/run-a-pool/create-and-configure-a-pool.md#5-create-fund-and-verify) again before resuming with `factory.unpausePool(pool)`.
3. Confirm the recovery. After unpausing, run a small swap in each direction through the route traders will use, and keep a close watch on pricing and execution until the pool has been stable for a while.
