Skip to content

Commit 3c212be

Browse files
Update README met Phase 2 features en nieuwe banner
- Toegevoegd: Uitgebreide documentatie voor async indexing en PatternLogParser - Toegevoegd: Nieuwe architectuur diagram met parser interface - Toegevoegd: Configuratie instructies voor custom log formats - Toegevoegd: vcpkg dependency management sectie - Toegevoegd: Testing en project structuur documentatie - Vervangen: Banner afbeelding met nieuwe screenshot van de app - Verbeterd: Performance benchmarks met 10GB+ support - Verbeterd: Quick start instructies voor alle platforms
1 parent e976b13 commit 3c212be

File tree

2 files changed

+132
-8
lines changed

2 files changed

+132
-8
lines changed

README.md

Lines changed: 132 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ⚡ High-Performance Streaming Log Analyzer (C++20)
22

3-
![Log Analyzer Pro Banner](banner.png)
3+
![Log Analyzer Pro Banner](resources/banner.png)
44

55
Een productie-waardige, streaming log analyse engine gebouwd met **modern C++20** en een verbluffende **Glassmorphism ImGui frontend**. Ontworpen voor hoge doorvoer, lage latency en een premium gebruikerservaring.
66

@@ -13,14 +13,19 @@ Een productie-waardige, streaming log analyse engine gebouwd met **modern C++20*
1313
Dit project dient als een **Core Infrastructure Portfolio Piece**, en demonstreert:
1414
* **Zero-Copy Architectuur**: Uitgebreid gebruik van `std::string_view` om heap allocaties te minimaliseren.
1515
* **Streaming Pipeline**: Verwerkt logs regel-voor-regel met `O(1)` geheugen, ongeacht de bestandsgrootte.
16-
* **State-of-the-Art UI**: Een volledig op maat gemaakte OpenGL renderer met **Ken Burns animaties**, wazige transparantie (Glassmorphism) en responsieve interacties.
16+
* **Async Indexing**: Achtergrond threading voor 10GB+ bestanden zonder UI freeze.
17+
* **Configureerbare Parsing**: Regex-based pattern matching voor elk willekeurig logformaat.
18+
* **State-of-the-Art UI**: Een volledig op maat gemaakte OpenGL renderer met **Glassmorphism**, animaties en responsieve interacties.
1719
* **Moderne Tooling**: C++20 features (Concepts, Format), Catch2 v3 voor testing, en CMake build systeem.
1820

1921
## ✨ Belangrijkste Kenmerken
2022

2123
### Core Engine (C++20)
2224
* **High-Performance Parsing**: Custom parser verwerkt **~2 miljoen regels/sec**.
25+
* **Configureerbare Parser**: `PatternLogParser` met regex-based custom formats (bijv. `[%D %T] [%L] %M`).
2326
* **Advanced Memory Management**: `MemoryMappedFile` voor razendsnelle I/O zonder buffers te kopiëren.
27+
* **Async Indexing**: Dedicated worker thread voor line offset berekening (10GB+ support).
28+
* **Smart Memory Allocation**: Pre-allocatie gebaseerd op `fileSize / 120` heuristiek.
2429
* **Pluggable Analyzers**: Modulaire architectuur voor `LevelCount`, `KeywordSearch` en `TopError` analyses.
2530

2631
### Premium GUI (Glassmorphism)
@@ -29,6 +34,11 @@ Dit project dient als een **Core Infrastructure Portfolio Piece**, en demonstree
2934
* **Glass Cards**: Semi-transparante panelen met frosty borders.
3035
* **Vector Icons**: Volledige integratie van Font Awesome 6.
3136
* **Gradient Charts**: Prachtige datavisualisaties met kleurverlopen.
37+
* **Timeline & Heatmap**: Interactieve visualisaties voor log patronen.
38+
* **Advanced Features**:
39+
* **Log Viewer**: Memory-mapped viewer met `ImGuiListClipper` voor miljoenen regels.
40+
* **Progress Indicators**: Real-time voortgang tijdens async indexing.
41+
* **Parser Configuration**: UI voor custom log format patterns.
3242
* **Window Management**: Minimaliseren, inklappen en een slimme **Fill Screen / Restore** modus.
3343

