Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,9 @@ install-misc:
#Need to copy cpp-include/eventlogger.hpp to /usr/include
mkdir -pv ${DESTDIR}${CPP_INCLUDE_DIR}/dde-api
cp -R cpp-include/eventlogger.hpp ${DESTDIR}${CPP_INCLUDE_DIR}/dde-api
#Install cmake config for find_package(DdeApi)
mkdir -pv ${DESTDIR}${PREFIX}/share/cmake/DDEAPI
cp -R cmake/DDEAPI/DDEAPIConfig.cmake ${DESTDIR}${PREFIX}/share/cmake/DDEAPI

install-dev: ${addprefix install/lib/, ${ININSTALLS}}

Expand Down
25 changes: 25 additions & 0 deletions cmake/DDEAPI/DDEAPIConfig.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: LGPL-3.0-or-later

# DdeApiConfig.cmake
# Provides DdeApi::EventLogger imported target (header-only)
#
# Usage:
# find_package(DdeApi QUIET)
# if(DdeApi_FOUND)
# target_link_libraries(myapp PRIVATE DdeApi::EventLogger)
# endif()

include_guard(GLOBAL)

set(DDE_API_INCLUDE_DIRS "/usr/include")

if(NOT TARGET DDEAPI::EventLogger)
add_library(DDEAPI::EventLogger INTERFACE IMPORTED)
set_target_properties(DDEAPI::EventLogger PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${DDE_API_INCLUDE_DIRS}"
)
endif()

set(DdeApi_FOUND TRUE)
73 changes: 25 additions & 48 deletions cpp-include/eventlogger.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,23 @@
#include <QJsonDocument>
#include <QJsonObject>
#include <QLibrary>
#include <DSGApplication>
#include <DSysInfo>

#include <mutex>

#include <dlfcn.h>
#include <unistd.h>

// Enable logging for current system version (debug only, remove before release)
// #define DDE_EVENTLOG_DEBUG_ENABLE_CURRENT_VERSION

namespace DDE_EventLogger {

// Check if event logging should be enabled based on system edition
// Only UosProfessional is enabled by default
inline bool shouldEnableEventLog()
{
#ifdef DDE_EVENTLOG_DEBUG_ENABLE_CURRENT_VERSION
// Debug mode: enable for current system version
return true;
#else
// Production mode: only enable for UosProfessional edition
// Note: DSysInfo is in Dtk::Core namespace
return Dtk::Core::DSysInfo::uosEditionType() == Dtk::Core::DSysInfo::UosProfessional;
#endif
}

typedef bool (*Initialize)(const std::string &package_id, bool enable_sig);
Expand All @@ -40,16 +33,16 @@ typedef struct _EventLoggerData
{
qint64 tid;
QString target;
QMap<QString, QString> message;
QJsonObject message;

_EventLoggerData()
: tid(0)
, target(QString())
, message(QMap<QString, QString>())
, message(QJsonObject())
{
}

_EventLoggerData(qint64 tid, const QString &target, const QMap<QString, QString> &message)
_EventLoggerData(qint64 tid, const QString &target, const QJsonObject &message)
: tid(tid)
, target(target)
, message(message)
Expand Down Expand Up @@ -81,6 +74,9 @@ class EventLogger
}

std::lock_guard<std::mutex> lock(m_mutex);
if (!m_initialized) {
doInit(QString::fromUtf8(Dtk::Core::DSGApplication::id()), false);
}
if (!m_initialized) {
return;
}
Expand All @@ -89,35 +85,6 @@ class EventLogger
m_writeEventLog(json.toJson(QJsonDocument::Compact).toStdString());
}

void writeEventLog(qint64 tid, const QString &target, const QString &key, const QString &value)
{
writeEventLog(EventLoggerData(tid, target, {{key, value}}));
}

bool init(QString package_id, bool enable_sig)
{
if (!shouldEnableEventLog()) {
return false;
}

std::lock_guard<std::mutex> lock(m_mutex);

if (nullptr == m_initialize || nullptr == m_writeEventLog) {
return false;
}

if (m_initialized) {
return true;
}

m_initialized = m_initialize(package_id.toStdString(), enable_sig);
if (!m_initialized) {
qDebug() << "Failed to initialize event logger";
return false;
}
return true;
}

private:
EventLogger()
: m_initialized(false)
Expand Down Expand Up @@ -147,20 +114,30 @@ class EventLogger
EventLogger(const EventLogger &) = delete; // 禁止拷贝构造函数
EventLogger &operator=(const EventLogger &) = delete; // 禁止赋值运算符

bool doInit(const QString &package_id, bool enable_sig)
{
if (nullptr == m_initialize || nullptr == m_writeEventLog) {
return false;
}

if (m_initialized) {
return true;
}

m_initialized = m_initialize(package_id.toStdString(), enable_sig);
if (!m_initialized) {
qDebug() << "Failed to initialize event logger";
}
return m_initialized;
}

// 将结构体转换为 JSON 内容
QJsonDocument structToJson(const EventLoggerData &data)
{
QJsonObject jsonObject;
jsonObject["tid"] = data.tid;
jsonObject["target"] = data.target;
QJsonObject msgJson;
QMapIterator<QString, QString> iterator(data.message);
while (iterator.hasNext()) {
iterator.next();
msgJson[iterator.key()] = iterator.value();
}

jsonObject["message"] = msgJson;
jsonObject["message"] = data.message;
QJsonDocument jsonDocument(jsonObject);
return jsonDocument;
}
Expand Down
1 change: 1 addition & 0 deletions debian/dde-api-dev.install
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/usr/share/gocode/
/usr/include/
/usr/share/cmake/DDEAPI/
Loading