Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
173 lines
7.7 KiB
PHP
173 lines
7.7 KiB
PHP
<?php
|
||
/**
|
||
* Полный статус Redis индексации
|
||
*/
|
||
|
||
error_reporting(E_ALL);
|
||
ini_set('display_errors', 1);
|
||
|
||
echo "════════════════════════════════════════════════════════════════════════════════\n";
|
||
echo "📊 ПОЛНЫЙ СТАТУС REDIS ИНДЕКСАЦИИ\n";
|
||
echo "════════════════════════════════════════════════════════════════════════════════\n\n";
|
||
|
||
// Подключение к Redis
|
||
$redisConfig = [
|
||
'host' => '147.45.146.17',
|
||
'port' => 6379,
|
||
'password' => 'CRM_Redis_Pass_2025_Secure!'
|
||
];
|
||
|
||
try {
|
||
if (class_exists('Redis')) {
|
||
$redis = new Redis();
|
||
$redis->connect($redisConfig['host'], $redisConfig['port']);
|
||
$redis->auth($redisConfig['password']);
|
||
} else {
|
||
require_once 'vendor/autoload.php';
|
||
$redis = new Predis\Client([
|
||
'scheme' => 'tcp',
|
||
'host' => $redisConfig['host'],
|
||
'port' => $redisConfig['port'],
|
||
'password' => $redisConfig['password'],
|
||
]);
|
||
}
|
||
|
||
// 1. Nextcloud FileID Index
|
||
echo "1️⃣ NEXTCLOUD FILEID INDEX\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
$ncKeys = $redis->keys('crm:nc:fileid:*');
|
||
$ncCount = count($ncKeys);
|
||
|
||
echo " 📊 Всего записей: $ncCount\n";
|
||
|
||
if ($ncCount > 0) {
|
||
// Статистика по путям
|
||
$pathStats = [];
|
||
foreach ($ncKeys as $key) {
|
||
$path = str_replace('crm:nc:fileid:', '', $key);
|
||
$parts = explode('/', $path);
|
||
if (count($parts) > 0) {
|
||
$prefix = $parts[0];
|
||
if (!isset($pathStats[$prefix])) {
|
||
$pathStats[$prefix] = 0;
|
||
}
|
||
$pathStats[$prefix]++;
|
||
}
|
||
}
|
||
|
||
echo "\n 📁 Распределение по папкам:\n";
|
||
arsort($pathStats);
|
||
foreach ($pathStats as $folder => $count) {
|
||
$percent = round(($count / $ncCount) * 100, 1);
|
||
echo " - $folder: $count файлов ($percent%)\n";
|
||
}
|
||
|
||
// Проверка TTL
|
||
$sampleKeys = array_slice($ncKeys, 0, 10);
|
||
$ttlStats = ['valid' => 0, 'expired' => 0, 'no_ttl' => 0];
|
||
foreach ($sampleKeys as $key) {
|
||
$ttl = $redis->ttl($key);
|
||
if ($ttl > 0) {
|
||
$ttlStats['valid']++;
|
||
} else if ($ttl == -1) {
|
||
$ttlStats['no_ttl']++;
|
||
} else {
|
||
$ttlStats['expired']++;
|
||
}
|
||
}
|
||
|
||
echo "\n ⏰ Статус TTL (на выборке из 10):\n";
|
||
echo " - С валидным TTL: {$ttlStats['valid']}\n";
|
||
echo " - Без TTL: {$ttlStats['no_ttl']}\n";
|
||
echo " - Истекшие: {$ttlStats['expired']}\n";
|
||
}
|
||
|
||
// 2. CRM Cache
|
||
echo "\n2️⃣ CRM CACHE\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
$cacheKeys = $redis->keys('crm:cache:*');
|
||
$cacheCount = count($cacheKeys);
|
||
echo " 📊 Ключей кеша: $cacheCount\n";
|
||
|
||
if ($cacheCount > 0) {
|
||
echo "\n 📋 Примеры ключей:\n";
|
||
$sampleCache = array_slice($cacheKeys, 0, 10);
|
||
foreach ($sampleCache as $key) {
|
||
echo " - $key\n";
|
||
}
|
||
} else {
|
||
echo " ⚠️ Кеш не используется активно\n";
|
||
}
|
||
|
||
// 3. Другие префиксы
|
||
echo "\n3️⃣ ДРУГИЕ ДАННЫЕ В REDIS\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
$allKeys = $redis->keys('*');
|
||
$prefixes = [];
|
||
foreach ($allKeys as $key) {
|
||
$parts = explode(':', $key);
|
||
if (count($parts) > 0) {
|
||
$prefix = $parts[0];
|
||
if (!isset($prefixes[$prefix])) {
|
||
$prefixes[$prefix] = 0;
|
||
}
|
||
$prefixes[$prefix]++;
|
||
}
|
||
}
|
||
|
||
echo " 📊 Всего ключей в Redis: " . count($allKeys) . "\n\n";
|
||
echo " 📋 Префиксы:\n";
|
||
arsort($prefixes);
|
||
foreach ($prefixes as $prefix => $count) {
|
||
$percent = round(($count / count($allKeys)) * 100, 1);
|
||
echo " - $prefix: $count ключей ($percent%)\n";
|
||
}
|
||
|
||
// 4. Процесс индексатора
|
||
echo "\n4️⃣ ПРОЦЕСС ИНДЕКСАТОРА\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
exec("ps aux | grep 'nextcloud_fileid_indexer.js' | grep -v grep", $output);
|
||
if (!empty($output)) {
|
||
echo " ✅ Индексатор запущен\n";
|
||
foreach ($output as $line) {
|
||
if (preg_match('/(\d+)\s+.*?(\d+\.\d+)\s+(\d+\.\d+).*?nextcloud_fileid_indexer/', $line, $matches)) {
|
||
$pid = $matches[1];
|
||
$cpu = $matches[2];
|
||
$mem = $matches[3];
|
||
echo " PID: $pid\n";
|
||
echo " CPU: $cpu%\n";
|
||
echo " Memory: $mem%\n";
|
||
|
||
exec("ps -p $pid -o etime= 2>/dev/null", $etime);
|
||
if (!empty($etime)) {
|
||
echo " Время работы: " . trim($etime[0]) . "\n";
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
echo " ❌ Индексатор НЕ запущен!\n";
|
||
}
|
||
|
||
// 5. Информация о Redis
|
||
echo "\n5️⃣ ИНФОРМАЦИЯ О REDIS\n";
|
||
echo "────────────────────────────────────────────────────────────────────────────\n";
|
||
|
||
$info = $redis->info();
|
||
echo " 📊 Версия: " . ($info['redis_version'] ?? 'N/A') . "\n";
|
||
echo " 💾 Использовано памяти: " . ($info['used_memory_human'] ?? 'N/A') . "\n";
|
||
echo " 🔑 Всего ключей: " . ($info['db0']['keys'] ?? count($allKeys)) . "\n";
|
||
echo " ⏰ Uptime: " . ($info['uptime_in_days'] ?? 'N/A') . " дней\n";
|
||
|
||
echo "\n════════════════════════════════════════════════════════════════════════════════\n";
|
||
echo "✅ ИТОГ: Индексация работает нормально\n";
|
||
echo "════════════════════════════════════════════════════════════════════════════════\n";
|
||
|
||
} catch (Exception $e) {
|
||
echo "❌ Ошибка: " . $e->getMessage() . "\n";
|
||
echo "Stack: " . $e->getTraceAsString() . "\n";
|
||
}
|