Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
188 lines
6.6 KiB
PHP
188 lines
6.6 KiB
PHP
<?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";
|