An agent run on each node in HPC system, which is responsible for monitoring & health checking node, push gathered informations to specified Kafka
topic via configurations.
Dependencies:
librdkafka
spdlog
sysstat
libpcap-dev
boost
nlohmann-json-dev
ixwebsocket
Install:
sudo apt install librdkafka-dev libspdlog-dev sysstat libpcap-dev libboost-all-dev nlohmann-json3-dev
git clone git@github.com:machinezone/IXWebSocket.git
cd IXWebSocket
cmake -DBUILD_SHARED_LIBS=ON
make -j
make install
Build to binary:
make
Test memory leak:
make test_memory_leak
📦include // All header files go here
┣ 📜common.h // Common typedef, reusable functions and classes
┣ 📜exceptions.h // Contain all exception types
┣ 📜kafka_producer.h // Kafka producer
┣ 📜main.h // All libaries (standard & 3rd-party) was included here
┣ 📜process.h // Process info
┗ 📜sensor.h // Sensor
📦src // Implementaion files
┣ 📜main.cpp // Program entry
┗ 📜process.cpp
📦.github
┗ 📂workflows // CI/CD scripts
📦test // Tests
📜.gitignore // Git ignore file
📜CMakeLists.txt // Project build configurations
📜Makefile // Contains some helpful scripts
📜README.md
Rules:
- NO unused variables
- NO hard codes
- Use header guard when declare a header file and its implementation file
- Follow
RAII
rules - Follow
Rule of three
- Unused method must throw
Unimplemented
exception
Conventions:
- Private method should have name with prefix
_
- Class name must be in
CamelCase
with first letter capitalized - Method name must be in
camelCase
with first letter in lowercase - Header guard name must be
__CAPITALIZED_SNAKE_CASE__
with prefix & postfix are__
. Example:__COMMON_H__
- Filename must be in snake case
snake_case
Consider to:
- Use inline function when task has a seperate logic from other bodies of code
- Use
const
for not modified variables and parameters - Use
typedef
to set variable's type a meaningful name - Pass by reference for object values
- Minimalize dependencies as much as possible