daemon8/php
daemon8/php is a PHP package offering reusable utilities and helpers to streamline common tasks in applications. Designed to be lightweight and easy to integrate, it provides a foundation for shared code and faster development across projects.
Installation:
composer require daemon8ai/daemon8-php
Configuration:
Add your Daemon8 API key to .env:
DAEMON8_API_KEY=your_api_key_here
First Use Case: Instrument a Laravel route or service method:
use Daemon8\Daemon8;
Route::get('/api/health', function () {
return Daemon8::observe('health_check', function () {
return response()->json(['status' => 'ok']);
});
});
Daemon8::observe() method for core functionalityDaemon8\Observers namespace for built-in observersService Provider Integration: Create a custom service provider to auto-register Daemon8:
// app/Providers/Daemon8ServiceProvider.php
namespace App\Providers;
use Daemon8\Daemon8;
use Illuminate\Support\ServiceProvider;
class Daemon8ServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(Daemon8::class, function ($app) {
$daemon8 = new Daemon8();
$daemon8->setApiKey(config('daemon8.api_key'));
return $daemon8;
});
}
public function boot()
{
$this->app->booted(function () {
Daemon8::start();
});
}
}
Register in config/app.php providers array.
Middleware for HTTP Observability:
// app/Http/Middleware/ObserveRequests.php
namespace App\Http\Middleware;
use Daemon8\Daemon8;
use Closure;
class ObserveRequests
{
public function handle($request, Closure $next)
{
return Daemon8::observe('http_request', function () use ($request, $next) {
return $next($request);
});
}
}
Add to app/Http/Kernel.php middleware stack.
Queue Job Instrumentation:
// app/Jobs/ProcessOrder.php
namespace App\Jobs;
use Daemon8\Daemon8;
use Illuminate\Bus\Queueable;
class ProcessOrder implements Queueable
{
use Dispatchable, InteractsWithQueue, Queueable;
public function handle()
{
Daemon8::observe('process_order_job', function () {
// Job logic here
});
}
}
Artisan Command Observability:
// app/Console/Commands/ExampleCommand.php
namespace App\Console\Commands;
use Daemon8\Daemon8;
use Illuminate\Console\Command;
class ExampleCommand extends Command
{
protected $signature = 'example:command';
protected $description = 'An example command';
public function handle()
{
Daemon8::observe('example_command', function () {
// Command logic here
});
}
}
Tracking Business Metrics:
Daemon8::observe('checkout_flow', function () {
// Track entire checkout process
$order = Order::create($request->all());
$payment = Payment::process($order);
return $payment;
}, ['user_id' => auth()->id(), 'cart_value' => $cartTotal]);
Error Tracking:
try {
$result = Daemon8::observe('critical_operation', function () {
return $service->execute();
});
} catch (\Exception $e) {
Daemon8::observe('error_critical_operation', function () use ($e) {
throw $e;
}, ['error_class' => get_class($e)]);
throw $e;
}
Performance Benchmarking:
$baseline = Daemon8::observe('baseline_performance', function () {
return $slowService->execute();
});
$optimized = Daemon8::observe('optimized_performance', function () {
return $fastService->execute();
});
Authentication Issues:
.env has DAEMON8_API_KEY and check Daemon8 dashboard for API key status.Daemon8::setApiKey(env('DAEMON8_API_KEY'));
Performance Overhead:
Daemon8::observe('high_freq_operation', function () {
// ...
}, [], 0.1); // 10% sampling rate
DAEMON8_DEBUG=true in .env to see overhead metrics.Network Dependencies:
try {
Daemon8::observe('critical_path', $callback);
} catch (\Exception $e) {
\Log::error('Daemon8 failed', ['exception' => $e]);
$callback();
}
Data Privacy:
$context = [
'user_id' => auth()->id(),
'email' => str_replace('@', '[AT]', auth()->user()->email),
'cart_items' => $cart->items->count()
];
Daemon8::observe('checkout', $callback, $context);
Observer Conflicts:
Daemon8::addObserver(new MemoryObserver(), 100); // Low priority
Daemon8::addObserver(new ExecutionObserver(), 200); // High priority
Enable Debug Mode:
DAEMON8_DEBUG=true
This outputs raw observation data to Laravel logs.
Inspect Observations:
$observations = Daemon8::getObservations();
dd($observations);
Test Locally: Use the local testing mode:
Daemon8::setTestMode(true);
// All observations will be stored in memory
$observations = Daemon8::getObservations();
Check API Status: Verify Daemon8 API connectivity:
if (!Daemon8::ping()) {
\Log::warning('Daemon8 API unavailable');
}
Custom Observers: Create domain-specific observers:
namespace App\Observers;
use Daemon8\ObserverInterface;
class OrderObserver implements ObserverInterface
{
public function observe($name, callable $callback, array $context = [], float $sampleRate = 1.0)
{
// Custom logic before/after observation
$result = $callback();
// Add custom context
$context['order_status'] = $result->status;
return $result;
}
}
Middleware for Auto-Instrumentation:
// app/Http/Middleware/InstrumentRequests.php
namespace App\Http\Middleware;
use Daemon8\Daemon8;
use Closure;
class InstrumentRequests
{
public function handle($request, Closure $next)
{
$routeName = $request->route()->getName();
return Daemon8::observe("route_{$routeName}", function () use ($request, $next) {
return $next($request);
}, [
'method' => $request->method(),
'path' => $request->path(),
'ip' => $request->ip()
]);
}
}
Event Listeners:
// app/Listeners/InstrumentEvents.php
namespace App\Listeners;
use Daemon8\Daemon8;
use Illuminate\Queue\Events\JobProcessed;
class InstrumentEvents
{
public function handle(JobProcessed $event)
{
Daemon8::observe('job_processed', function () use ($event) {
// Job already processed, just observe
}, [
'job' => get_class($event->job),
'queue' => $event->job->queue,
How can I help you explore Laravel packages today?