{"id":51640587,"url":"https://github.com/joraslav/log_analyzer","last_synced_at":"2026-07-13T19:01:36.961Z","repository":{"id":356991922,"uuid":"1228288029","full_name":"Joraslav/log_analyzer","owner":"Joraslav","description":"Mini Log Analyzer for  small projects","archived":false,"fork":false,"pushed_at":"2026-05-10T19:35:23.000Z","size":71,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-10T21:25:21.257Z","etag":null,"topics":["cmake","cpp","cpp23","log-analysis","optimization-tools"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Joraslav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-03T20:50:28.000Z","updated_at":"2026-05-10T19:36:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Joraslav/log_analyzer","commit_stats":null,"previous_names":["joraslav/log_analyzer"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/Joraslav/log_analyzer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joraslav%2Flog_analyzer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joraslav%2Flog_analyzer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joraslav%2Flog_analyzer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joraslav%2Flog_analyzer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Joraslav","download_url":"https://codeload.github.com/Joraslav/log_analyzer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Joraslav%2Flog_analyzer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35432821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-13T02:00:06.543Z","response_time":119,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cmake","cpp","cpp23","log-analysis","optimization-tools"],"created_at":"2026-07-13T19:01:35.935Z","updated_at":"2026-07-13T19:01:36.955Z","avatar_url":"https://github.com/Joraslav.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# log_analyzer\n\nКонсольная утилита на C++23 для статистического анализа текстовых лог-файлов. Сканирует директорию, считает строки, слова и символы, строит частотный словарь, ищет ключевые слова и выводит результаты в консоль или в JSON.\n\n## Скачать\n\n| Платформа | Пакет |\n| --- | --- |\n| ![Ubuntu](https://img.shields.io/badge/Ubuntu-E95420?logo=ubuntu\u0026logoColor=white) Ubuntu / Debian (amd64) | [log_analyzer_0.2.0_amd64.deb](https://github.com/Joraslav/log_analyzer/releases/download/v0.2.0/log_analyzer_0.2.0_amd64.deb) |\n| ![Fedora](https://img.shields.io/badge/Fedora-51A2DA?logo=fedora\u0026logoColor=white) Fedora / RHEL (x86\\_64) | [log_analyzer-0.2.0-1.x86_64.rpm](https://github.com/Joraslav/log_analyzer/releases/download/v0.2.0/log_analyzer-0.2.0-1.x86_64.rpm) |\n\n[Все релизы →](https://github.com/Joraslav/log_analyzer/releases)\n\n## Возможности\n\n- Рекурсивный обход директории — находит все файлы с расширениями `.log` и `.txt`\n- Подсчёт строк, слов и символов для каждого файла и суммарно\n- Частотный словарь слов (топ-10 в консольном отчёте, полный список в JSON)\n- Поиск произвольных ключевых слов с подсчётом совпадений\n- Консольный отчёт с сводной таблицей по каждому файлу\n- Экспорт полного отчёта в JSON (библиотека [glaze](https://github.com/stephenberry/glaze))\n- Покрытие юнит-тестами через GoogleTest (8 наборов тестов)\n- Поддержка Address Sanitizer / UBSan в режиме Debug\n\n## Требования\n\n| Инструмент | Минимальная версия |\n| --- | --- |\n| GCC / Clang | C++23 (GCC 15, Clang 17+) |\n| CMake | 3.31 |\n| Conan | 2.x |\n\n## Быстрый старт\n\n### 1. Установка зависимостей (Conan)\n\n```bash\n./scripts/create_env.sh Debug\n```\n\nСкрипт устанавливает зависимости через Conan и генерирует `CMakeUserPresets.json`.  \nНа Fedora автоматически применяются профили `Fedora-Debug` / `Fedora-Release`.  \nДля Release-сборки:\n\n```bash\n./scripts/create_env.sh Release\n```\n\n### 2. Конфигурация и сборка\n\n```bash\ncmake --preset conan-debug\ncmake --build build\n```\n\nДля Release:\n\n```bash\ncmake --preset conan-release\ncmake --build build\n```\n\n### 3. Запуск\n\n```bash\n./build/log_analyzer \u003cдиректория\u003e [--keywords слово1,слово2,...] [--json \u003cпуть\u003e] [--threads \u003cN\u003e]\n```\n\nПо умолчанию анализ выполняется в одном потоке. Для параллельного анализа файлов\nиспользуйте `--threads \u003cN\u003e`.\n\n**Примеры:**\n\n```bash\n# Проанализировать директорию logs/\n./build/log_analyzer logs/\n\n# Искать ключевые слова \"error\" и \"warning\", сохранить JSON\n./build/log_analyzer logs/ --keywords error,warning --json report.json\n\n# Параллельный анализ в 8 потоков\n./build/log_analyzer logs/ --threads 8\n\n# Параллельный анализ + ключевые слова + JSON\n./build/log_analyzer logs/ --keywords error,warning --threads 8 --json report.json\n```\n\n## Аргументы командной строки\n\n| Аргумент | Обязателен | Описание |\n| --- | --- | --- |\n| `\u003croot_dir\u003e` | Да | Корневая директория для сканирования |\n| `--keywords word1,word2,...` | Нет | Список ключевых слов через запятую (без пробелов) |\n| `--json \u003cpath\u003e` | Нет | Путь к выходному JSON-файлу |\n| `--threads \u003cN\u003e` | Нет | Количество потоков для параллельного анализа файлов |\n\n## Пример вывода\n\n```planetext\n=== Log Analyzer Report ===\n----------------------------------------\nFiles analyzed : 3\nTotal lines    : 1024\nTotal words    : 8743\nTotal chars    : 61200\n----------------------------------------\n--- Top 10 words ---\n  error: 142\n  warning: 98\n  info: 76\n  ...\n\n--- Keyword hits ---\n  error: 142\n  warning: 98\n\n--- Per-file stats ---\n  logs/app.log        lines=512  words=4200  chars=30100\n  logs/system.log     lines=300  words=2800  chars=20500\n  logs/debug.log      lines=212  words=1743  chars=10600\n```\n\n### Пайплайн обработки\n\n```planetext\nCLI args → FileScanner → (single-thread: FileAnalyzer ×N → Aggregator)\n             → (multi-thread: ThreadPool(N) → FileAnalyzer ×N → ThreadSafeAggregator)\n                                        ↓\n                                      ConsoleReport\n                                        └→ JsonReport\n```\n\n1. `FileScanner` — рекурсивно находит `.log`/`.txt` файлы\n2. `FileAnalyzer` — читает файл построчно, токенизирует через `Tokenizer`, собирает `FileStats`\n3. `Aggregator` — суммирует все `FileStats` в `TotalStats` в однопоточном режиме\n4. `ThreadPool` + `ThreadSafeAggregator` — выполняют параллельный анализ и потокобезопасную агрегацию при использовании `--threads`\n5. `ConsoleReport` — печатает сводку в `std::ostream`\n6. `JsonReport` — сериализует `TotalStats` в JSON через glaze\n\n## Тесты\n\nЧерез скрипт (запуск тестовых бинарников напрямую, без `ctest`):\n\n```bash\n./scripts/run_tests.sh\n\n# Показать список тестов:\n./scripts/run_tests.sh --list\n\n# Запустить только часть тестов по gtest-фильтру:\n./scripts/run_tests.sh --filter \"*Cli*:*Parser*\"\n```\n\nНаборы тестов: `Test_FileScanner`, `Test_Parser`, `Test_FileAnalyzer`, `Test_Aggregator`, `Test_ConsoleReport`, `Test_JsonReport`, `Test_Cli`, `Test_App`.\n\n## Дополнительные инструменты\n\n### Sanitizers (ASan + UBSan)\n\n```bash\ncmake --preset conan-debug -DLOG_ANALYZER_ENABLE_SANITIZERS=ON\ncmake --build build\n```\n\nВключается только для Debug-сборок на GCC/Clang. Перед включением автоматически проверяется поддержка компилятора.\n\n### clang-tidy\n\n```bash\n./scripts/check_tidy.sh --build-type Debug\n# Автоматически исправить предупреждения:\n./scripts/check_tidy.sh --build-type Debug --fix\n```\n\n### clang-format\n\n```bash\n# Применить форматирование ко всем файлам src/ и tests/:\n./scripts/fix_style.sh\n\n# Только показать список файлов без изменений:\n./scripts/fix_style.sh --list\n```\n\n### Очистка сборки\n\n```bash\n./scripts/clean.sh\n```\n\n## Зависимости\n\n| Библиотека | Версия | Назначение |\n| --- | --- | --- |\n| [glaze](https://github.com/stephenberry/glaze) | 7.4.0 | JSON-сериализация |\n| [GoogleTest](https://github.com/google/googletest) | 1.17.0 | Юнит-тестирование |\n\nЗависимости управляются через **Conan 2** и не требуют ручной установки.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoraslav%2Flog_analyzer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoraslav%2Flog_analyzer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoraslav%2Flog_analyzer/lists"}