3444
## 📊 Performance Benchmark
@@ -39,6 +49,7 @@ Verwerking van een gegenereerd logbestand met **1,000,000 regels** (ongeveer 100
3949
| **Executietijd** | **0.52s** |
4050
| **Doorvoer** | **~1.92M regels/sec** |
4151
| **Geheugengebruik** | **< 10MB** (constant) |
52+
| **Max File Size** | **10GB+** (met async indexing) |
4253
| **Platform** | macOS M1, Single Thread |
4354

4455
## 🏗 Architectuur
@@ -48,41 +59,154 @@ graph TD
4859
CLI[CLI Frontend] --> APP[Application Layer]
4960
GUI[GUI Frontend] --> APP
5061
APP --> PIPELINE[Analysis Pipeline]
51-
PIPELINE --> PARSER[LogParser]
62+
PIPELINE --> PARSER[ILogParser Interface]
63+
PARSER --> STANDARD[StandardLogParser]
64+
PARSER --> PATTERN[PatternLogParser]
5265
PIPELINE --> IO[MemoryMappedFile]
5366
PIPELINE --> ANALYZERS[Analyzer Collection]
67+
GUI --> VIEWER[Async Log Viewer]
68+
VIEWER --> INDEXER[Background Indexer Thread]
5469
```
5570

71+
### Parser Architectuur
72+
De parser engine gebruikt een **Strategy Pattern** met polymorfisme:
73+
- **`ILogParser`**: Pure virtual interface voor alle parsers
74+
- **`StandardLogParser`**: Geoptimaliseerde parser voor standaard formaten
75+
- **`PatternLogParser`**: Regex-based parser voor custom formats met tokens (`%D`, `%T`, `%L`, `%M`)
76+
5677
## 🚀 Quick Start
5778

5879
### Vereisten
5980
* C++20 compliant compiler (Clang 10+ / GCC 10+ / MSVC 19.28+)
6081
* CMake (3.14+)
6182
* GLFW (voor GUI)
83+
* OpenGL 3.3+
6284

6385
### Build & Run
6486
```bash
6587
# Clone
6688
git clone https://github.com/parvenuprompting/log-analyzer.git
67-
cd log_analyzer
89+
cd log-analyzer
6890

6991
# Configure & Build
7092
mkdir build && cd build
7193
cmake ..
7294
make
7395

74-
# Run GUI (Zen Mode)
75-
./log_analyzer_gui_zen_v2
96+
# Run GUI
97+
open log_analyzer_gui.app # macOS
98+
# of
99+
./log_analyzer_gui # Linux/Windows
100+
```
101+
102+
### vcpkg Dependency Management (Optioneel)
103+
```bash
104+
# Installeer vcpkg
105+
git clone https://github.com/microsoft/vcpkg.git
106+
./vcpkg/bootstrap-vcpkg.sh
107+
108+
# Build met vcpkg
109+
export VCPKG_ROOT=/path/to/vcpkg
110+
mkdir build && cd build
111+
cmake ..
112+
make
76113
```
77114

78115
## 🛠 Ontwerpkeuzes
79116

80117
### 1. `std::string_view` & Memory Mapping
81118
Door gebruik te maken van memory mapping, wordt het bestand direct in het virtuele geheugen geladen. `std::string_view` slice't hierin zonder ooit data te kopiëren. Dit resulteert in zero-copy parsing van disk tot analyse.
82119

83-
### 2. Custom OpenGL Renderer
120+
### 2. Async Indexing voor Grote Bestanden
121+
Voor bestanden van 10GB+ wordt de line offset berekening uitgevoerd in een dedicated worker thread:
122+
- **Main Thread**: Rendert UI met progress indicator
123+
- **Worker Thread**: Scant bestand voor `\n` characters en bouwt `lineOffsets_` vector
124+
- **Synchronisatie**: `std::mutex` voor thread-safe swap van resultaten
125+
126+
### 3. Configureerbare Parser met Regex
127+
De `PatternLogParser` converteert user-friendly tokens naar regex patterns:
128+
```cpp
129+
Pattern: "[%D %T] [%L] %M"
130+
Regex: "\[(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})\] \[(\w+)\] (.*)"
131+
```
132+
133+
### 4. Custom OpenGL Renderer
84134
In plaats van standaard ImGui styles, gebruikt dit project een custom render loop met `stb_image` voor textures en shader-achtige logica voor de achtergrond animaties, wat bewijst dat C++ apps er net zo modern uit kunnen zien als web apps.
85135

136+
## 📦 Project Structuur
137+
```
138+
log-analyzer/
139+
├── core/ # Parsing engine & data structures
140+
│ ├── ILogParser.h
141+
│ ├── StandardLogParser.cpp
142+
│ └── PatternLogParser.cpp
143+
├── analysis/ # Analysis pipeline & algorithms
144+
├── gui/ # ImGui frontend
145+
│ ├── GuiController.cpp
146+
│ ├── LogViewer.cpp
147+
│ └── main_gui.cpp
148+
├── io/ # Memory-mapped file I/O
149+
├── resources/ # Assets (icons, backgrounds, fonts)
150+
├── tests/ # Catch2 unit tests
151+
└── vcpkg.json # Dependency manifest
152+
```
153+
154+
## 🧪 Testing
155+
```bash
156+
# Run unit tests
157+
cd build
158+
./unit_tests
159+
160+
# Run specific test suite
161+
./unit_tests "[Pattern]" # Test PatternLogParser
162+
./unit_tests "[Parser]" # Test StandardLogParser
163+
```
164+
165+
## 🎨 UI Features
166+
167+
### Dashboard Tab
168+
- File input met browse functie
169+
- Filters (Time Range, Keyword Search, Custom Parser)
170+
- Analysis results met grafieken
171+
- Timeline visualisatie (minute-by-minute)
172+
- Heatmap (24x7 error density)
173+
174+
### Log Viewer Tab
175+
- Memory-mapped file viewing
176+
- Async indexing met progress bar
177+
- Syntax highlighting voor log levels
178+
- `ImGuiListClipper` voor miljoenen regels
179+
- Zero-copy rendering
180+
181+
## 🔧 Configuratie
182+
183+
### Custom Log Formats
184+
In de GUI kun je custom log formats definiëren:
185+
1. Enable "Configurable Parser" checkbox
186+
2. Voer pattern in (bijv. `%T - %L - %M`)
187+
3. Ondersteunde tokens:
188+
- `%D`: Date (YYYY-MM-DD)
189+
- `%T`: Time (HH:MM:SS)
190+
- `%L`: Level (INFO, ERROR, WARNING)
191+
- `%M`: Message (rest van de regel)
192+
193+
## 📈 Roadmap
194+
195+
### Phase 3: Cross-Platform Professionalization (In Progress)
196+
- [ ] vcpkg integratie voor dependency management
197+
- [ ] Multi-platform CMake (Windows, Linux, macOS)
198+
- [ ] GitHub Actions CI/CD pipeline
199+
- [ ] Platform-specific optimalisaties
200+
201+
### Phase 4: Advanced Features
202+
- [ ] Real-time log streaming
203+
- [ ] Distributed log aggregation
204+
- [ ] Machine learning anomaly detection
205+
- [ ] Export naar JSON/CSV/PDF
206+
86207
## 👥 Auteur
87-
**Tiëndo Welles**
208+
**Tiëndo Welles**
88209
*High-Performance C++ Portfolio Project*
210+
211+
## 📄 Licentie
212+
MIT License - zie [LICENSE](LICENSE) voor details

resources/banner.png

49.9 KB
Loading

0 commit comments

Comments
 (0)