Skip to content

DuminAndrew/Text-User-Interface

Repository files navigation

Log Analyzer - High-Performance TUI Log Viewer

Быстрая TUI-утилита для анализа больших логов (до 50+ GB) с мгновенной загрузкой, regex фильтрацией и подсветкой синтаксиса.

Возможности

  • Мгновенное открытие больших файлов - использует memory-mapped files (mmap) для работы с файлами до 50+ GB без загрузки в RAM
  • Regex фильтрация в реальном времени - поиск по регулярным выражениям с асинхронной обработкой
  • Подсветка синтаксиса - автоматическое распознавание и раскраска JSON/SQL ключевых слов
  • Отзывчивый интерфейс - многопоточная архитектура предотвращает зависание UI
  • Интуитивное управление - навигация с помощью клавиатуры

Архитектура

Проект состоит из следующих компонентов:

  • LogReader - управление memory-mapped файлами, индексация строк для O(1) доступа
  • FilterEngine - многопоточная regex фильтрация с оптимизацией производительности
  • SyntaxHighlighter - эвристическая подсветка ключевых слов JSON/SQL
  • TuiDisplay - интерактивный TUI интерфейс на базе FTXUI

Технические требования

  • Компилятор: GCC 9+ или Clang 10+ с поддержкой C++20
  • CMake: версия 3.14 или выше
  • Операционная система: Linux, macOS (POSIX-совместимые)
  • Зависимости: FTXUI (подтягивается автоматически через CMake FetchContent)

Сборка проекта

Быстрый старт

# 1. Перейдите в директорию проекта
cd Text-User-Interface

# 2. Создайте директорию для сборки
mkdir build && cd build

# 3. Сконфигурируйте проект с помощью CMake
cmake ..

# 4. Скомпилируйте проект (используйте -j для параллельной сборки)
make -j$(nproc)

# 5. (Опционально) Установите в систему
sudo make install

Пошаговая инструкция

Шаг 1: Подготовка

Убедитесь, что у вас установлены необходимые инструменты:

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install build-essential cmake git

# macOS (с Homebrew)
brew install cmake

Шаг 2: Клонирование (если нужно)

git clone <repository_url>
cd Text-User-Interface

Шаг 3: Сборка

# Создаём директорию для сборки
mkdir -p build
cd build

# Конфигурация CMake
cmake .. -DCMAKE_BUILD_TYPE=Release

# Компиляция (используем все доступные ядра)
make -j$(nproc)

Шаг 4: Проверка сборки

После успешной компиляции исполняемый файл будет находиться в build/log_analyzer:

./log_analyzer --help

Использование

Базовое использование

# Открыть лог файл
./log_analyzer /path/to/your/logfile.log

# Открыть с помощью установленной версии (если выполнили make install)
log_analyzer /var/log/syslog

Управление клавиатурой

После запуска программы используйте следующие клавиши:

Клавиша Действие
/ Навигация по строкам
PgUp / PgDn Прокрутка страницами
Home Переход к началу файла
End Переход к концу файла
H Переключить подсветку синтаксиса
Q / Esc Выход из программы

Фильтрация

  1. После запуска программы начните вводить regex паттерн в поле "Filter"
  2. Фильтрация применяется автоматически в реальном времени
  3. Используйте стандартный синтаксис ECMAScript regex

Примеры фильтров

# Найти строки с ошибками
ERROR|error|Error

# Найти IP адреса
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

# Найти JSON объекты
\{.*\}

# Найти SQL запросы
SELECT.*FROM

# Найти временные метки в формате ISO
\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}

# Найти HTTP коды ошибок
HTTP/\d\.\d"\s+[45]\d{2}

Примеры использования

Анализ большого лог файла

# Открыть 10 GB лог файл
./log_analyzer /var/log/huge_application.log

# В интерфейсе введите фильтр для поиска ошибок:
# Фильтр: ERROR.*database

# Навигация и анализ найденных строк

Создание тестового лог файла

Для тестирования можно создать демонстрационный лог файл:

