mirror of
https://github.com/coollabsio/coolify.git
synced 2026-10-06 05:58:14 -04:00
Use the Coolify data volume path in local env so Sentinel can read access.log instead of the production proxy path. Cover the directory and TRAFFIC_ACCESS_LOG_PATH in tests.
88 lines
3.8 KiB
PHP
88 lines
3.8 KiB
PHP
<?php
|
|
|
|
use App\Actions\Server\StartSentinel;
|
|
use App\Models\Server;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Illuminate\Support\Facades\Queue;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
beforeEach(function () {
|
|
Queue::fake();
|
|
$user = User::factory()->create();
|
|
$this->team = $user->teams()->first();
|
|
});
|
|
|
|
it('produces no traffic env when disabled', function () {
|
|
$server = Server::factory()->create(['team_id' => $this->team->id]);
|
|
$server->settings->is_traffic_analytics_enabled = false;
|
|
$server->settings->save();
|
|
expect(StartSentinel::sentinelTrafficEnvironment($server->fresh()))->toBe([]);
|
|
});
|
|
|
|
it('produces traffic + geoip env when enabled', function () {
|
|
$server = Server::factory()->create(['team_id' => $this->team->id]);
|
|
$server->settings->is_traffic_analytics_enabled = true;
|
|
$server->settings->geoip_maxmind_license_key = 'lic';
|
|
$server->settings->save();
|
|
|
|
$env = StartSentinel::sentinelTrafficEnvironment($server->fresh());
|
|
expect($env['TRAFFIC_ENABLED'])->toBe('true');
|
|
expect($env['TRAFFIC_PROXY_TYPE'])->toBe('auto');
|
|
expect($env['TRAFFIC_TOPN'])->toBe('50');
|
|
expect($env['TRAFFIC_SAMPLE_THRESHOLD'])->toBe('0');
|
|
expect($env['TRAFFIC_RETENTION_1H_DAYS'])->toBe('30');
|
|
expect($env['TRAFFIC_RETENTION_1D_DAYS'])->toBe('395');
|
|
expect($env['GEOIP_ENABLED'])->toBe('true');
|
|
expect($env['GEOIP_REFRESH_DAYS'])->toBe('30');
|
|
expect($env['GEOIP_MAXMIND_LICENSE_KEY'])->toBe('lic');
|
|
expect($env)->toHaveKey('TRAFFIC_ACCESS_LOG_PATH');
|
|
});
|
|
|
|
it('uses the dev proxy volume for traffic logs locally', function () {
|
|
config()->set('app.env', 'local');
|
|
$server = Server::factory()->create(['team_id' => $this->team->id]);
|
|
$server->settings->is_traffic_analytics_enabled = true;
|
|
$server->settings->save();
|
|
|
|
expect(StartSentinel::trafficLogDirectory($server->fresh()))
|
|
->toBe('/var/lib/docker/volumes/coolify_dev_coolify_data/_data/proxy');
|
|
expect(StartSentinel::sentinelTrafficEnvironment($server->fresh())['TRAFFIC_ACCESS_LOG_PATH'])
|
|
->toBe('/var/lib/docker/volumes/coolify_dev_coolify_data/_data/proxy/access.log');
|
|
});
|
|
|
|
it('passes custom traffic settings as sentinel env', function () {
|
|
$server = Server::factory()->create(['team_id' => $this->team->id]);
|
|
$server->settings->is_traffic_analytics_enabled = true;
|
|
$server->settings->traffic_topn = 100;
|
|
$server->settings->traffic_sample_threshold = 500;
|
|
$server->settings->traffic_retention_1h_days = 14;
|
|
$server->settings->traffic_retention_1d_days = 180;
|
|
$server->settings->is_geoip_enabled = false;
|
|
$server->settings->geoip_refresh_days = 7;
|
|
// A key may still be stored while GeoIP is off; it must not reach Sentinel.
|
|
$server->settings->geoip_maxmind_license_key = 'secret-maxmind-key';
|
|
$server->settings->save();
|
|
|
|
$env = StartSentinel::sentinelTrafficEnvironment($server->fresh());
|
|
expect($env['TRAFFIC_TOPN'])->toBe('100');
|
|
expect($env['TRAFFIC_SAMPLE_THRESHOLD'])->toBe('500');
|
|
expect($env['TRAFFIC_RETENTION_1H_DAYS'])->toBe('14');
|
|
expect($env['TRAFFIC_RETENTION_1D_DAYS'])->toBe('180');
|
|
expect($env['GEOIP_ENABLED'])->toBe('false');
|
|
expect($env['GEOIP_REFRESH_DAYS'])->toBe('7');
|
|
expect($env)->not->toHaveKey('GEOIP_MAXMIND_LICENSE_KEY');
|
|
});
|
|
|
|
it('injects the maxmind license key only when geoip is enabled', function () {
|
|
$server = Server::factory()->create(['team_id' => $this->team->id]);
|
|
$server->settings->is_traffic_analytics_enabled = true;
|
|
$server->settings->is_geoip_enabled = true;
|
|
$server->settings->geoip_maxmind_license_key = 'secret-maxmind-key';
|
|
$server->settings->save();
|
|
|
|
$env = StartSentinel::sentinelTrafficEnvironment($server->fresh());
|
|
expect($env['GEOIP_MAXMIND_LICENSE_KEY'])->toBe('secret-maxmind-key');
|
|
});
|