| Server IP : 35.80.110.71 / Your IP : 216.73.216.221 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ip-172-31-21-44 6.17.0-1019-aws #19~24.04.1-Ubuntu SMP Tue Jun 23 18:53:06 UTC 2026 x86_64 User : ubuntu ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/splitstream/current/routes/ |
Upload File : |
<?php
use App\Http\Controllers\Api\ApiKeysController;
use App\Http\Controllers\Api\AssignController;
use App\Http\Controllers\Api\AuditController;
use App\Http\Controllers\Api\EnvironmentsController;
use App\Http\Controllers\Api\EventsController;
use App\Http\Controllers\Api\ExperimentsController;
use App\Http\Controllers\Api\HealthController;
use App\Http\Controllers\Api\MetricsController;
use App\Http\Controllers\Api\MutexGroupsController;
use App\Http\Controllers\Api\ResultsController;
use App\Http\Controllers\Api\SegmentsController;
use App\Http\Controllers\Api\WorkspacesController;
use Illuminate\Support\Facades\Route;
Route::prefix('v1')->group(function () {
Route::get('healthz', HealthController::class)->name('v1.healthz');
Route::middleware(['api.key', 'workspace.rate-limit'])->group(function () {
Route::get('workspaces/current', [WorkspacesController::class, 'current']);
// Hot endpoints — these run under the Octane (RoadRunner) carve-out
// via Apache mod_proxy. Client keys are allowed; per-unit + per-IP
// sub-limits apply per docs/api/rate-limits.md.
Route::post('assign', [AssignController::class, 'assign']);
Route::post('assign/batch', [AssignController::class, 'assignBatch']);
Route::get('assignments/{unit_id}', [AssignController::class, 'forUnit']);
Route::post('events', [EventsController::class, 'trackEvent']);
Route::post('events/batch', [EventsController::class, 'trackEventBatch']);
Route::post('exposures', [EventsController::class, 'logExposure']);
// Management endpoints — server-key only.
Route::middleware(['api.key:server'])->group(function () {
Route::delete('assignments/{experiment}/{unit_id}', [AssignController::class, 'forceRebucket']);
// Experiments
Route::get('experiments', [ExperimentsController::class, 'index']);
Route::post('experiments', [ExperimentsController::class, 'store']);
Route::get('experiments/{id}', [ExperimentsController::class, 'show']);
Route::patch('experiments/{id}', [ExperimentsController::class, 'update']);
Route::delete('experiments/{id}', [ExperimentsController::class, 'destroy']);
Route::post('experiments/{id}/start', [ExperimentsController::class, 'start']);
Route::post('experiments/{id}/stop', [ExperimentsController::class, 'stop']);
// Results
Route::get('experiments/{id}/results', [ResultsController::class, 'latest']);
Route::get('experiments/{id}/results/history', [ResultsController::class, 'history']);
// Metrics
Route::get('metrics', [MetricsController::class, 'index']);
Route::post('metrics', [MetricsController::class, 'store']);
Route::get('metrics/{id}', [MetricsController::class, 'show']);
Route::patch('metrics/{id}', [MetricsController::class, 'update']);
Route::delete('metrics/{id}', [MetricsController::class, 'destroy']);
// Mutex groups
Route::get('mutex-groups', [MutexGroupsController::class, 'index']);
Route::post('mutex-groups', [MutexGroupsController::class, 'store']);
// Environments
Route::get('environments', [EnvironmentsController::class, 'index']);
Route::post('environments', [EnvironmentsController::class, 'store']);
Route::get('environments/{id}', [EnvironmentsController::class, 'show']);
Route::patch('environments/{id}', [EnvironmentsController::class, 'update']);
Route::delete('environments/{id}', [EnvironmentsController::class, 'destroy']);
// Segments
Route::get('segments', [SegmentsController::class, 'index']);
Route::post('segments', [SegmentsController::class, 'store']);
Route::get('segments/{id}', [SegmentsController::class, 'show']);
Route::patch('segments/{id}', [SegmentsController::class, 'update']);
Route::delete('segments/{id}', [SegmentsController::class, 'destroy']);
// API keys
Route::get('api-keys', [ApiKeysController::class, 'index']);
Route::post('api-keys', [ApiKeysController::class, 'store']);
Route::delete('api-keys/{id}', [ApiKeysController::class, 'destroy']);
// Audit
Route::get('audit', AuditController::class);
});
});
});