Skip to content

ncoo-dev/horm-logger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HORM Logger - Package de Monitoring HTTP pour Laravel

Latest Version on Packagist Tests Total Downloads

HORM Logger est un package Laravel conçu pour capturer prĂ©cisĂ©ment toutes les requĂȘtes HTTP entrantes et sortantes de vos applications. Il s'intĂšgre parfaitement avec la plateforme HORM pour un monitoring complet de vos communications HTTP.

🎯 FonctionnalitĂ©s

Capture Automatique des RequĂȘtes HTTP

  • ✅ RequĂȘtes Sortantes : Capture automatique de toutes les requĂȘtes via Http:: facade
  • ✅ RequĂȘtes Entrantes : Monitoring via middleware des requĂȘtes reçues
  • ✅ Gestion des Échecs : Logging des tentatives de connexion Ă©chouĂ©es
  • ✅ DonnĂ©es ComplĂštes : Headers, payload, temps de rĂ©ponse, codes de statut

Données Capturées

  • 📩 Headers complets (requĂȘte et rĂ©ponse)
  • đŸ’Ÿ Contenu intĂ©gral des requĂȘtes et rĂ©ponses stockĂ© en JSON
  • 🕒 Timestamps prĂ©cis pour chaque transaction
  • 🔄 Direction : distinction entrante/sortante
  • đŸ·ïž Type de requĂȘte : classification automatique (response, request_failed, connection_failed)
  • ⏱ Temps de rĂ©ponse et mĂ©triques de performance

Note: Les URL, méthodes HTTP et codes de statut sont extraits directement des données JSON de request/response pour éviter la redondance.

🚀 Installation

1. Installation via Composer

composer require ncoo-dev/horm-logger

2. Publication des Assets (Optionnel)

# Publier la configuration
php artisan vendor:publish --provider="NcooDev\HormLogger\HormLoggerServiceProvider" --tag=horm-logger-config

# Publier les migrations
php artisan vendor:publish --provider="NcooDev\HormLogger\HormLoggerServiceProvider" --tag=horm-logger-migrations

# Ou utiliser la commande d'installation complĂšte
php artisan horm:install

3. Migration de la Base de Données

php artisan migrate

⚙ Configuration

Configuration de Base

Le package fonctionne directement aprĂšs installation. Les requĂȘtes HTTP sortantes sont automatiquement capturĂ©es.

Configuration Avancée

Créez le fichier config/horm.php pour personnaliser le comportement :

return [
    // Configuration de la base de données
    'database' => [
        'connection' => env('HORM_DB_CONNECTION', null),
        'table_name' => 'horm_entries',
    ],
    
    // Configuration du modĂšle
    'model' => [
        'entry' => \NcooDev\HormLogger\Models\Entry::class,
        'keep_history_for_days' => 2, // Rétention des logs
    ],
    
    // Configuration de l'endpoint d'export
    'endpoint' => [
        'enabled' => env('HORM_ENDPOINT_ENABLED', true),
        'secret' => env('HORM_ENDPOINT_SECRET', 'my-little-secret-with-horm'),
        'url' => env('HORM_ENDPOINT_URL', 'horm-logger-get-entries'),
    ],
];

Variables d'Environnement

Ajoutez Ă  votre fichier .env :

# Configuration HORM Logger
HORM_DB_CONNECTION=mysql
HORM_ENDPOINT_ENABLED=true
HORM_ENDPOINT_SECRET=votre-secret-securise
HORM_ENDPOINT_URL=horm-logger-get-entries

🔧 Utilisation

Capture Automatique (RequĂȘtes Sortantes)

Les requĂȘtes HTTP sortantes sont automatiquement capturĂ©es :

// Ces requĂȘtes seront automatiquement loggĂ©es
Http::get('https://api.example.com/users');
Http::post('https://api.example.com/orders', ['data' => 'value']);
Http::withHeaders(['Authorization' => 'Bearer token'])->get('https://api.example.com/secure');

Capture Manuelle (RequĂȘtes Entrantes)

Pour capturer les requĂȘtes entrantes, ajoutez le middleware aux routes :

