From f01d166b3c0b4f2bdc90b5313fc9a0867cdf1e74 Mon Sep 17 00:00:00 2001 From: dmchen Date: Tue, 10 Sep 2024 03:40:38 +0000 Subject: [PATCH] enh/TD-31977-monitor-qid --- include/libs/audit/audit.h | 1 + include/libs/monitor/monitor.h | 1 + include/util/tuuid.h | 11 +++++++++++ source/dnode/mgmt/node_mgmt/src/dmNodes.c | 6 ++++++ source/dnode/mgmt/node_util/inc/dmUtil.h | 1 + source/dnode/mgmt/node_util/src/dmUtil.c | 2 ++ source/libs/audit/inc/auditInt.h | 1 + source/libs/audit/src/auditMain.c | 2 ++ source/libs/monitor/inc/monInt.h | 1 + source/libs/monitor/src/monFramework.c | 7 +++++-- source/libs/monitor/src/monMain.c | 18 ++++++++++++++---- source/util/src/tuuid.c | 15 +++++++++++++++ 12 files changed, 60 insertions(+), 6 deletions(-) diff --git a/include/libs/audit/audit.h b/include/libs/audit/audit.h index 4fa69f1b4f..1af8093fcf 100644 --- a/include/libs/audit/audit.h +++ b/include/libs/audit/audit.h @@ -49,6 +49,7 @@ typedef struct { } SAuditRecord; int32_t auditInit(const SAuditCfg *pCfg); +void auditOpen(int32_t dnodeId); void auditCleanup(); int32_t auditSend(SJson *pJson); void auditRecord(SRpcMsg *pReq, int64_t clusterId, char *operation, char *target1, char *target2, diff --git a/include/libs/monitor/monitor.h b/include/libs/monitor/monitor.h index 96ac53ef4e..b64cf223be 100644 --- a/include/libs/monitor/monitor.h +++ b/include/libs/monitor/monitor.h @@ -218,6 +218,7 @@ typedef struct { } SDmNotifyHandle; int32_t monInit(const SMonCfg *pCfg); +void monOpen(int32_t dnodeId); void monInitVnode(); void monCleanup(); void monRecordLog(int64_t ts, ELogLevel level, const char *content); diff --git a/include/util/tuuid.h b/include/util/tuuid.h index 315c2ad497..a4e1059371 100644 --- a/include/util/tuuid.h +++ b/include/util/tuuid.h @@ -37,3 +37,14 @@ int32_t tGenIdPI32(void); * @return */ int64_t tGenIdPI64(void); + +/** + * Generate an qid + *+------------+-----+-----------+---------------+ + *| nodeid| 0| serial number | 0 | + *+------------+-----+-----------+---------------+ + *| 8bit | 16bit|32bit |8bit | + *+------------+-----+-----------+---------------+ + * @return + */ +int64_t tGenQid64(int8_t dnodeId); diff --git a/source/dnode/mgmt/node_mgmt/src/dmNodes.c b/source/dnode/mgmt/node_mgmt/src/dmNodes.c index 38bd9f6b92..84a6ba0399 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmNodes.c +++ b/source/dnode/mgmt/node_mgmt/src/dmNodes.c @@ -15,6 +15,9 @@ #define _DEFAULT_SOURCE #include "dmMgmt.h" +#include "dmUtil.h" +#include "monitor.h" +#include "audit.h" int32_t dmOpenNode(SMgmtWrapper *pWrapper) { int32_t code = 0; @@ -98,6 +101,9 @@ static int32_t dmOpenNodes(SDnode *pDnode) { } } + auditOpen(dmGetDnodeId(&pDnode->data)); + monOpen(dmGetDnodeId(&pDnode->data)); + dmSetStatus(pDnode, DND_STAT_RUNNING); return 0; } diff --git a/source/dnode/mgmt/node_util/inc/dmUtil.h b/source/dnode/mgmt/node_util/inc/dmUtil.h index 425f10392f..b5842acbad 100644 --- a/source/dnode/mgmt/node_util/inc/dmUtil.h +++ b/source/dnode/mgmt/node_util/inc/dmUtil.h @@ -217,6 +217,7 @@ int32_t dmInitDndInfo(SDnodeData *pData); // dmEps.c int32_t dmGetDnodeSize(SDnodeData *pData); +int32_t dmGetDnodeId(SDnodeData *pData); int32_t dmReadEps(SDnodeData *pData); int32_t dmWriteEps(SDnodeData *pData); void dmUpdateEps(SDnodeData *pData, SArray *pDnodeEps); diff --git a/source/dnode/mgmt/node_util/src/dmUtil.c b/source/dnode/mgmt/node_util/src/dmUtil.c index 68f4c9d0ff..13096d7cb8 100644 --- a/source/dnode/mgmt/node_util/src/dmUtil.c +++ b/source/dnode/mgmt/node_util/src/dmUtil.c @@ -66,3 +66,5 @@ void dmGetMonitorSystemInfo(SMonSysInfo *pInfo) { taosGetCardInfoDelta(&pInfo->net_in, &pInfo->net_out); taosGetProcIODelta(&pInfo->io_read, &pInfo->io_write, &pInfo->io_read_disk, &pInfo->io_write_disk); } + +int32_t dmGetDnodeId(SDnodeData *pData) { return pData->dnodeId; } \ No newline at end of file diff --git a/source/libs/audit/inc/auditInt.h b/source/libs/audit/inc/auditInt.h index e5fed2e473..7af48e3d41 100644 --- a/source/libs/audit/inc/auditInt.h +++ b/source/libs/audit/inc/auditInt.h @@ -23,6 +23,7 @@ typedef struct { SAuditCfg cfg; SArray *records; TdThreadMutex lock; + int32_t dnodeId; } SAudit; #endif /*_TD_AUDIT_INT_H_*/ diff --git a/source/libs/audit/src/auditMain.c b/source/libs/audit/src/auditMain.c index cdc4a964c7..2b1b0e648d 100644 --- a/source/libs/audit/src/auditMain.c +++ b/source/libs/audit/src/auditMain.c @@ -36,6 +36,8 @@ int32_t auditInit(const SAuditCfg *pCfg) { return taosThreadMutexInit(&tsAudit.lock, NULL); } +void auditOpen(int32_t dnodeId) { tsAudit.dnodeId = dnodeId; } + static FORCE_INLINE void auditDeleteRecord(SAuditRecord * record) { if (record) { taosMemoryFree(record->detail); diff --git a/source/libs/monitor/inc/monInt.h b/source/libs/monitor/inc/monInt.h index 7fc718393b..e7d2552e57 100644 --- a/source/libs/monitor/inc/monInt.h +++ b/source/libs/monitor/inc/monInt.h @@ -47,6 +47,7 @@ typedef struct { SMonQmInfo qmInfo; SMonBmInfo bmInfo; SHashObj *metrics; + int32_t dnodeId; } SMonitor; void monGenClusterInfoTable(SMonInfo *pMonitor); diff --git a/source/libs/monitor/src/monFramework.c b/source/libs/monitor/src/monFramework.c index c3b63787a6..fe32754160 100644 --- a/source/libs/monitor/src/monFramework.c +++ b/source/libs/monitor/src/monFramework.c @@ -767,9 +767,12 @@ void monSendPromReport() { } if (pCont != NULL) { EHttpCompFlag flag = tsMonitor.cfg.comp ? HTTP_GZIP : HTTP_FLAT; - if (taosSendHttpReport(tsMonitor.cfg.server, tsMonFwUri, tsMonitor.cfg.port, pCont, strlen(pCont), flag) != 0) { + char tmp[100] = {0}; + (void)sprintf(tmp, "%s?qid=%" PRId64, tsMonFwUri, tGenQid64(tsMonitor.dnodeId)); + uDebug("report cont to %s", tmp); + if (taosSendHttpReport(tsMonitor.cfg.server, tmp, tsMonitor.cfg.port, pCont, strlen(pCont), flag) != 0) { uError("failed to send monitor msg"); - }else{ + } else { (void)taos_collector_registry_clear_batch(TAOS_COLLECTOR_REGISTRY_DEFAULT); } taosMemoryFreeClear(pCont); diff --git a/source/libs/monitor/src/monMain.c b/source/libs/monitor/src/monMain.c index 14d62fbf0e..84d0806c4f 100644 --- a/source/libs/monitor/src/monMain.c +++ b/source/libs/monitor/src/monMain.c @@ -131,6 +131,8 @@ int32_t monInit(const SMonCfg *pCfg) { return 0; } +void monOpen(int32_t dnodeId) { tsMonitor.dnodeId = dnodeId; } + void monInitVnode() { if (!tsEnableMonitor || tsMonitorFqdn[0] == 0 || tsMonitorPort == 0) return; if (tsInsertCounter == NULL) { @@ -599,7 +601,10 @@ void monSendReport(SMonInfo *pMonitor) { } if (pCont != NULL) { EHttpCompFlag flag = tsMonitor.cfg.comp ? HTTP_GZIP : HTTP_FLAT; - if (taosSendHttpReport(tsMonitor.cfg.server, tsMonUri, tsMonitor.cfg.port, pCont, strlen(pCont), flag) != 0) { + char tmp[100] = {0}; + (void)sprintf(tmp, "%s?qid=%" PRId64, tsMonUri, tGenQid64(tsMonitor.dnodeId)); + uDebug("report cont to %s", tmp); + if (taosSendHttpReport(tsMonitor.cfg.server, tmp, tsMonitor.cfg.port, pCont, strlen(pCont), flag) != 0) { uError("failed to send monitor msg"); } taosMemoryFree(pCont); @@ -617,8 +622,10 @@ void monSendReportBasic(SMonInfo *pMonitor) { } if (pCont != NULL) { EHttpCompFlag flag = tsMonitor.cfg.comp ? HTTP_GZIP : HTTP_FLAT; - if (taosSendHttpReport(tsMonitor.cfg.server, tsMonFwBasicUri, tsMonitor.cfg.port, pCont, strlen(pCont), flag) != - 0) { + char tmp[100] = {0}; + (void)sprintf(tmp, "%s?qid=%" PRId64, tsMonFwBasicUri, tGenQid64(tsMonitor.dnodeId)); + uDebug("report cont basic to %s", tmp); + if (taosSendHttpReport(tsMonitor.cfg.server, tmp, tsMonitor.cfg.port, pCont, strlen(pCont), flag) != 0) { uError("failed to send monitor msg"); } taosMemoryFree(pCont); @@ -669,8 +676,11 @@ void monSendContent(char *pCont, const char *uri) { } } if (pCont != NULL) { + char tmp[100] = {0}; + (void)sprintf(tmp, "%s?qid=%" PRId64, uri, tGenQid64(tsMonitor.dnodeId)); + uInfoL("report client cont to %s", tmp); EHttpCompFlag flag = tsMonitor.cfg.comp ? HTTP_GZIP : HTTP_FLAT; - if (taosSendHttpReport(tsMonitor.cfg.server, uri, tsMonitor.cfg.port, pCont, strlen(pCont), flag) != 0) { + if (taosSendHttpReport(tsMonitor.cfg.server, tmp, tsMonitor.cfg.port, pCont, strlen(pCont), flag) != 0) { uError("failed to send monitor msg"); } } diff --git a/source/util/src/tuuid.c b/source/util/src/tuuid.c index 9d749cc002..4472189d37 100644 --- a/source/util/src/tuuid.c +++ b/source/util/src/tuuid.c @@ -65,3 +65,18 @@ int64_t tGenIdPI64(void) { return id; } + +int64_t tGenQid64(int8_t dnodeId) { + int64_t id = dnodeId; + + while (true) { + int32_t val = atomic_add_fetch_32(&tUUIDSerialNo, 1); + + id = (id << 56) | (val & 0xFFFFF) << 8; + if (id) { + break; + } + } + + return id; +} \ No newline at end of file