cat > test.log << 'EOF'
2025-01-27 10:00:01 INFO Starting application
2025-01-27 10:00:02 DEBUG Connecting to database at 192.168.1.100
2025-01-27 10:00:03 INFO SELECT * FROM users WHERE id = 42
2025-01-27 10:00:04 ERROR Connection timeout to 192.168.1.100
2025-01-27 10:00:05 INFO Retrying connection
2025-01-27 10:00:06 INFO {"status": "ok", "users": 150, "active": true}
2025-01-27 10:00:07 WARN High memory usage detected
2025-01-27 10:00:08 INFO INSERT INTO logs (message) VALUES ('test')
2025-01-27 10:00:09 ERROR Failed to INSERT: null constraint violation
2025-01-27 10:00:10 INFO Application stopped
EOF

# Запустить анализатор
./log_analyzer test.log

Производительность

  • Открытие файла: мгновенное (O(1)) благодаря mmap
  • Индексация строк: O(n), выполняется один раз при открытии
  • Поиск по regex: O(n*m), где n - количество строк, m - сложность regex
  • Память: используется только для индексов строк (~8 байт на строку)

Оптимизации

  • Memory-mapped I/O для нулевого копирования
  • Асинхронная фильтрация в отдельном потоке
  • MADV_SEQUENTIAL для оптимизации чтения ядром
  • Компиляция с -O3 и -march=native

Структура проекта

Text-User-Interface/
├── CMakeLists.txt              # Конфигурация сборки
├── README.md                   # Документация
└── src/
    ├── main.cpp                # Точка входа
    ├── log_reader.hpp          # Интерфейс LogReader
    ├── log_reader.cpp          # Реализация mmap и индексации
    ├── filter_engine.hpp       # Интерфейс FilterEngine
    ├── filter_engine.cpp       # Реализация regex фильтрации
    ├── syntax_highlighter.hpp  # Интерфейс SyntaxHighlighter
    ├── syntax_highlighter.cpp  # Реализация подсветки
    ├── tui_display.hpp         # Интерфейс TUI
    └── tui_display.cpp         # Реализация FTXUI интерфейса

Решение проблем

Ошибка компиляции: "C++20 not supported"

Убедитесь, что используете современный компилятор:

# Проверить версию GCC
g++ --version  # Должна быть 9.0 или выше

# Проверить версию Clang
clang++ --version  # Должна быть 10.0 или выше

Ошибка: "Failed to open file"

Проверьте права доступа к файлу:

# Дать права на чтение
chmod +r /path/to/logfile.log

# Проверить, что файл существует
ls -lh /path/to/logfile.log

Ошибка: "Failed to mmap file"

Возможные причины:

  • Недостаточно виртуальной памяти (проверьте ulimit -v)
  • Слишком большой файл для архитектуры (32-bit системы ограничены 4GB)

Проблемы с FTXUI

Если CMake не может подтянуть FTXUI:

# Очистите кэш CMake и пересоберите
cd build
rm -rf *
cmake ..
make -j$(nproc)

Ограничения

  • POSIX-только: использует POSIX API для mmap (Linux, macOS)
  • Только чтение: файлы открываются в режиме read-only
  • Размер файла: теоретически до размера адресного пространства (обычно терабайты на 64-bit)
  • Unicode: базовая поддержка UTF-8 (возможны проблемы с сложными символами)

Дальнейшее развитие

Возможные улучшения:

  • Windows поддержка (MapViewOfFile)
  • Сохранение отфильтрованных результатов в файл
  • Bookmarks для быстрого перехода
  • Настраиваемые цветовые схемы
  • Поддержка конфигурационных файлов
  • Tail-режим для мониторинга в реальном времени
  • Многоколоночный режим просмотра

Лицензия

MIT License

Автор

Разработано как высокопроизводительная утилита для анализа больших логов с использованием современных технологий C++.

Поддержка

При возникновении проблем:

  1. Проверьте раздел "Решение проблем"
  2. Убедитесь, что используете последнюю версию
  3. Проверьте, что все зависимости установлены корректно

About

Анализатор логов

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors