Files
crm.clientright.ru/redis_index_status.php
Fedor 01c4fe80b5 chore: snapshot current working tree changes
Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
2026-03-26 14:19:01 +03:00

173 lines
7.7 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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";
}