CMake template to create new C++ applications with basic codes/interfaces are already defined. Requires a C++17 supported compiler.
It provides the following features
- Tracing
- Generates automatically minidump files using Crashpad for error signals.
- Logging
- Spdlog with rotating file, syslog and coloured stdout outputs
- Sentry and Grafana Loki integration for automatic forwarding of logs to an external HTTP server
- Prometheus client for track internal metrics like error counts, performance of functions including
- Incremental counters to track success/fail rates and active processes,
- Minimum and maximum timings,
- Quantile based performance metrics to determine bottlenecks
- User interactivity
- Embedded Telnet Server
- ZeroMQ socket
Feel free to ask, use and report any bugs you encountered!
- CodeCoverage : Detects and enables gcovr
- CompilerSecurityOption: Enables/Disables secure compiler flags
- Doxy : Find doxygen package and prepare doc environment
- GenerateSymbols : Adds a target for generation of symbol files for minidump
- GitVersion : Get SHA1 hash of current commit
- GraphViz : Find graphviz and dot executable to create dependency graph
All scripts should be executed from top level directory
- firstName : Script to change placeholder name
- dump_syms : Dumps symbol files
- CppZMQ
- crashpad
- Date
- Http-status-codes
- Prometheus-cpp
- RapidJSON
- Sentry
- TelnetServLib (Modified and embedded to source directory)
Developing dependencies not required for runtime,
- breakpad (It is required for automatically dumping symbols)
- GoogleTest (For testing)
- MemPlumber (For testing)
- ZLIB (It is required by breakpad)
These runtime dependencies should be installed to the system (for example via package managers like apt or dnf),
Full dependency graph can be seen here
- all : Prepares all targets
- coverage : Prepares coverage report
- docs : Prepares documentation
- dependency-graph : Prepares graphviz visualization of dependencies
- package : Prepares default packages which includes deb/rpm package and symbols with a systemd service. You should specify the desired package type with -DCPACK_GENERATOR="DEB" (or "RPM")
- test : Prepares gtest target
Since there is a Prometheus server integration, also there is a Grafana integration. You can find an example for dashboard here. Also you can see screenshot of the dashboard below.