Publier Globinours 1.0.0-rc.3
This commit is contained in:
parent
ea8c24d622
commit
9a2b4068da
325 changed files with 38230 additions and 20 deletions
90
scripts/asm3-analyze.php
Normal file
90
scripts/asm3-analyze.php
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
require dirname(__DIR__) . '/app/Services/Asm3Analyzer.php';
|
||||
|
||||
$args = array_values(array_slice($argv, 1));
|
||||
$json = false;
|
||||
$output = null;
|
||||
$source = null;
|
||||
for ($i = 0; $i < count($args); $i++) {
|
||||
if ($args[$i] === '--json') {
|
||||
$json = true;
|
||||
continue;
|
||||
}
|
||||
if ($args[$i] === '--output') {
|
||||
$output = $args[++$i] ?? null;
|
||||
continue;
|
||||
}
|
||||
if (str_starts_with($args[$i], '--')) {
|
||||
fwrite(STDERR, "Option inconnue : {$args[$i]}\n");
|
||||
exit(2);
|
||||
}
|
||||
$source = $args[$i];
|
||||
}
|
||||
if (!$source) {
|
||||
fwrite(STDERR, "Usage : php scripts/asm3-analyze.php <dump.sql> [--json] [--output rapport.md]\n");
|
||||
exit(2);
|
||||
}
|
||||
try {
|
||||
$report = Asm3Analyzer::analyze($source);
|
||||
} catch (Throwable $e) {
|
||||
fwrite(STDERR, "Erreur : {$e->getMessage()}\n");
|
||||
exit(1);
|
||||
}
|
||||
if ($json) {
|
||||
$content = json_encode($report, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . "\n";
|
||||
} else {
|
||||
$a = $report['animals'];
|
||||
$content = "# Rapport de migration ASM3 → Globinours\n\n";
|
||||
$content .=
|
||||
"Analyse en lecture seule de `{$report['source']}` (" .
|
||||
number_format($report['size_bytes'] / 1048576, 2, ',', ' ') .
|
||||
" Mio). Aucune donnée Globinours n’a été modifiée.\n\n";
|
||||
$content .= "## Synthèse animale\n\n| Indicateur | Nombre |\n|---|---:|\n";
|
||||
$content .= '| Total des animaux | ' . ($a['active'] + $a['archived']) . " |\n";
|
||||
foreach (
|
||||
[
|
||||
'Dossiers actifs dans ASM3' => 'active',
|
||||
'Dossiers archivés dans ASM3' => 'archived',
|
||||
'Déclarés adoptables' => 'adoptable',
|
||||
'Non adoptables' => 'not_adoptable',
|
||||
'Décédés' => 'deceased',
|
||||
'Pucés' => 'microchip',
|
||||
'Tatoués' => 'tattoo',
|
||||
'Stérilisés' => 'neutered',
|
||||
'Sans nom' => 'missing_name',
|
||||
'Sans naissance' => 'missing_birth_date',
|
||||
]
|
||||
as $label => $key
|
||||
) {
|
||||
$content .= "| {$label} | {$a[$key]} |\n";
|
||||
}
|
||||
$content .=
|
||||
"\n## Périmètre de migration\n\n| Domaine ASM3 | Table | Lignes | Cible Globinours | État |\n|---|---|---:|---|---|\n";
|
||||
foreach ($report['domains'] as $d) {
|
||||
$state =
|
||||
['ready' => 'Prêt à mapper', 'planned' => 'À implémenter', 'review' => 'À étudier'][$d['status']] ??
|
||||
$d['status'];
|
||||
$content .= "| {$d['label']} | `{$d['table']}` | {$d['rows']} | `{$d['target']}` | {$state} |\n";
|
||||
}
|
||||
$content .=
|
||||
"\n## Alertes\n\n" .
|
||||
($report['warnings']
|
||||
? implode("\n", array_map(static fn($w) => '- ' . $w, $report['warnings']))
|
||||
: '- Aucune anomalie bloquante détectée.') .
|
||||
"\n";
|
||||
$content .= "\n## Tables non encore mappées\n\n";
|
||||
foreach (array_slice($report['unmapped_tables'], 0, 30, true) as $table => $count) {
|
||||
$content .= "- `{$table}` : {$count} ligne(s)\n";
|
||||
}
|
||||
}
|
||||
if ($output) {
|
||||
if (file_put_contents($output, $content) === false) {
|
||||
fwrite(STDERR, "Impossible d’écrire {$output}\n");
|
||||
exit(1);
|
||||
}
|
||||
fwrite(STDOUT, "Rapport écrit dans {$output}\n");
|
||||
} else {
|
||||
fwrite(STDOUT, $content);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue