Files
crm.clientright.ru/check_redis_index.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

188 lines
6.6 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 "=== Проверка Redis индексации ===\n\n";
// 1. Проверка подключения к Redis
echo "1⃣ Проверка подключения к Redis...\n";
$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']);
echo " ✅ Подключение через Redis extension\n";
} else {
require_once 'vendor/autoload.php';
$redis = new Predis\Client([
'scheme' => 'tcp',
'host' => $redisConfig['host'],
'port' => $redisConfig['port'],
'password' => $redisConfig['password'],
]);
$redis->ping();
echo " ✅ Подключение через Predis\n";
}
// Проверка работы
$redis->set('test:connection', 'ok', 10);
$test = $redis->get('test:connection');
if ($test === 'ok') {
echo " ✅ Redis работает корректно\n";
$redis->del('test:connection');
}
} catch (Exception $e) {
echo " ❌ Ошибка подключения: " . $e->getMessage() . "\n";
exit(1);
}
// 2. Проверка Nextcloud FileID индекса
echo "\n2⃣ Проверка Nextcloud FileID индекса...\n";
try {
// Подсчет ключей с префиксом crm:nc:fileid:
$keys = $redis->keys('crm:nc:fileid:*');
$count = count($keys);
echo " 📊 Найдено записей в индексе: $count\n";
if ($count > 0) {
echo " ✅ Индекс не пустой\n";
// Показываем несколько примеров
echo "\n 📋 Примеры записей (первые 5):\n";
$sampleKeys = array_slice($keys, 0, 5);
foreach ($sampleKeys as $key) {
$value = $redis->get($key);
$data = json_decode($value, true);
if ($data) {
$path = str_replace('crm:nc:fileid:', '', $key);
echo " - $path\n";
echo " fileId: {$data['fileId']}, size: {$data['size']}, mtime: {$data['mtime']}\n";
}
}
// Проверяем TTL
$ttl = $redis->ttl($keys[0]);
if ($ttl > 0) {
echo "\n ⏰ TTL первой записи: $ttl секунд (" . round($ttl / 3600, 1) . " часов)\n";
} else {
echo "\n ⚠️ TTL не установлен или истек\n";
}
} else {
echo " ⚠️ Индекс пустой - индексатор может не работать\n";
}
} catch (Exception $e) {
echo " ❌ Ошибка проверки индекса: " . $e->getMessage() . "\n";
}
// 3. Проверка других индексов
echo "\n3⃣ Проверка других Redis ключей...\n";
try {
// Проверяем ключи кеша CRM
$cacheKeys = $redis->keys('crm:cache:*');
$cacheCount = count($cacheKeys);
echo " 📊 Ключей кеша CRM: $cacheCount\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]++;
}
}
if (!empty($prefixes)) {
echo "\n 📋 Префиксы в Redis:\n";
arsort($prefixes);
foreach ($prefixes as $prefix => $count) {
echo " - $prefix: $count ключей\n";
}
}
} catch (Exception $e) {
echo " ⚠️ Ошибка проверки других ключей: " . $e->getMessage() . "\n";
}
// 4. Проверка процесса индексатора
echo "\n4⃣ Проверка процесса индексатора...\n";
$indexerRunning = false;
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+.*nextcloud_fileid_indexer/', $line, $matches)) {
$pid = $matches[1];
echo " PID: $pid\n";
// Проверяем время работы
exec("ps -p $pid -o etime= 2>/dev/null", $etime);
if (!empty($etime)) {
echo " Время работы: " . trim($etime[0]) . "\n";
}
}
}
$indexerRunning = true;
} else {
echo " ❌ Индексатор НЕ запущен!\n";
}
// 5. Проверка последней индексации
echo "\n5⃣ Проверка последней индексации...\n";
try {
// Ищем ключ с временем последней индексации
$lastIndexKey = 'crm:nc:indexer:last_run';
$lastIndexTime = $redis->get($lastIndexKey);
if ($lastIndexTime) {
$lastIndex = date('Y-m-d H:i:s', $lastIndexTime);
$timeDiff = time() - $lastIndexTime;
echo " ✅ Последняя индексация: $lastIndex\n";
echo " Прошло: " . round($timeDiff / 60, 1) . " минут\n";
if ($timeDiff > 300) { // Больше 5 минут
echo " ⚠️ ВНИМАНИЕ: Индексация давно не обновлялась!\n";
}
} else {
echo " ⚠️ Время последней индексации не найдено\n";
}
} catch (Exception $e) {
echo " ⚠️ Ошибка проверки времени индексации: " . $e->getMessage() . "\n";
}
// Итог
echo "\n📊 ИТОГ:\n";
if ($indexerRunning && $count > 0) {
echo " ✅ Индексация работает\n";
} else if ($indexerRunning && $count == 0) {
echo " ⚠️ Индексатор запущен, но индекс пустой\n";
} else if (!$indexerRunning) {
echo " ❌ Индексатор не запущен!\n";
echo " 💡 Запустите: node crm_extensions/file_storage/nextcloud_fileid_indexer.js\n";
}
echo "\n=== Проверка завершена ===\n";