// Dans vos routes (web.php ou api.php)
Route::middleware(['horm.save-log'])->group(function () {
    Route::get('/api/users', [UserController::class, 'index']);
    Route::post('/api/orders', [OrderController::class, 'store']);
});

// Ou sur une route spécifique
Route::get('/api/monitored-endpoint', [Controller::class, 'method'])
    ->middleware('horm.save-log');

Classification Automatique

Le package classe automatiquement les requĂȘtes :

  • ✅ RESPONSE : RequĂȘtes rĂ©ussies (status < 400)
  • ❌ REQUEST_FAILED : Erreurs HTTP (status >= 400)
  • 🔌 CONNECTION_FAILED : Échecs de connexion rĂ©seau

đŸ—‚ïž Gestion des DonnĂ©es

Nettoyage Automatique

Configurez le nettoyage automatique des logs dans app/Console/Kernel.php :

protected function schedule(Schedule $schedule)
{
    // Nettoie les logs de plus de 2 jours (configurable)
    $schedule->command('horm:prune')->daily();
}

Rétention Personnalisée

Modifiez la durée de rétention dans la configuration :

'model' => [
    'keep_history_for_days' => 7, // Garder 7 jours
],

🔗 IntĂ©gration avec HORM

Endpoint d'Export

Le package expose automatiquement un endpoint sécurisé pour l'export des données vers la plateforme HORM :

GET /horm-logger-get-entries?from=2024-01-01&to=2024-01-31
Headers: horm-check-secret: votre-secret-securise

Sécurité de l'API

  • Authentification : Header horm-check-secret requis
  • Limitation : Maximum 1000 entrĂ©es par requĂȘte
  • Filtrage : Par plage de dates via paramĂštres from et to

📊 Structure des DonnĂ©es

Table horm_entries

CREATE TABLE horm_entries (
    id VARCHAR(36) PRIMARY KEY,
    direction ENUM('incoming', 'outgoing'),
    type ENUM('response', 'connection_failed', 'request_failed'),
    request LONGTEXT,   -- DonnĂ©es de requĂȘte en JSON
    response LONGTEXT,  -- Données de réponse en JSON
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

Note: Les données sont stockées en JSON non-sérialisé. Les informations comme l'URL, la méthode et le code de statut sont directement accessibles dans les champs JSON request et response.

Format des Données Exportées

{
    "data": [
        {
            "id": "uuid",
            "direction": "outgoing",
            "type": "response",
            "request": {
                "headers": {"Accept": "application/json"},
                "method": "GET",
                "url": "https://api.example.com/users",
                "body": null
            },
            "response": {
                "headers": {"Content-Type": "application/json"},
                "status": 200,
                "body": {"users": []}
            },
            "created_at": "2024-01-01T10:00:00Z"
        }
    ]
}

⚠ ConsidĂ©rations Importantes

Sécurité

  • DonnĂ©es Sensibles : Le package capture et stocke l'intĂ©gralitĂ© des requĂȘtes/rĂ©ponses
  • Headers d'Authentification : Peuvent contenir des tokens d'accĂšs
  • Recommandation : Utilisez une base de donnĂ©es dĂ©diĂ©e avec chiffrement

Performance

  • Impact Minimal : Event listeners non-bloquants pour les requĂȘtes sortantes
  • Middleware : LĂ©ger impact sur les requĂȘtes entrantes
  • Stockage : PrĂ©voyez l'espace disque nĂ©cessaire (donnĂ©es JSON)

Conformité

  • RGPD : Attention aux donnĂ©es personnelles capturĂ©es
  • RĂ©tention : Configurez la durĂ©e de conservation appropriĂ©e
  • Audit : Logs disponibles pour audit de sĂ©curitĂ©

đŸ§Ș Tests

composer test

📋 Changelog

Consultez CHANGELOG pour voir les derniĂšres modifications.

đŸ€ Contribution

Pour contribuer au projet, consultez le guide de CONTRIBUTING.

🔒 VulnĂ©rabilitĂ©s de SĂ©curitĂ©

Consultez notre politique de sécurité pour signaler des vulnérabilités.

đŸ‘„ CrĂ©dits

📄 License

MIT License - voir le fichier LICENSE pour plus d'informations.

About

Awesome package to collect HTTP Outbound Request Monitor

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors

Languages