A modern Laravel package for tracking and managing command executions with detailed analytics, beautiful UI, and comprehensive command management features.
- PHP: 8.4 or higher
- Laravel: 12.x or higher
- Vue.js: 3.x (included via CDN)
- Tailwind CSS: 3.x (included via CDN)
For production projects, install via Composer:
composer require laravelplus/commander
For development or local projects, add to your composer.json
:
{
"repositories": [
{
"type": "path",
"url": "packages/laravelplus/commander"
}
],
"require": {
"laravelplus/commander": "*"
}
}
Then run:
composer install
- Publish migrations and config:
php artisan vendor:publish --tag=commander-migrations
php artisan vendor:publish --tag=commander-config
- Run migrations:
php artisan migrate
- Access the interface:
- Visit:
http://your-app.com/admin/commander
- Default URL can be configured in
config/commander.php
- Visit:
The package is highly configurable through the config/commander.php
file:
return [
'enabled' => env('COMMANDER_ENABLED', true),
// Interface Configuration
'url' => env('COMMANDER_URL', 'admin/commander'),
'route_prefix' => env('COMMANDER_ROUTE_PREFIX', 'admin'),
'route_name_prefix' => env('COMMANDER_ROUTE_NAME_PREFIX', 'commander'),
'middleware' => env('COMMANDER_MIDDLEWARE', ['auth', 'web']),
// Tracking Configuration
'track_output' => env('COMMANDER_TRACK_OUTPUT', true),
'track_arguments' => env('COMMANDER_TRACK_ARGUMENTS', true),
'track_options' => env('COMMANDER_TRACK_OPTIONS', true),
'track_execution_time' => env('COMMANDER_TRACK_EXECUTION_TIME', true),
'track_user' => env('COMMANDER_TRACK_USER', true),
// Storage Configuration
'max_output_length' => env('COMMANDER_MAX_OUTPUT_LENGTH', 10000),
'retention_days' => env('COMMANDER_RETENTION_DAYS', 90),
];
// Commands to ignore from tracking (still appear in interface)
'ignored_commands' => [
'schedule:run',
'queue:work',
'queue:listen',
'migrate:*',
'db:seed',
'config:cache',
'route:cache',
'view:cache',
],
// Commands to exclude from interface (completely hidden)
'excluded_commands' => [
'vendor:*',
'package:*',
'tinker',
'serve',
'test:*',
'dusk:*',
'make:*',
'stub:*',
'clear-compiled',
'down',
'up',
'env',
'key:generate',
'optimize',
'optimize:clear',
'config:clear',
'route:clear',
'view:clear',
'cache:clear',
'cache:forget',
'cache:table',
'session:table',
'queue:table',
'queue:failed-table',
'queue:batches-table',
'notifications:table',
'event:generate',
'listener:generate',
'mail:make',
'middleware:make',
'provider:make',
'request:make',
'resource:make',
'rule:make',
'seeder:make',
'test:make',
'channel:make',
'command:make',
'component:make',
'controller:make',
'event:make',
'exception:make',
'factory:make',
'job:make',
'listener:make',
'mail:make',
'middleware:make',
'model:make',
'notification:make',
'observer:make',
'policy:make',
'provider:make',
'request:make',
'resource:make',
'rule:make',
'seeder:make',
'test:make',
],
// Commands that appear but cannot be executed (read-only)
'disabled_commands' => [
'migrate:fresh',
'migrate:refresh',
'migrate:reset',
'db:wipe',
'config:clear',
'route:clear',
'view:clear',
'cache:clear',
'optimize:clear',
'event:clear',
'queue:restart',
'queue:flush',
'queue:forget',
'queue:retry',
'queue:retry-batch',
'queue:work',
'queue:listen',
'schedule:run',
'schedule:list',
'schedule:test',
'schedule:work',
'vendor:publish',
'vendor:install',
'vendor:update',
'package:discover',
'package:clear-cache',
'package:optimize',
'package:cache',
'package:config',
'package:route',
'package:view',
'package:lang',
'package:migrate',
'package:seed',
'package:publish',
'package:install',
'package:update',
'package:uninstall',
'package:list',
'package:show',
'package:outdated',
'package:update',
'package:install',
'package:remove',
'package:require',
'package:require-dev',
'package:update',
'package:install',
'package:remove',
'package:require',
'package:require-dev',
],
The package includes comprehensive test coverage with 54 tests and 166 assertions:
# Run all tests
php vendor/bin/phpunit
# Run specific test suites
php vendor/bin/phpunit --testsuite=Unit
php vendor/bin/phpunit --testsuite=Feature
# Run with coverage report
php vendor/bin/phpunit --coverage-html coverage/
- ✅ Unit Tests: 51 tests covering all action classes, controllers, and services
- ✅ Feature Tests: 3 tests covering API endpoints and dashboard functionality
- ✅ Database Tests: Full database testing with SQLite in-memory database
- ✅ Mock Testing: Comprehensive mocking of dependencies
- ✅ Error Handling: Tests for all error scenarios and edge cases
- ✅ PHPUnit 11: Latest testing framework with improved performance
tests/
├── Feature/
│ └── DashboardTest.php # API endpoint tests
├── Unit/
│ ├── Http/
│ │ ├── Actions/
│ │ │ ├── BaseActionTest.php
│ │ │ ├── GetCommandsActionTest.php
│ │ │ ├── RunCommandActionTest.php
│ │ │ ├── GetDashboardStatsActionTest.php
│ │ │ ├── RetryCommandActionTest.php
│ │ │ ├── ShowDashboardActionTest.php
│ │ │ ├── GetRecentExecutionsActionTest.php
│ │ │ └── SearchCommandsActionTest.php
│ │ └── Controllers/
│ │ └── CommandsControllerTest.php
│ └── TestCase.php # Base test case
└── phpunit.xml # Test configuration
You can customize the commander interface URL by setting the COMMANDER_URL
environment variable:
# Default: http://127.0.0.1:8000/admin/commander
COMMANDER_URL=admin/commander
# Custom URL examples:
COMMANDER_URL=admin/tools/commands
COMMANDER_URL=management/command-center
COMMANDER_URL=system/command-executor
- ✅ Command Execution Tracking: Track when commands were last run with detailed metrics
- ✅ Execution History: View detailed history of all command executions with search and filtering
- ✅ Performance Analytics: Track execution times, success rates, and performance trends
- ✅ User Tracking: Track which user executed each command with audit trail
- ✅ Real-time Interface: Modern Vue 3 powered interface with real-time updates
- ✅ Beautiful Modern UI: Clean, responsive design with Tailwind CSS
- ✅ Command Arguments Support: Dynamic forms for commands with arguments and options
- ✅ Confirmation Dialogs: Safety-first approach with confirmation before execution
- ✅ Improved Modals: Better modal design that doesn't get cut off
- ✅ Visual Indicators: Clear status indicators for command states
- ✅ Responsive Design: Works perfectly on desktop, tablet, and mobile
- ✅ Disabled Commands: Mark commands as disabled (read-only) in the interface
- ✅ Excluded Commands: Completely hide commands from the interface
- ✅ Pattern Matching: Support for wildcard patterns in command filtering
- ✅ Command Categories: Organize commands by namespace/category
- ✅ Search & Filter: Powerful search and filtering capabilities
- ✅ Dashboard Statistics: Overview of command execution metrics
- ✅ Activity Monitoring: Real-time activity feed with filtering
- ✅ Failed Command Tracking: Dedicated interface for failed commands
- ✅ Retry Functionality: Retry failed commands with original parameters
- ✅ Schedule Management: Interface for managing scheduled commands
- ✅ Highly Configurable: Extensive configuration options
- ✅ Security Features: CSRF protection, user authentication
- ✅ Output Storage: Store command output with configurable limits
- ✅ Retention Policy: Automatic cleanup of old execution records
- ✅ Environment Support: Different settings for different environments
Once installed, you can access the commander interface at:
http://your-app.com/admin/commander
- View all available commands with their descriptions
- See last execution time and status
- Filter by category or search by name
- Execute commands with confirmation dialog
- Dynamic forms for commands with arguments
- Support for required and optional arguments
- Default value handling
- Option flags and values
- Detailed execution history for each command
- Success/failure status tracking
- Execution time and output storage
- User tracking for audit purposes
- Overview of command execution metrics
- Success rate statistics
- Popular commands tracking
- Recent activity feed
- Dedicated interface for failed commands
- Retry functionality with original parameters
- Error analysis and debugging
- Bulk retry operations
- Interface for managing scheduled commands
- Next run time calculations
- Schedule status monitoring
- Manual execution of scheduled commands
The package provides helper functions for easy access:
// Generate commander URL
$url = commander_url(); // http://127.0.0.1:8000/admin/commander
$url = commander_url('list'); // http://127.0.0.1:8000/admin/commander/list
// Generate commander routes
$route = commander_route('index'); // commander.index
$route = commander_route('run', ['command' => 'test']); // commander.run
// Check if commander is enabled
if (commander_enabled()) {
// Commander functionality is available
}
You can also manually track command executions:
use LaravelPlus\Commander\Traits\TracksCommandExecution;
class YourController extends Controller
{
use TracksCommandExecution;
public function runCommand(Request $request)
{
$commandName = 'check:password-expiry';
$arguments = ['--batch-size=10'];
$options = ['--delay=2'];
// Start tracking
$this->startTracking($commandName, $arguments, $options);
try {
// Execute your command
$result = $this->executeCommand($commandName, $arguments, $options);
// Complete tracking with success
$this->completeTracking(true, 0, $result['output']);
return response()->json($result);
} catch (Exception $e) {
// Complete tracking with failure
$this->completeTracking(false, 1, $e->getMessage());
throw $e;
}
}
}
use LaravelPlus\Commander\Models\CommandExecution;
// Get last execution time for a command
$lastExecution = CommandExecution::getLastExecutionTime('check:password-expiry');
// Get execution statistics
$stats = CommandExecution::getCommandStats('check:password-expiry', 30);
// Get recent executions
$recentExecutions = CommandExecution::recent(7)->get();
// Get failed executions
$failedExecutions = CommandExecution::failed()->get();
The package provides several API endpoints for managing command executions:
GET /admin/commander/api/list
Returns all commands with their last execution time and statistics.
GET /admin/commander/api/{commandName}/history
Returns paginated history of executions for a specific command.
GET /admin/commander/api/{commandName}/stats
We welcome contributions! Please see our Contributing Guide for details.
# Clone the repository
git clone https://github.com/laravelplus/commander.git
# Install dependencies
composer install
# Run tests
php vendor/bin/phpunit
# Run code style checks
./vendor/bin/pint
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Make your changes
- Add tests for new functionality
- Ensure all tests pass (
php vendor/bin/phpunit
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This package is open-sourced software licensed under the MIT license.
- Built with Laravel 12+
- UI powered by Vue 3
- Styled with Tailwind CSS
- Testing with PHPUnit
- Requires PHP 8.4+
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Wiki
Made with ❤️ by the LaravelPlus Team