log
This commit is contained in:
82
.gitignore
vendored
Normal file
82
.gitignore
vendored
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# This file is used to ignore files which are generated
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
*~
|
||||||
|
*.autosave
|
||||||
|
*.a
|
||||||
|
*.core
|
||||||
|
*.moc
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.orig
|
||||||
|
*.rej
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*_pch.h.cpp
|
||||||
|
*_resource.rc
|
||||||
|
*.qm
|
||||||
|
.#*
|
||||||
|
*.*#
|
||||||
|
core
|
||||||
|
!core/
|
||||||
|
tags
|
||||||
|
.DS_Store
|
||||||
|
.directory
|
||||||
|
*.debug
|
||||||
|
Makefile*
|
||||||
|
*.prl
|
||||||
|
*.app
|
||||||
|
moc_*.cpp
|
||||||
|
ui_*.h
|
||||||
|
qrc_*.cpp
|
||||||
|
Thumbs.db
|
||||||
|
*.res
|
||||||
|
*.rc
|
||||||
|
/.qmake.cache
|
||||||
|
/.qmake.stash
|
||||||
|
|
||||||
|
# qtcreator generated files
|
||||||
|
*.pro.user*
|
||||||
|
*.qbs.user*
|
||||||
|
CMakeLists.txt.user*
|
||||||
|
|
||||||
|
# xemacs temporary files
|
||||||
|
*.flc
|
||||||
|
|
||||||
|
# Vim temporary files
|
||||||
|
.*.swp
|
||||||
|
|
||||||
|
# Visual Studio generated files
|
||||||
|
*.ib_pdb_index
|
||||||
|
*.idb
|
||||||
|
*.ilk
|
||||||
|
*.pdb
|
||||||
|
*.sln
|
||||||
|
*.suo
|
||||||
|
*.vcproj
|
||||||
|
*vcproj.*.*.user
|
||||||
|
*.ncb
|
||||||
|
*.sdf
|
||||||
|
*.opensdf
|
||||||
|
*.vcxproj
|
||||||
|
*vcxproj.*
|
||||||
|
|
||||||
|
# MinGW generated files
|
||||||
|
*.Debug
|
||||||
|
*.Release
|
||||||
|
|
||||||
|
# Python byte code
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
# --------
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
|
||||||
|
# Directories with generated files
|
||||||
|
.moc/
|
||||||
|
.obj/
|
||||||
|
.pch/
|
||||||
|
.rcc/
|
||||||
|
.uic/
|
||||||
|
/build*/
|
||||||
70
CMakeLists.txt
Normal file
70
CMakeLists.txt
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.19)
|
||||||
|
project(soft_bus_daemon
|
||||||
|
LANGUAGES CXX
|
||||||
|
VERSION 1.0.0
|
||||||
|
)
|
||||||
|
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
|
||||||
|
|
||||||
|
# Output layout
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
|
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/plugins)
|
||||||
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/plugins)
|
||||||
|
|
||||||
|
# 启用AddressSanitizer(仅在非Windows平台上)
|
||||||
|
if(NOT WIN32)
|
||||||
|
set(SANITIZE_FLAGS "-fsanitize=address")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SANITIZE_FLAGS}")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SANITIZE_FLAGS}")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${SANITIZE_FLAGS}")
|
||||||
|
else()
|
||||||
|
message(STATUS "AddressSanitizer disabled on Windows because the runtime is unavailable in the MinGW kit.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# 设置C++标准
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_AUTORCC ON)
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
# 查找Qt6(守护进程只需要 Core/DBus/Network/SerialPort/Sql)
|
||||||
|
find_package(Qt6 6.5 REQUIRED COMPONENTS Core SerialPort Network Sql DBus)
|
||||||
|
|
||||||
|
# 检测编译平台
|
||||||
|
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
|
||||||
|
set(PlatformDir "x86")
|
||||||
|
else()
|
||||||
|
set(PlatformDir "x64")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
qt_standard_project_setup()
|
||||||
|
|
||||||
|
# 添加软总线模板库
|
||||||
|
# 1. 日志库
|
||||||
|
qt_add_library(softbus_template
|
||||||
|
src/utils/logs/logging.h
|
||||||
|
src/utils/logs/LogStream.h
|
||||||
|
)
|
||||||
|
|
||||||
|
qt_add_executable(softbus_daemon
|
||||||
|
main.cpp
|
||||||
|
src/core/CoreService.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
target_link_libraries(softbus_daemon
|
||||||
|
PRIVATE
|
||||||
|
Qt::Core
|
||||||
|
)
|
||||||
|
|
||||||
|
add_subdirectory(plugins)
|
||||||
|
|
||||||
|
|
||||||
|
install(TARGETS softbus_daemon
|
||||||
|
BUNDLE DESTINATION .
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
)
|
||||||
5
config/daemon_config.json
Normal file
5
config/daemon_config.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"plugin_dir": "bin/plugins",
|
||||||
|
"device_tree": [],
|
||||||
|
"routes": []
|
||||||
|
}
|
||||||
5
config/plugins_config.json
Normal file
5
config/plugins_config.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"modbus_rtu": {
|
||||||
|
"register_map": []
|
||||||
|
}
|
||||||
|
}
|
||||||
35
main.cpp
Normal file
35
main.cpp
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#include <QCoreApplication>
|
||||||
|
#include <QCommandLineParser>
|
||||||
|
#include <signal.h>
|
||||||
|
#include "src/utils/logs/logging.h"
|
||||||
|
#include "src/core/CoreService.h"
|
||||||
|
|
||||||
|
void signalHandler(int signal)
|
||||||
|
{
|
||||||
|
LOG_INFO() << "Received signal:" << signal;
|
||||||
|
QCoreApplication::quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QCoreApplication app(argc, argv);
|
||||||
|
app.setApplicationName("soft_bus_daemon");
|
||||||
|
app.setApplicationVersion("1.0.0");
|
||||||
|
app.setOrganizationName("soft_bus");
|
||||||
|
|
||||||
|
QCommandLineParser parser;
|
||||||
|
parser.setApplicationDescription(QStringLiteral("Soft Bus Daemon"));
|
||||||
|
parser.addHelpOption();
|
||||||
|
parser.addVersionOption();
|
||||||
|
parser.process(app);
|
||||||
|
|
||||||
|
LOG_INFO() << "Starting Soft Bus Daemon";
|
||||||
|
|
||||||
|
signal(SIGINT, signalHandler);
|
||||||
|
signal(SIGTERM, signalHandler);
|
||||||
|
|
||||||
|
CoreService::instance()->initialize();
|
||||||
|
int ret = app.exec();
|
||||||
|
CoreService::instance()->shutdown();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
6
plugins/CMakeLists.txt
Normal file
6
plugins/CMakeLists.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.19)
|
||||||
|
|
||||||
|
add_subdirectory(protocols/modbus_rtu)
|
||||||
|
add_subdirectory(protocols/can_raw)
|
||||||
|
add_subdirectory(protocols/custom_proto)
|
||||||
|
add_subdirectory(filters)
|
||||||
1
plugins/filters/CMakeLists.txt
Normal file
1
plugins/filters/CMakeLists.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# Placeholder for filter plugins
|
||||||
3
plugins/protocols/can_raw/CMakeLists.txt
Normal file
3
plugins/protocols/can_raw/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Placeholder for can_raw plugin
|
||||||
|
add_library(can_raw SHARED)
|
||||||
|
set_target_properties(can_raw PROPERTIES OUTPUT_NAME "can_raw")
|
||||||
3
plugins/protocols/custom_proto/CMakeLists.txt
Normal file
3
plugins/protocols/custom_proto/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Placeholder for custom_proto plugin
|
||||||
|
add_library(custom_proto SHARED)
|
||||||
|
set_target_properties(custom_proto PROPERTIES OUTPUT_NAME "custom_proto")
|
||||||
3
plugins/protocols/modbus_rtu/CMakeLists.txt
Normal file
3
plugins/protocols/modbus_rtu/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Placeholder for modbus_rtu plugin
|
||||||
|
add_library(modbus_rtu SHARED)
|
||||||
|
set_target_properties(modbus_rtu PROPERTIES OUTPUT_NAME "modbus_rtu")
|
||||||
47
src/core/CoreService.cpp
Normal file
47
src/core/CoreService.cpp
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#include "CoreService.h"
|
||||||
|
#include "../utils/logs/logging.h"
|
||||||
|
|
||||||
|
CoreService* CoreService::instance()
|
||||||
|
{
|
||||||
|
static CoreService inst;
|
||||||
|
return &inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
CoreService::CoreService(QObject* parent)
|
||||||
|
: QObject(parent)
|
||||||
|
, m_initialized(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CoreService::~CoreService()
|
||||||
|
{
|
||||||
|
shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CoreService::initialize()
|
||||||
|
{
|
||||||
|
if (m_initialized) {
|
||||||
|
LOG_WARNING() << "CoreService already initialized";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_INFO() << "CoreService initializing";
|
||||||
|
m_initialized = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CoreService::shutdown()
|
||||||
|
{
|
||||||
|
if (!m_initialized) {
|
||||||
|
LOG_DEBUG() << "CoreService shutdown called while not initialized";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_INFO() << "CoreService shutting down";
|
||||||
|
m_initialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CoreService::isInitialized() const
|
||||||
|
{
|
||||||
|
return m_initialized;
|
||||||
|
}
|
||||||
23
src/core/CoreService.h
Normal file
23
src/core/CoreService.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
class CoreService : public QObject {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
static CoreService* instance();
|
||||||
|
|
||||||
|
bool initialize();
|
||||||
|
void shutdown();
|
||||||
|
bool isInitialized() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
explicit CoreService(QObject* parent = nullptr);
|
||||||
|
~CoreService();
|
||||||
|
|
||||||
|
CoreService(const CoreService&) = delete;
|
||||||
|
CoreService& operator=(const CoreService&) = delete;
|
||||||
|
|
||||||
|
bool m_initialized = false;
|
||||||
|
};
|
||||||
7
src/core/memory/LockFreeQueue.h
Normal file
7
src/core/memory/LockFreeQueue.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Placeholder for a lock-free ring queue.
|
||||||
|
class LockFreeQueue {
|
||||||
|
public:
|
||||||
|
LockFreeQueue() = default;
|
||||||
|
};
|
||||||
7
src/core/memory/MemoryPool.h
Normal file
7
src/core/memory/MemoryPool.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Placeholder for a preallocated memory pool.
|
||||||
|
class MemoryPool {
|
||||||
|
public:
|
||||||
|
MemoryPool() = default;
|
||||||
|
};
|
||||||
5
src/core/metadata/DataTrace.h
Normal file
5
src/core/metadata/DataTrace.h
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Placeholder for data trace model.
|
||||||
|
struct DataTrace {
|
||||||
|
};
|
||||||
5
src/core/metadata/Metadata.h
Normal file
5
src/core/metadata/Metadata.h
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Placeholder for metadata model.
|
||||||
|
struct Metadata {
|
||||||
|
};
|
||||||
7
src/core/plugin_system/IProtocolPlugin.h
Normal file
7
src/core/plugin_system/IProtocolPlugin.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Placeholder protocol plugin interface.
|
||||||
|
class IProtocolPlugin {
|
||||||
|
public:
|
||||||
|
virtual ~IProtocolPlugin() = default;
|
||||||
|
};
|
||||||
7
src/core/plugin_system/PluginManager.h
Normal file
7
src/core/plugin_system/PluginManager.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Placeholder for plugin manager.
|
||||||
|
class PluginManager {
|
||||||
|
public:
|
||||||
|
PluginManager() = default;
|
||||||
|
};
|
||||||
7
src/message_bus/pipeline/PipelineContext.h
Normal file
7
src/message_bus/pipeline/PipelineContext.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Placeholder for pipeline context.
|
||||||
|
class PipelineContext {
|
||||||
|
public:
|
||||||
|
PipelineContext() = default;
|
||||||
|
};
|
||||||
7
src/message_bus/pipeline/PipelineEngine.h
Normal file
7
src/message_bus/pipeline/PipelineEngine.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Placeholder for pipeline engine.
|
||||||
|
class PipelineEngine {
|
||||||
|
public:
|
||||||
|
PipelineEngine() = default;
|
||||||
|
};
|
||||||
7
src/utils/logs/LogStream.h
Normal file
7
src/utils/logs/LogStream.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Log stream buffer placeholder.
|
||||||
|
class LogStream {
|
||||||
|
public:
|
||||||
|
LogStream() = default;
|
||||||
|
};
|
||||||
36
src/utils/logs/logging.h
Normal file
36
src/utils/logs/logging.h
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#ifndef LOGGING_H
|
||||||
|
#define LOGGING_H
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QLoggingCategory>
|
||||||
|
#include <QString>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file logging.h
|
||||||
|
* @brief 日志宏定义,提供带文件名和函数名的日志输出,并异步存储到数据库
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 获取文件名(不含路径)
|
||||||
|
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
|
||||||
|
|
||||||
|
// 构建来源字符串的辅助宏
|
||||||
|
#define __LOG_SOURCE__ (QString(__FILENAME__) + "." + QString(__FUNCTION__))
|
||||||
|
|
||||||
|
// 日志宏,格式:[文件名.函数名] 消息
|
||||||
|
|
||||||
|
#define LOG_DEBUG() \
|
||||||
|
qDebug() << "[" << "SYSTEM" << "DEBUG" << __LOG_SOURCE__ << "[" << __FILENAME__ << "." << __FUNCTION__ << "]"
|
||||||
|
|
||||||
|
#define LOG_ERROR() \
|
||||||
|
qCritical() << "[" << "SYSTEM" << "ERROR" << __LOG_SOURCE__ << "[" << __FILENAME__ << "." << __FUNCTION__ << "]"
|
||||||
|
|
||||||
|
#define LOG_INFO() \
|
||||||
|
qInfo() << "[" << "SYSTEM" << "INFO" << __LOG_SOURCE__ << "[" << __FILENAME__ << "." << __FUNCTION__ << "]"
|
||||||
|
|
||||||
|
#define LOG_WARNING() \
|
||||||
|
qWarning() << "[" << "SYSTEM" << "WARNING" << __LOG_SOURCE__ << "[" << __FILENAME__ << "." << __FUNCTION__ << "]"
|
||||||
|
|
||||||
|
#endif // LOGGING_H
|
||||||
|
|
||||||
Reference in New Issue
Block a user