26 lines
2.3 KiB
PHP
26 lines
2.3 KiB
PHP
<?php
|
|
|
|
use Illuminate\Foundation\Bootstrap\LoadConfiguration;
|
|
use Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables;
|
|
|
|
$root = dirname(__DIR__);
|
|
require $root.'/vendor/autoload.php';
|
|
$app = require $root.'/bootstrap/app.php';
|
|
(new LoadEnvironmentVariables)->bootstrap($app);
|
|
(new LoadConfiguration)->bootstrap($app);
|
|
$c = $app->make('config')->get('database.connections.'.$app->make('config')->get('database.default'));
|
|
throw_unless(($c['driver'] ?? '') === 'pgsql' && empty($c['url']) && (int) $c['port'] !== 55441 && ! str_ends_with($c['database'], '_test'), RuntimeException::class, 'Explicit non-QA PostgreSQL configuration required for this read-only inspection.');
|
|
$pdo = new PDO('pgsql:host='.$c['host'].';port='.$c['port'].';dbname='.$c['database'], $c['username'], $c['password'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
|
|
$pdo->exec('BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ READ ONLY');
|
|
try {
|
|
$proof = ['captured_at' => gmdate('c'), 'identity' => $pdo->query("SELECT current_database() AS database,inet_server_port() AS port,current_setting('transaction_read_only') AS read_only")->fetch(PDO::FETCH_ASSOC),
|
|
'migrations' => $pdo->query("SELECT migration FROM public.migrations WHERE migration IN ('2026_10_09_030000_extend_opportunity_resources','2026_10_10_040000_create_portal_profile_authorization','2026_10_09_190000_prepare_investor_path','2026_10_10_050000_extend_organization_country') ORDER BY migration")->fetchAll(PDO::FETCH_COLUMN),
|
|
'organization_country_columns' => $pdo->query("SELECT column_name FROM information_schema.columns WHERE table_schema='public' AND table_name='organizations' AND column_name IN ('incorporation_country_code','incorporation_country_provenance') ORDER BY column_name")->fetchAll(PDO::FETCH_COLUMN),
|
|
'organization_count' => (int) $pdo->query('SELECT count(*) FROM public.organizations')->fetchColumn(),
|
|
'active_manifest_sha256' => hash_file('sha256', $root.'/public/build/manifest.json'), 'active_writes' => 0, 'backup_renewed' => false];
|
|
} finally {
|
|
$pdo->exec('ROLLBACK');
|
|
}
|
|
file_put_contents($root.'/storage/app/private/investmoz-v2/portal-audit/next-active-readonly-20261010.json', json_encode($proof, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR));
|
|
echo json_encode($proof, JSON_THROW_ON_ERROR).PHP_EOL;
|