assetplan / scout-lite-apm
Small implementation around ScoutAPM Core Agent
Installs: 3 055
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
pkg:composer/assetplan/scout-lite-apm
Requires
- php: >=5.6
 - ext-json: *
 - ext-openssl: *
 - ext-sockets: *
 
README
A lightweight, zero-dependency PHP tracing utility compatible with the Scout APM Core Agent. Designed for legacy PHP applications (CakePHP 1.3, Laravel 5.x, custom stacks) running PHP 5.6+.
No Composer bloat, no framework magic. Just trace your code and send to the agent.
✨ Features
- ✅ Works with PHP 5.6+
 - ✅ Compatible with Scout APM Core Agent
 - ✅ Flush-safe in environments using 
exit()anddie() - ✅ Tracks controller actions, SQL queries, and custom code spans
 - ✅ Automatically redacts SQL values
 - ✅ Simple API for instrumentation
 - ✅ Fully buffered and flushed in a single atomic write
 - ✅ Measures request queue time (when available)
 
📦 Installation
Via Composer:
composer require assetplan/scout-lite-apm
🚀 Quick Start
use AssetPlan\ScoutLiteAPM\TraceSession; // Bootstrap (registers your app + configures socket path) TraceSession::bootstrap('YourAppName', 'your-agent-key'); // Start the request TraceSession::startRequest(); // Optionally measure queue time automatically // Custom lifecycle span (e.g. beforeFilter in CakePHP) $lifecycle = TraceSession::startCustom('Lifecycle/beforeFilter'); // ... TraceSession::endCustom($lifecycle); // Instrument a controller span $controller = TraceSession::startController('UserController', 'index'); // ... TraceSession::endController($controller); // Instrument SQL (automatically redacted) $sqlSpan = TraceSession::startSql('SELECT * FROM users WHERE id = 123'); // ... TraceSession::endSql($sqlSpan); // Finish the request TraceSession::endRequest(); // Flush (optional — you can also register a shutdown handler) TraceSession::flush();
🔐 Requirements
- PHP 5.6 or greater
 - Scout APM Core Agent running and listening via UNIX or TCP socket
 
⚙️ Configuration
By default, the Core Agent is expected at tcp://127.0.0.1:6590.
To override the socket path or API version:
TraceSession::bootstrap('YourApp', 'your-key', '/tmp/scout-agent.sock'); // or TraceSession::register('YourApp', 'your-key', '/tmp/scout-agent.sock', '1.0');
💡 Tips
- 
Calling
flush()multiple times is safe — only one send will occur. - 
If any span is left open, or
FinishRequestis missing, flush will be aborted. - 
Custom instrumentation can be added using
startCustom()/endCustom()orinstrument(). - 
Queue time will be included if headers like
X-Request-Startare available. - 
You can inspect internals via:
TraceSession::getOpenSpans()TraceSession::getEventBuffer()TraceSession::getRequestId()
 
🤝 License
MIT © AssetPlan
🧠 Authors
Crafted by humans who deal with legacy PHP and still want great observability.
- Cristian Fuentes (@cfuentessalgado)