Skip to content

Commit c3e8de5

Browse files
README bijgewerkt met nieuwe banner en C++20 Glassmorphism features
1 parent 4ea57bb commit c3e8de5

File tree

130 files changed

+35
-152716
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+35
-152716
lines changed

README.md

Lines changed: 32 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,35 @@
1-
# ⚡ High-Performance Streaming Log Analyzer (C++17)
1+
# ⚡ High-Performance Streaming Log Analyzer (C++20)
22

3-
Een productie-waardige, streaming log analyse engine gebouwd met modern C++17 en een responsieve ImGui frontend. Ontworpen voor hoge doorvoer, lage latency en zero-copy parsing.
3+
![Log Analyzer Pro Banner](banner.png)
44

5-
![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)
6-
![C++](https://img.shields.io/badge/std-c%2B%2B17-blue.svg)
5+
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.
6+
7+
![Version](https://img.shields.io/badge/version-2.3.0-blue.svg)
8+
![C++](https://img.shields.io/badge/std-c%2B%2B20-blue.svg)
79
![License](https://img.shields.io/badge/license-MIT-green.svg)
810
![Build Status](https://github.com/parvenuprompting/log-analyzer/actions/workflows/ci.yml/badge.svg)
911

1012
## 🎯 Project Doelen & Filosofie
1113
Dit project dient als een **Core Infrastructure Portfolio Piece**, en demonstreert:
1214
* **Zero-Copy Architectuur**: Uitgebreid gebruik van `std::string_view` om heap allocaties te minimaliseren.
13-
* **Streaming Pipeline**: Verwerkt logs regel-voor-regel met `O(1)` geheugen, ongeacht de bestandsgrootte (getest met 10GB+ bestanden).
14-
* **Moderne Tooling**: Catch2 v3 voor testing, CI/CD via GitHub Actions, en deterministische sorteerstrategieën.
15-
* **Dual Frontend**: Een headless CLI voor scripting en een hardware-versnelde GUI (ImGui) voor interactieve analyse.
15+
* **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.
17+
* **Moderne Tooling**: C++20 features (Concepts, Format), Catch2 v3 voor testing, en CMake build systeem.
1618

1719
## ✨ Belangrijkste Kenmerken
1820

19-
### Core Engine
20-
* **High-Performance Parsing**: Custom `find()`-based parser (geen Regex) die **~2 miljoen regels/sec** verwerkt.
21-
* **Robuuste Timestamp Afhandeling**: Strikte kalendervalidatie (schrikkeljaren, dagen-per-maand logica) met `std::from_chars`.
22-
* **Pluggable Analyzers**: Interface-based ontwerp waarmee eenvoudig nieuwe metrieken toegevoegd kunnen worden.
23-
* `LevelCountAnalyzer`
24-
* `KeywordHitAnalyzer`
25-
* `TopErrorAnalyzer` (Bounded-space algoritme voor "Top N" problemen)
21+
### Core Engine (C++20)
22+
* **High-Performance Parsing**: Custom parser verwerkt **~2 miljoen regels/sec**.
23+
* **Advanced Memory Management**: `MemoryMappedFile` voor razendsnelle I/O zonder buffers te kopiëren.
24+
* **Pluggable Analyzers**: Modulaire architectuur voor `LevelCount`, `KeywordSearch` en `TopError` analyses.
2625

27-
### Moderne GUI
28-
* **Responsief**: Analyse draait in een achtergrond-thread, waardoor de UI op 60 FPS blijft draaien.
29-
* **Interactief**: Sorteerbare tabellen, real-time voortgangsbalk en ondersteuning voor annuleren.
30-
* **Visuals**: Custom-drawn grafieken en een "Dark Coral" thema.
31-
* **Dependency-Lite**: Custom file picker gebruikmakend van C++17 `<filesystem>` (geen zware externe libs).
26+
### Premium GUI (Glassmorphism)
27+
* **Zen Theme**: Een rustgevende, geanimeerde achtergrond met subtiele parallax effecten.
28+
* **Polished Visuals**:
29+
* **Glass Cards**: Semi-transparante panelen met frosty borders.
30+
* **Vector Icons**: Volledige integratie van Font Awesome 6.
31+
* **Gradient Charts**: Prachtige datavisualisaties met kleurverlopen.
32+
* **Window Management**: Minimaliseren, inklappen en een slimme **Fill Screen / Restore** modus.
3233

3334
## 📊 Performance Benchmark
3435
Verwerking van een gegenereerd logbestand met **1,000,000 regels** (ongeveer 100MB):
@@ -40,78 +41,47 @@ Verwerking van een gegenereerd logbestand met **1,000,000 regels** (ongeveer 100
4041
| **Geheugengebruik** | **< 10MB** (constant) |
4142
| **Platform** | macOS M1, Single Thread |
4243

43-
*Benchmark uitgevoerd via `cmake build` op 2026-01-05*
44-
4544
## 🏗 Architectuur
4645

47-
Het systeem volgt een strikte **Gelaagde Architectuur**:
48-
4946
```mermaid
5047
graph TD
5148
CLI[CLI Frontend] --> APP[Application Layer]
5249
GUI[GUI Frontend] --> APP
5350
APP --> PIPELINE[Analysis Pipeline]
5451
PIPELINE --> PARSER[LogParser]
55-
PIPELINE --> IO[FileReader/Writer]
52+
PIPELINE --> IO[MemoryMappedFile]
5653
PIPELINE --> ANALYZERS[Analyzer Collection]
5754
```
5855

59-
* **Core**: Domeintypes (`LogEntry`, `Timestamp`) en stateloze logica.
60-
* **IO**: RAII wrappers voor file streaming.
61-
* **Analysis**: State-houdende analyzers die `IAnalyzer` implementeren.
62-
* **App**: Orchestratie-laag die foutafhandeling beheert (`AppResult`, `AppStatus`).
63-
* **GUI/CLI**: Dunne adapters die de App-laag aanroepen.
64-
6556
## 🚀 Quick Start
6657

6758
### Vereisten
68-
* C++17 compliant compiler (Clang/GCC/MSVC)
59+
* C++20 compliant compiler (Clang 10+ / GCC 10+ / MSVC 19.28+)
6960
* CMake (3.14+)
70-
* GLFW (alleen voor GUI): `brew install glfw` (macOS) of `apt-get install libglfw3-dev` (Linux)
61+
* GLFW (voor GUI)
7162

7263
### Build & Run
7364
```bash
7465
# Clone
7566
git clone https://github.com/parvenuprompting/log-analyzer.git
7667
cd log_analyzer
7768

78-
# Configure & Build (CMake)
79-
mkdir build
80-
cd build
69+
# Configure & Build
70+
mkdir build && cd build
8171
cmake ..
8272
make
8373

84-
# Run CLI
85-
./log_analyzer --input ../tests/sample_log.txt --report report.txt
86-
87-
# Run GUI
88-
./log_analyzer_gui
89-
90-
# Run Tests
91-
ctest
74+
# Run GUI (Zen Mode)
75+
./log_analyzer_gui_zen_v2
9276
```
9377

94-
## 🛠 Ontwerpkeuzes & Trade-offs (Design Decisions)
95-
96-
### 1. `std::string_view` vs `std::string`
97-
**Keuze:** Gebruik van `string_view` voor alle parsing interfaces.
98-
* **Pro:** Nul allocaties tijdens parsing. Een regel wordt in een herbruikbare buffer gelezen en velden zijn slechts pointers naar die buffer.
99-
* **Con:** Vereist zorgvuldig levensduurbeheer (views zijn ongeldig na het lezen van de volgende regel).
100-
* **Mitigatie:** `LogEntry` neemt eigendom over van data (deep copy) alleen wanneer opgeslagen voor "Top N" aggregatie, maar statistische analyzers hebben geen opslag nodig.
101-
102-
### 2. Custom Parser vs Regex
103-
**Keuze:** Handgeschreven parser met `find()` en `from_chars`.
104-
* **Reden:** Regex is handig maar ordes van grootte trager voor eenvoudige logformaten. `from_chars` (C++17) biedt de snelst mogelijke integer conversie.
78+
## 🛠 Ontwerpkeuzes
10579

106-
### 3. Immediate vs Deferred Sorting
107-
**Keuze:** "Lazy Sorting" voor Top Errors.
108-
* **Mechanisme:** `TopErrorAnalyzer` accumuleert tellingen in een `std::map`. Sorteren gebeurt pas eenmalig bij `finalize()`, wat zorgt voor `O(N)` insertie en `O(K log K)` uiteindelijke sortering (waarbij K unieke foutmeldingen zijn, niet het totaal aantal regels).
80+
### 1. `std::string_view` & Memory Mapping
81+
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.
10982

110-
## 🧪 Testing
111-
Het project gebruikt **Catch2 v3** voor betrouwbare unit testing:
112-
* **Coverage:** 15 Test Cases, 50+ Assertions.
113-
* **Scope:** Parser randgevallen (edge cases), Timestamp validatie, Analyzer determinisme, Integratie tests.
114-
* **CI:** Geautomatiseerde testing bij elke push via GitHub Actions.
83+
### 2. Custom OpenGL Renderer
84+
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.
11585

11686
## 👥 Auteur
11787
**Tiëndo Welles**

banner.png

555 KB
Loading

0 commit comments

Comments
 (0)