You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.
Dit project dient als een **Core Infrastructure Portfolio Piece**, en demonstreert:
12
14
***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.
16
18
17
19
## ✨ Belangrijkste Kenmerken
18
20
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.
26
25
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.
**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
105
79
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.
109
82
110
-
## 🧪 Testing
111
-
Het project gebruikt **Catch2 v3** voor betrouwbare unit testing:
***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.
0 commit comments