<?php
/**
 * Demo Oracle — SQL Monitor natif (section « reports/sqlmon »).
 *
 * Le seul des trois rapports Oracle que la demonstration serve. ASH et AWR
 * appellent DBMS_WORKLOAD_REPOSITORY, donc le Diagnostic Pack, et restent
 * verrouilles ; celui-ci est RECONSTRUIT a partir de vues qui ne relevent
 * d'aucun pack — c'est precisement ce qu'il y a a demontrer.
 *
 * Trois plafonds, tous appliques cote serveur par
 * DemoOracleSqlMonFilters::parse() :
 *
 *   - 20 executions listees (le module complet en liste 100) ;
 *   - rafraichissement fige a 10 s (le module complet descend a 5) ;
 *   - 200 lignes de plan (le module complet n'a pas de plafond).
 *
 * La branche JSON vit dans _data_reports_sqlmon.php : la page est rendue
 * depuis layout.php, donc apres l'envoi du <head>, et ne peut plus emettre
 * de JSON.
 *
 * Inclus par report.php. Variables : $oraDb, $db, $currentUser, $settings.
 */
require_once __DIR__ . '/lib/DemoOracleOciConnect.php';
require_once __DIR__ . '/lib/DemoOracleSqlMonSource.php';
require_once __DIR__ . '/lib/DemoOracleSqlMonFilters.php';
require_once __DIR__ . '/lib/DemoOracleSqlMonitorRepository.php';

$f = DemoOracleSqlMonFilters::parse();

$running    = [];
$sourceInfo = null;
$fetchError = null;

$ociError = null;
$conn = demo_oracle_oci_open($oraDb, $db, $ociError, '', 'reports/sqlmon/page');
if (!$conn) {
    $fetchError = $ociError
        ? ('ORA-' . $ociError['code'] . ': ' . $ociError['message'])
        : t('demo_oracle.connect_error');
} else {
    $sourceInfo = DemoOracleSqlMonSource::resolve(
        $conn, ($oraDb['conn_type'] ?? '') === 'cloud');

    /* Inventaire initial : le JavaScript le rafraichira, mais la page doit
       etre lisible avant qu'il ne tourne — et sans lui, le cas echeant. */
    $running = DemoOracleSqlMonitorRepository::listExecutionsSession(
        $conn, $f['sql_id'], $f['limit']);

    oci_close($conn);
}

View::display(__DIR__ . '/views/report/reports_sqlmon.php', [
    'baseUrl'    => demo_oracle_url('report', ['section' => 'reports/sqlmon']),
    'fetchError' => $fetchError,
    'sourceInfo' => $sourceInfo,
    'filters'    => $f,
    'running'    => $running,
    'settings'   => $settings,
]);
