canaltp/sam-monitoring
Laravel package for monitoring and tracking application health and activity, providing status checks, metrics, and alerts to help detect issues early and keep services running smoothly.
Installation Add the package via Composer:
composer require canaltp/sam-monitoring
Publish the configuration (if needed):
php artisan vendor:publish --provider="CanalTP\SamMonitoring\SamMonitoringServiceProvider"
Basic Usage
Register a monitorable model (e.g., User):
use CanalTP\SamMonitoring\Traits\Monitorable;
class User extends Model
{
use Monitorable;
}
First Monitoring Event Trigger a monitorable event (e.g., login attempt):
$user = User::find(1);
$user->monitor('login_attempt', ['ip' => request()->ip()]);
Viewing Logs Access logs via:
php artisan sam:logs
Or check the sam_monitoring_logs table directly.
Event-Based Monitoring
Attach monitoring to Eloquent events (e.g., retrieved, saved):
User::retrieved(function ($user) {
$user->monitor('retrieved', ['context' => 'dashboard']);
});
API Request Tracking Log API calls with metadata:
Route::get('/api/data', function () {
auth()->user()->monitor('api_call', [
'endpoint' => 'data',
'method' => 'GET',
'params' => request()->all()
]);
return response()->json(['data' => '...']);
});
Batch Processing Monitor bulk operations (e.g., imports):
$users = User::all();
foreach ($users as $user) {
$user->monitor('batch_import', ['batch_id' => 123]);
}
Custom Log Storage
Extend storage via SamMonitoringServiceProvider:
$this->app->bind('sam.monitoring.storage', function () {
return new CustomStorage();
});
auth.login):
event(new Authenticated($user));
$user->monitor('authenticated', ['event' => 'login']);
class MonitorRequests
{
public function handle($request, Closure $next)
{
auth()->user()->monitor('request', [
'path' => $request->path(),
'method' => $request->method()
]);
return $next($request);
}
}
$user->monitor('job_started', ['job' => 'export'])->dispatch();
Performance Overhead
User::all()->each(...)).User::chunk(100, function ($users) {
foreach ($users as $user) {
$user->monitor('chunk_processed')->dispatch();
}
});
Missing Traits
Monitorable trait is used on the model:
class User extends Model
{
// ❌ Forgotten trait = no monitoring!
}
Configuration Conflicts
sam_monitoring_logs. Customize in config/sam-monitoring.php:
'table' => 'custom_monitoring_logs',
Race Conditions
DB::transaction(function () use ($user) {
$user->monitor('critical_action');
});
Log Not Appearing? Check:
sam_monitoring_logs).dispatch()).Query Debugging Enable Laravel debug mode:
APP_DEBUG=true
Or log raw queries:
\DB::enableQueryLog();
$user->monitor('test');
dd(\DB::getQueryLog());
Custom Log Fields
Override the getMonitorableAttributes() method:
class User extends Model
{
use Monitorable;
protected function getMonitorableAttributes()
{
return array_merge(parent::getMonitorableAttributes(), [
'custom_field' => $this->custom_field,
]);
}
}
Log Filters Filter logs via a scope:
class UserMonitoringScope
{
public function apply(Builder $builder, $event)
{
return $builder->where('event', $event);
}
}
Register in SamMonitoringServiceProvider:
$this->app->bind('sam.monitoring.scopes', function () {
return [UserMonitoringScope::class];
});
Webhook Notifications
Extend the Logged event:
event(new \CanalTP\SamMonitoring\Events\Logged($log));
// Send to Slack/email in a listener.
How can I help you explore Laravel packages today?