138 lines
5.6 KiB
PHP
138 lines
5.6 KiB
PHP
<?php
|
|
/**
|
|
* FavMasToKey - Configuration (version améliorée)
|
|
*/
|
|
|
|
// Empêcher l'accès direct au fichier
|
|
if (!defined('FAVMASTOKEY')) {
|
|
die('Accès direct interdit');
|
|
}
|
|
|
|
// Environnement (development ou production)
|
|
define('ENVIRONMENT', 'development');
|
|
|
|
// Gestion des erreurs selon l'environnement
|
|
if (ENVIRONMENT === 'development') {
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', 1);
|
|
|
|
// Activer la journalisation pour le débogage
|
|
ini_set('log_errors', 1);
|
|
ini_set('error_log', __DIR__ . '/../debug.log');
|
|
} else {
|
|
error_reporting(0);
|
|
ini_set('display_errors', 0);
|
|
}
|
|
|
|
// Configuration de l'application
|
|
$config = [
|
|
// Informations de l'application
|
|
'app_name' => 'FavMasToKey',
|
|
'app_description' => 'Outil de transfert des favoris de Mastodon vers Misskey',
|
|
'app_version' => '0.6.1', // Mise à jour de la version pour les améliorations
|
|
|
|
// URL de base - Utilisée pour les liens dans l'application
|
|
'app_url' => 'https://concepts.esenjin.xyz/favmastokey', // Remplacez par l'URL exacte de votre application
|
|
|
|
// Paramètres Misskey API
|
|
'misskey_api_endpoint' => '/api/notes/favorites/create',
|
|
|
|
// Paramètres pour le traitement
|
|
'batch_size' => 2,
|
|
'timeout' => 90,
|
|
'max_retries' => 3,
|
|
'delay_between_requests' => 3000, // Délai normal entre les requêtes (en millisecondes)
|
|
|
|
// Paramètres pour le mode lent
|
|
'slow_mode_delay' => 30000, // Délai par défaut en mode lent (30 secondes)
|
|
'slow_mode_min' => 10000, // Délai minimum pour le mode lent (10 secondes)
|
|
'slow_mode_max' => 300000, // Délai maximum pour le mode lent (5 minutes)
|
|
|
|
// Paramètres pour le mode tortue
|
|
'tortoise_mode_delay' => 120000, // Délai par défaut en mode tortue (2 minutes)
|
|
'tortoise_mode_min' => 60000, // Délai minimum pour le mode tortue (1 minute)
|
|
'tortoise_mode_max' => 300000, // Délai maximum pour le mode tortue (5 minutes)
|
|
|
|
// AMÉLIORATION 1: Paramètres pour la file d'attente des rate-limit
|
|
'rate_limit_queue_retry_delay' => 60000, // Délai avant de réessayer un élément en file d'attente (60 secondes)
|
|
'rate_limit_max_retries' => 5, // Nombre maximum de tentatives pour un même élément
|
|
|
|
// AMÉLIORATION 2: Paramètres pour l'optimisation des favoris déjà existants
|
|
'skip_delay_for_already_favorited' => true, // Ne pas attendre le délai pour les favoris déjà existants
|
|
|
|
// AMÉLIORATION 3: Paramètres pour le cache de fédération
|
|
'federation_cache_enabled' => true, // Activer le cache de fédération
|
|
'federation_cache_ttl' => 1440, // Durée de vie du cache en minutes (24 heures)
|
|
'federation_cache_cleanup_interval' => 60, // Intervalle de nettoyage du cache en minutes
|
|
|
|
// AMÉLIORATION 4: Paramètres pour l'adaptation des délais
|
|
'adaptive_delay_enabled' => true, // Activer l'ajustement automatique des délais
|
|
'adaptive_delay_step' => 5000, // Pas d'augmentation du délai en cas de rate limiting (5 secondes)
|
|
'adaptive_delay_max_increases' => 3, // Nombre maximum d'augmentations automatiques du délai
|
|
'adaptive_delay_decrease_rate' => 0.8, // Facteur de diminution du délai après succès (80%)
|
|
|
|
// AMÉLIORATION 5: Paramètres pour les points de sauvegarde
|
|
'checkpoint_interval' => 300000, // Intervalle entre les points de sauvegarde (5 minutes)
|
|
'checkpoint_max_stored' => 3, // Nombre maximum de points de sauvegarde à conserver
|
|
|
|
// Paramètres pour la pause automatique
|
|
'auto_pause_enabled' => true, // Activer la pause automatique en cas de trop de rate-limits
|
|
'auto_pause_duration' => 15, // Durée de pause automatique en minutes
|
|
'auto_pause_threshold' => 3, // Nombre d'erreurs de rate-limit consécutives avant pause
|
|
];
|
|
|
|
// Session
|
|
session_start();
|
|
|
|
/**
|
|
* Affiche ou journalise des informations de débogage
|
|
*
|
|
* @param mixed $data Les données à déboguer
|
|
* @param string $title Titre optionnel pour faciliter l'identification des logs
|
|
* @param bool $log_to_file Journaliser dans un fichier plutôt que d'afficher
|
|
*/
|
|
function debug($data, $title = '', $log_to_file = false) {
|
|
if (ENVIRONMENT === 'development') {
|
|
$output = '';
|
|
|
|
if (!empty($title)) {
|
|
$output .= "=== {$title} ===\n";
|
|
}
|
|
|
|
if (is_array($data) || is_object($data)) {
|
|
$output .= print_r($data, true);
|
|
} else {
|
|
$output .= $data;
|
|
}
|
|
|
|
if ($log_to_file) {
|
|
error_log($output);
|
|
} else {
|
|
echo '<pre style="background:#111; color:#eee; padding:10px; border-radius:5px; overflow:auto; max-height:500px;">';
|
|
echo htmlspecialchars($output);
|
|
echo '</pre>';
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Journalise les performances des requêtes API pour analyse
|
|
*
|
|
* @param string $domain Domaine de l'instance
|
|
* @param string $action Type d'action (recherche, ajout favori, etc.)
|
|
* @param int $response_time Temps de réponse en millisecondes
|
|
* @param bool $success Succès de la requête
|
|
* @param string $error_type Type d'erreur si échec
|
|
*/
|
|
function log_api_performance($domain, $action, $response_time, $success, $error_type = null) {
|
|
if (ENVIRONMENT === 'development') {
|
|
$status = $success ? 'success' : ($error_type === 'rate_limit' ? 'rate_limit' : 'error');
|
|
$log_entry = date('Y-m-d H:i:s') . " | $domain | $action | {$response_time}ms | $status";
|
|
|
|
if ($error_type) {
|
|
$log_entry .= " | $error_type";
|
|
}
|
|
|
|
error_log("[API_PERF] " . $log_entry);
|
|
}
|
|
} |