Files
Investidor-V2/tools/portal-next-active-readonly.php
nala 287e991486
tests / ci (push) Waiting to run
oportunidades 7
2026-10-13 11:40:29 +02:00

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;