# Scripts d'exploitation

Scripts batch PHP portables (Linux / Windows) pour la maintenance
automatisee de l'application.

## Structure

```
exploitation/
  shared/
    cli_bootstrap.php       # Bootstrap CLI commun (autoload, DB, i18n, modules)
  core/                     # Scripts coeur (toujours presents)
    backup.php
    logrotate.php
    schedule.php            # ordonnancement (agrege core + modules actifs)
    schedule_reports.php
    send_report.php
    provision_users.php     # provisioning utilisateurs applicatifs des modules

mon-appli/modules/<name>/exploitation/   # Code d'exploitation PROPRE au module
  scheduler.php             # declare les jobs cron du module (tableau)
  <scripts du module>       # ex. oracle: collect_ash.php ; CMDB: collect_cmdb.php,
                            #     collect_rman.php ; CNP: collect_oracle_users.php,
                            #     provision_oracle_users.php, remediate_oracle_users.php
```

Le code d'exploitation de chaque module vit **dans le module**. Le scheduler central
(`exploitation/core/schedule.php`, via `lib/ScheduleRegistry`) agrege les jobs coeur
et ceux declares par les modules **actifs** (`modules/<name>/exploitation/scheduler.php`).

```bash
cd /opt/app
php exploitation/core/backup.php [options]
php mon-appli/modules/oracle/exploitation/collect_ash.php [options]
```

Les anciens chemins coeur (`exploitation/backup.php`, etc.) restent fonctionnels
via des shims de redirection.

---

## core/backup.php — Sauvegarde des metadonnees

Cree une archive ZIP du repertoire `securite/` (base de donnees SQLite,
cle de chiffrement, wallets Oracle Cloud).

### Utilisation

```bash
php exploitation/core/backup.php
php exploitation/core/backup.php --keep 30
php exploitation/core/backup.php -o /mnt/backup -n daily_backup.zip
php exploitation/core/backup.php --quiet --keep 30
```

### Options

| Option | Defaut | Description |
|--------|--------|-------------|
| `-o, --output` | `securite/backups/` | Repertoire de destination |
| `-n, --name` | `metadata_YYYYMMDD_HHMMSS.zip` | Nom de l'archive |
| `-k, --keep` | aucun | Purger les archives > N jours |
| `-q, --quiet` | non | Mode silencieux |
| `-h, --help` | — | Aide |

---

## core/logrotate.php — Rotation et purge des logs

Fait tourner les fichiers de log quotidiennement, compresse les
anciennes rotations avec gzip, et purge les rotations de plus de
N jours.

### Fichiers geres

| Fichier | Contenu |
|---------|---------|
| `app.log` | Messages applicatifs (warnings, erreurs) |
| `debug.log` | Messages de debug (si `debug_mode` actif) |
| `trace.log` | Trace des requetes HTTP (si `trace_mode` actif) |

### Options

| Option | Defaut | Description |
|--------|--------|-------------|
| `-d, --dir` | `log/` | Repertoire des logs |
| `-k, --keep` | `30` | Purger les rotations > N jours |
| `-c, --compress` | oui | Compresser avec gzip |
| `--no-compress` | — | Ne pas compresser |
| `-q, --quiet` | non | Mode silencieux |
| `-h, --help` | — | Aide |

---

## oracle/collect_ash.php — Collecte de charge ASH quotidienne

Parcourt toutes les bases Oracle enregistrees et collecte la charge
quotidienne (par classe d'attente) depuis ASH, AWR ou sw$bash_snapper.
Les donnees sont stockees dans `securite/ash_history.sqlite`.

### Sources automatiques

- Hier : `GV$ACTIVE_SESSION_HISTORY` (pas de licence requise)
- Plus ancien + licence Diagnostic Pack : `DBA_HIST_ACTIVE_SESS_HISTORY`
- Plus ancien + sw$bash_snapper : `SW$BASH_HIST_ACTIVE_SESS_HISTORY`
- Standby / Active Data Guard : uniquement ASH (hier)

### Options

| Option | Defaut | Description |
|--------|--------|-------------|
| `-d, --days` | `30` | Profondeur en jours |
| `-q, --quiet` | non | Mode silencieux |
| `-h, --help` | — | Aide |

---

## cmdb/collect_cmdb.php — Collecte inventaire CMDB

Extrait l'inventaire des bases depuis le CMDB Oracle et le stocke
dans `securite/cmdb.sqlite`. Refresh complet (DELETE + INSERT).

### Options

| Option | Description |
|--------|-------------|
| `-q, --quiet` | Mode silencieux |
| `-h, --help` | Aide |

---

## cnp/collect_oracle_users.php — Collecte des comptes Oracle

Collecte les comptes Oracle non-systeme avec un profil specifique
depuis toutes les bases enregistrees. Stocke dans la table CMDB
`CNP$ORACLE_USERS`. Rafraichit ensuite le cache AD.

### Options

| Option | Description |
|--------|-------------|
| `-q, --quiet` | Mode silencieux |
| `-h, --help` | Aide |

---

## cnp/remediate_oracle_users.php — Remediation des comptes Oracle

Lit les taches planifiees depuis `securite/remediation_oracle.json`
et execute les ALTER USER pour basculer les comptes locaux vers une
authentification globale (AD).

### Options

| Option | Description |
|--------|-------------|
| `-q, --quiet` | Mode silencieux |
| `-n, --dry-run` | Afficher sans executer |
| `-h, --help` | Aide |

---

## core/schedule.php — Proposition d'ordonnancement

Detecte l'OS et propose les commandes de planification adaptees
(cron sous Linux, schtasks sous Windows). Peut aussi installer ou
desinstaller les taches automatiquement.

### Planification par defaut

| Tache | Horaire | Script |
|-------|---------|--------|
| Log rotate | 00:05 quotidien | `core/logrotate.php` |
| Backup | 02:00 quotidien | `core/backup.php` |
| Collect ASH | 06:00 quotidien | `oracle/collect_ash.php` |
| Collect CMDB | 06:30 le 1er du mois | `cmdb/collect_cmdb.php` |
| Collect users | 01:00 quotidien | `cnp/collect_oracle_users.php` |
| Schedule rpts | 00:05 quotidien | `core/schedule_reports.php` |
| Remediate | 20:00 quotidien | `cnp/remediate_oracle_users.php` |

### Utilisation

```bash
php exploitation/core/schedule.php             # Afficher les commandes
php exploitation/core/schedule.php --install   # Installer les taches
php exploitation/core/schedule.php --uninstall # Supprimer les taches
```

---

## core/schedule_reports.php — Orchestrateur de rapports

Verifie quotidiennement quels rapports sont dus et planifie leur
envoi a l'heure configuree via la commande `at`.

---

## core/send_report.php — Envoi de rapport par e-mail

Rend un rapport HTML, recupere la liste des abonnes, et envoie
un e-mail par abonne via SMTP.

```bash
php exploitation/core/send_report.php --report cnp/ad_anomalies
```

---

## Prerequis

- PHP 8.2+ (CLI)
- Extension `zip` (pour backup.php)
- Extension `zlib` (pour la compression gzip dans logrotate.php — optionnel)
- Extension `oci8` (pour collect_ash, collect_oracle_users, remediate)
- Extension `ldap` (pour collect_oracle_users si refresh AD)
- Droits suffisants pour installer les taches (root/sudo sous Linux,
  Administrateur sous Windows)
