소스 검색

!3 合并jslog

chenliangyu 1 년 전
부모
커밋
db6684e2cc
36개의 변경된 파일462개의 추가작업 그리고 137개의 파일을 삭제
  1. 1 0
      DevAdapter/self/dep/liblog4vendor/liblog4vendor/log4upload.h
  2. 1 1
      Framework/Common/IHttpFunc.h
  3. 8 5
      Framework/Common/SpBase.h
  4. 1 1
      Framework/Common/SpSecureClient.h
  5. 3 1
      Framework/Common/log_define.h
  6. 8 2
      Framework/RVCComm/HTTPClient.cpp
  7. 3 3
      Framework/RvcLogSdk/log_api.cpp
  8. 1 1
      Framework/RvcLogSdk/log_api.h
  9. 103 29
      Framework/RvcLogSdk/log_builder.cpp
  10. 1 1
      Framework/RvcLogSdk/log_builder.h
  11. 13 7
      Framework/RvcLogSdk/log_db.cpp
  12. 9 0
      Framework/RvcLogSdk/log_producer_config.c
  13. 3 1
      Framework/RvcLogSdk/log_producer_config.h
  14. 2 1
      Framework/RvcLogSdk/log_producer_manager.c
  15. 11 3
      Framework/RvcLogSdk/log_producer_sender.c
  16. 2 2
      Framework/RvcRestfulSdk/RestfulFunc.h
  17. 5 4
      Framework/RvcRestfulSdk/RestfulFuncImpl.cpp
  18. 5 6
      Framework/spbase/SpBase.cpp
  19. 3 1
      Framework/spbase/SpEntityPrivilege.cpp
  20. 2 1
      Framework/spbase/SpEntityPrivilege.h
  21. 9 4
      Framework/spbase/SpSecureClient.cpp
  22. 3 5
      Framework/spbase/sp_cfg.cpp
  23. 2 9
      Framework/spbase/sp_httpDefine.cpp
  24. 0 5
      Framework/spbase/sp_httpDefine.h
  25. 39 8
      Framework/spbase/sp_logwithlink.cpp
  26. 1 1
      Framework/sphost/SpHostLog.cpp
  27. 2 1
      Framework/spshell/app.cpp
  28. 6 4
      Framework/spshell/svc.cpp
  29. 0 3
      Module/mod_chromium/CModTools.cpp
  30. 60 9
      Module/mod_chromium/CWebsocketServer.cpp
  31. 127 2
      Module/mod_chromium/MessageType.h
  32. 17 11
      Module/mod_vtmloader/VtmLoaderFSM.cpp
  33. 6 3
      Other/libRestfulFunc/RestfulFunc.h
  34. 3 2
      Other/libRestfulFunc/RestfulFuncImpl.cpp
  35. 1 0
      Other/liblog4rvcother/log4upload.h
  36. 1 0
      Other/liblog4vendor/log4upload.h

+ 1 - 0
DevAdapter/self/dep/liblog4vendor/liblog4vendor/log4upload.h

@@ -49,6 +49,7 @@ struct log_producer_config
     char* beidou_topic;
     char* business_user_topic;
     char* business_sys_topic;
+    char* vtmweb_topic;
 
     int32_t sendThreadCount;
 

+ 1 - 1
Framework/Common/IHttpFunc.h

@@ -98,7 +98,7 @@ public:
 
 typedef void (*LogFnCallback)(const char*);
 RVCCOMM_API IHttpFunc* create_http(LogFnCallback oLogger);
-typedef void (*GetTokenCallBack)(std::string &, std::string &);
+typedef void (*GetTokenCallBack)(std::string &, std::string &, std::string&, std::string&);
 RVCCOMM_API void SetTokenCallBack(GetTokenCallBack t_callBack);
 
 #endif

+ 8 - 5
Framework/Common/SpBase.h

@@ -1154,7 +1154,8 @@ struct IEntityFunctionPrivilege
     virtual ErrorCodeEnum GetEntityPriority(const char* pszEntityName, EntityPriorityEnum& nPriority) = 0;
 	
 		/*begin log sender*/
-	virtual ErrorCodeEnum BeginLogSend(const char* endpoint, const char* topicSys, const char* topicUser, const char* topicBeidou, const char* bussSys, const char* bussUser) = 0;
+	virtual ErrorCodeEnum BeginLogSend(const char* endpoint, const char* topicSys, const char* topicUser, const char* topicBeidou
+		, const char* bussSys, const char* bussUser, const char* vtmWeb) = 0;
 	/*update token*/
 	virtual ErrorCodeEnum SetHttpToken(const char* channelId, const char* token) = 0;
 
@@ -1563,6 +1564,8 @@ public:
 	DbgToBeidou& setCallStack(CSimpleStringA t_callStack);//调用堆栈,格式("callStack":[{“xxx”:"xx","xxxx":sdfs}])
 	DbgToBeidou& setDbStack(CSimpleStringA t_dbStack);//格式("dbStack":[{“xxxxx”:"xxdfsdfs","xxddddxx":sdsddsdfs}])
 	DbgToBeidou& setTags(CSimpleStringA t_Tags);
+	DbgToBeidou& set_deployUnitId(CSimpleString t_deployUnitId);
+	DbgToBeidou& set_serviceUnitId(CSimpleString t_serviceUnitId);
 	DbgToBeidou& withLogProducer(void* t_logProducer);
 	void operator () ()  const;
 private:
@@ -1622,11 +1625,11 @@ private:
 	static int m_saveFile;
 };
 
-//创建日志存储模块,通常由sphost自动创建,不需要实体创建
-SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleStringA item, CSimpleStringA filePath);
+//创建日志存储模块,通常由sphost自动创建,不需要实体创建, CmptId, CmptName一般使用默认值
+SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleStringA item, CSimpleStringA filePath, CSimpleStringA CmptId, CSimpleString CmptName);
 SPBASE_API void destroy_log_producer_storage(void* obj);
 //创建日志上传模块,通常由spshell自动创建,然后上传
-SPBASE_API void* create_log_producer_send(CSimpleStringA endpoint, CSimpleStringA topicSys, CSimpleStringA topicUser, CSimpleStringA topicBeidou, CSimpleStringA bussinessSys, CSimpleStringA bussinessUser,
+SPBASE_API void* create_log_producer_send(CSimpleStringA endpoint, CSimpleStringA topicSys, CSimpleStringA topicUser, CSimpleStringA topicBeidou, CSimpleStringA bussinessSys, CSimpleStringA bussinessUser, CSimpleStringA topicVTMWeb,
 	CSimpleStringA terminalNo, CSimpleStringA sn, CSimpleStringA filePath, int sendWaitTime);
 SPBASE_API void destroy_log_producer_send();
 //创建实体日志默认上传模块, SpShell 和 SpRun 中调用,内部调用 create_log_producer_storage
@@ -1669,7 +1672,7 @@ SPBASE_API const char *_GetFileName(const char *pszFilePath);
 (4)此方式为临时方案,使用策略模式,封装了算法SpGetToken(),通过函数传递的方式将该策略注入到类HttpClientRequestConfig中
 */
 #define MAX_TOKEN_LEN 256
-SPBASE_API void SpGetToken(char* channelId, char* token);
+SPBASE_API void SpGetToken(char* channelId, char* token, char* terminalno, char* reserve1);
 #endif
 
 #ifdef RVC_OS_WIN //TODO: duplicate ?

+ 1 - 1
Framework/Common/SpSecureClient.h

@@ -105,7 +105,7 @@ private:
 	friend struct OnDisconnectTask;
 	friend struct OnErrorTask;
 };
-void getHttpToken(std::string &channelId, std::string &token);
+void getHttpToken(std::string& channelId, std::string& token, std::string& terminalNo, std::string& reserve1);
 
 
 

+ 3 - 1
Framework/Common/log_define.h

@@ -30,7 +30,7 @@ typedef struct _post_log_result post_log_result;
 
 
 typedef enum {
-    LOG_TYPE_SYSTEM = 0/*系统日志*/, LOG_TYPE_USER = 1/*用户日志*/, LOG_TYPE_BUSINESS_SYSTEM = 2, LOG_TYPE_BUSINESS_USER = 3
+    LOG_TYPE_SYSTEM = 0/*系统日志*/, LOG_TYPE_USER = 1/*用户日志*/, LOG_TYPE_BUSINESS_SYSTEM = 2, LOG_TYPE_BUSINESS_USER = 3, LOG_TYPE_VTMWEB = 4
 }LOG_TYPE_E;
 
 typedef enum {
@@ -92,6 +92,8 @@ typedef struct _beidou_log_item {
     char* CallStack;
     char* DbStack;
     char* Tags;
+    char* deployUnitId;
+    char* serviceUnitId;
 }beidou_log_item;
 
 #endif

+ 8 - 2
Framework/RVCComm/HTTPClient.cpp

@@ -1567,11 +1567,14 @@ const bool CHTTPClient::Get(CHTTPReq &req, CHTTPRet &ret){
 	{
 		std::string channelId = "";
 		std::string token = "";
-		g_tokenCall(channelId, token);
+		std::string terminalno = "";
+		std::string reserve1 = "";
+		g_tokenCall(channelId, token, terminalno, reserve1);
 		if (channelId.length() != 0 && token.length() != 0)
 		{
 			req.m_headers.emplace(std::make_pair("channelId", channelId));
 			req.m_headers.emplace(std::make_pair("token", token));
+			req.m_headers.emplace(std::make_pair("terminalno", terminalno));
 			string out = "channelId:" + channelId + ", token:" + token;
 			if (req.m_printDbg)
 				m_oLog(out.c_str());
@@ -1695,11 +1698,14 @@ const bool CHTTPClient::Post(CHTTPReq &req, CHTTPRet &ret){
 	{
 		std::string channelId = "";
 		std::string token = "";
-		g_tokenCall(channelId, token);
+		std::string terminalno = "";
+		std::string reserve1 = "";
+		g_tokenCall(channelId, token, terminalno, reserve1);
 		if (channelId.length() != 0 && token.length() != 0)
 		{
 			req.m_headers.emplace(std::make_pair("channelId", channelId));
 			req.m_headers.emplace(std::make_pair("token", token));
+			req.m_headers.emplace(std::make_pair("terminalno", terminalno));
 			string out = "channelId:" + channelId + ", token:" + token;
 			if (req.m_printDbg)
 				m_oLog(out.c_str());

+ 3 - 3
Framework/RvcLogSdk/log_api.cpp

@@ -204,7 +204,7 @@ int LOG_OS_HttpPost(const char* url,
 	char** header_array,
 	int header_count,
 	const void* data,
-	int data_len, const char* channelId, const char* token)
+	int data_len, const char* channelId, const char* token, const char* terminalno, const char* reserve1)
 {
 	int retCode = 480;
 	HttpClientResponseResult result;
@@ -402,7 +402,7 @@ void cur_slist_free_all(struct cur_slist *lst)
 }
 
 post_log_result* post_logs(const char* endpoint, const char* accesskeyId, const char* accessKey, const char* stsToken, lz4_log_buf* buffer, log_post_option* option,
-	const char* channelId, const char* token)
+	const char* channelId, const char* token, const char *terminalno, const char *reserve1)
 {
     post_log_result * result = (post_log_result *)malloc(sizeof(post_log_result));
     memset(result, 0, sizeof(post_log_result));
@@ -424,7 +424,7 @@ post_log_result* post_logs(const char* endpoint, const char* accesskeyId, const
         url = sdscat(url, endpoint);
         
         if(buffer->data != NULL && buffer->length != 0)
-			res = LOG_OS_HttpPost(url, header_array, header_count, (const void *) buffer->data, buffer->length, channelId, token);
+			res = LOG_OS_HttpPost(url, header_array, header_count, (const void *) buffer->data, buffer->length, channelId, token, terminalno, reserve1);
 
         result->statusCode = res;
 

+ 1 - 1
Framework/RvcLogSdk/log_api.h

@@ -25,7 +25,7 @@ log_status_t sls_log_init(int32_t log_global_flag);
 void sls_log_destroy();
 
 post_log_result * post_logs(const char *endpoint, const char * accesskeyId, const char *accessKey, const char *stsToken, lz4_log_buf* buffer, log_post_option * option,
-	const char *channelId, const char* token);
+	const char *channelId, const char* token, const char* terminalno, const char* reserve1);
 
 void post_log_result_destroy(post_log_result * result);
 

+ 103 - 29
Framework/RvcLogSdk/log_builder.c → Framework/RvcLogSdk/log_builder.cpp

@@ -5,6 +5,7 @@
 #include "cJSON.h"
 #include <stdlib.h>
 #include "inner_log.h"
+#include <lz4.h>
 
 /**
  * adjust buffer, this function will ensure tag's buffer size >= tag->now_buffer_len + new_len
@@ -107,8 +108,6 @@ int add_beidou_log(log_group_builder* bder, beidou_log_item* log) {
     
     
     */
-
-    //统一日志
     {
 
         cJSON_AddItemToObject(united_content, "businessId", cJSON_CreateString(log->BussID));
@@ -116,8 +115,15 @@ int add_beidou_log(log_group_builder* bder, beidou_log_item* log) {
         cJSON_AddItemToObject(united_content, "parentSpanId", cJSON_CreateString(log->ParentSpanId));
         cJSON_AddItemToObject(united_content, "spanId", cJSON_CreateString(log->SpanId));
         cJSON_AddItemToObject(united_content, "timestamp", cJSON_CreateString(nowTime));
-        cJSON_AddItemToObject(united_content, "deployUnitId", cJSON_CreateString(bder->config->unitedDeployUnitId));
-        cJSON_AddItemToObject(united_content, "serviceUnitId", cJSON_CreateString(bder->config->unitedServiceUnitId));
+        if(log->deployUnitId != NULL)
+            cJSON_AddItemToObject(united_content, "deployUnitId", cJSON_CreateString(log->deployUnitId));
+        else
+            cJSON_AddItemToObject(united_content, "deployUnitId", cJSON_CreateString(bder->config->unitedDeployUnitId));
+        if(log->serviceUnitId != NULL)
+            cJSON_AddItemToObject(united_content, "serviceUnitId", cJSON_CreateString(log->serviceUnitId));
+        else
+            cJSON_AddItemToObject(united_content, "serviceUnitId", cJSON_CreateString(bder->config->unitedServiceUnitId));
+
         if (log->Host != NULL) {
             cJSON_AddItemToObject(united_content, "host", cJSON_CreateString(log->Host));
         }
@@ -179,7 +185,7 @@ int add_beidou_log(log_group_builder* bder, beidou_log_item* log) {
     bder->loggroup_size += totalBufferSize;
     grp_log->buffer_len = totalBufferSize;
     grp_log->type = LOG_TYPE_BEIDOU;
-    grp_log->level = 0;
+    grp_log->level = (LOG_LEVEL_E)0;
     ++bder->grp->n_logs;
 
     //delete
@@ -234,7 +240,7 @@ int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_i
         cJSON_AddItemToObject(skyeye_content, "CmptId", cJSON_CreateString(bder->config->skyeyeCmptId));
         cJSON_AddItemToObject(skyeye_content, "CmptName", cJSON_CreateString(bder->config->skyeyeCmptName));
         //日志数�信�
-        if (log->Type == LOG_TYPE_USER || log->Type == LOG_TYPE_BUSINESS_USER) {
+        if (log->Type == LOG_TYPE_USER || log->Type == LOG_TYPE_BUSINESS_USER || log->Type == LOG_TYPE_VTMWEB) {
             if (log->Level == LOG_LEVEL_DEBUG) {
                 cJSON_AddItemToObject(skyeye_content, "LogFile", cJSON_CreateString("UD"));
                 cJSON_AddItemToObject(meta_log_content, "baseLogType", cJSON_CreateString("DEBUG"));
@@ -397,7 +403,11 @@ int add_log(log_group_builder* bder, long start_time, uint32_t pack_index, log_i
         grp_log->type = LOG_TYPE_SYS_BUSINESS;
     } else if (log->Type == LOG_TYPE_BUSINESS_USER) {
         grp_log->type = LOG_TYPE_USER_BUSINESS;
-    } else {
+    }
+    else if (log->Type == LOG_TYPE_VTMWEB) {
+        grp_log->type = LOG_TYPE_WEBSDK;
+    }
+    else {
         grp_log->type = LOG_TYPE_SYS_SKYEYE;
     }
     grp_log->level = log->Level;
@@ -555,6 +565,8 @@ static uint32_t _log_pack(log_group_builder* bder, log_buf* buf)
         cJSON_AddItemToObject(pack_content, "topic", cJSON_CreateString(bder->config->business_user_topic));
     else if (bder->grp->logs[0].type == LOG_TYPE_SYS_BUSINESS)
         cJSON_AddItemToObject(pack_content, "topic", cJSON_CreateString(bder->config->business_sys_topic));
+    else if (bder->grp->logs[0].type == LOG_TYPE_WEBSDK)
+        cJSON_AddItemToObject(pack_content, "topic", cJSON_CreateString(bder->config->vtmweb_topic));
    
     for (i = 0; i < bder->grp->n_logs; i++) {
         if (bder->grp->logs[i].buffer != NULL && (bder->grp->logs[0].type == LOG_TYPE_BEIDOU || bder->grp->logs[i].check))
@@ -660,21 +672,32 @@ void clear_errJson_msg(log_group_builder* bder)
     }
 }
 
+char* replace_string(char* dstStr, char* src, char* strto) {
+    char* start_pos = strstr(dstStr, src);
+    if (start_pos != NULL) {
+        int src_len = strlen(src);
+        int strto_len = strlen(strto);
+        memmove(start_pos + strto_len, start_pos + src_len, strlen(start_pos + src_len) + 1);
+        memcpy(start_pos, strto, strto_len);
+    }
+    return dstStr;
+}
+
 void add_log_terminal_no(log_group_builder* bder, char* no) {
 
     int32_t totalBufferSize;
     build_item* grp_log;
     char* str_message_content;
     int i, changed = 0;
-    cJSON* message_content = NULL;
 
     for (i = 0; i < bder->grp->n_logs; i++) {
         if (bder->grp->logs[i].buffer != NULL)
         {
-            cJSON* message_content = cJSON_Parse(bder->grp->logs[i].buffer);
-            if (message_content == NULL)
-                continue;//�完整json
-            if (bder->grp->logs[i].type != LOG_TYPE_BEIDOU) {
+            if (bder->grp->logs[i].type != LOG_TYPE_BEIDOU)// not beidou logs
+            {
+                cJSON* message_content = cJSON_Parse(bder->grp->logs[i].buffer);
+                if (message_content == NULL)
+                    continue;
                 cJSON* content = NULL;
                 cJSON* log = cJSON_GetObjectItem(message_content, "log");
                 if (log == NULL)
@@ -691,8 +714,74 @@ void add_log_terminal_no(log_group_builder* bder, char* no) {
                         changed = 1;
                     }
                 }
+
+                if (changed) {
+                    str_message_content = cJSON_PrintUnformatted(message_content);
+                    totalBufferSize = strlen(str_message_content) + 1;
+                    grp_log = &(bder->grp->logs[i]);
+                    if (grp_log->buffer == NULL || grp_log->buffer_len < totalBufferSize)
+                    {
+                        _adjust_buffer(grp_log, totalBufferSize);
+                    }
+                    memcpy(grp_log->buffer, str_message_content, totalBufferSize);
+                    bder->loggroup_size -= grp_log->buffer_len;
+                    bder->loggroup_size += totalBufferSize;
+                    grp_log->buffer_len = totalBufferSize;
+                    cJSON_free(str_message_content);
+                }
+
+                //delete
+                cJSON_Delete(message_content);
+
             }
             else {
+                grp_log = &(bder->grp->logs[i]);
+                char src[MAX_PATH] = "\"tags\":{}";
+                char to[MAX_PATH] = "";
+                char replaceLog[3000] = "";
+
+                sprintf(to, "\"tags\":{\"TerminalNo\":\"%s\"}", no);
+                memcpy(replaceLog, grp_log->buffer, grp_log->buffer_len + 1);
+                replace_string(replaceLog, src, to);
+
+                if (strlen(replaceLog) > grp_log->buffer_len)
+                {
+                    _adjust_buffer(grp_log, strlen(replaceLog) + 1);
+                    memcpy(grp_log->buffer, replaceLog, strlen(replaceLog) + 1);
+                    bder->loggroup_size -= grp_log->buffer_len;
+                    bder->loggroup_size += strlen(replaceLog) + 1;
+                    grp_log->buffer_len = strlen(replaceLog) + 1;
+                }
+
+
+                /*
+                std::string dstStr = grp_log->buffer;
+                std::string src = R"("tags":{})";
+                char to[MAX_PATH] = "";
+                sprintf(to, R"("tags":{"TerminalNo":"%s"})", no);
+                std::string strto = to;
+
+                //std::string result = std::regex_replace(dstStr, std::regex(src), strto);
+                size_t start_pos = 0;
+                while ((start_pos = dstStr.find(src, start_pos)) != std::string::npos) {
+                    dstStr.replace(start_pos, src.length(), strto);
+                    start_pos += strto.length(); // ·ÀÖ¹ÎÞÏÞÑ­»·
+                    break;
+                }
+                auto result = dstStr;
+                if (result.length() > grp_log->buffer_len)
+                {
+                    _adjust_buffer(grp_log, result.length() + 1);
+                    memcpy(grp_log->buffer, result.c_str(), result.length() + 1);
+                    bder->loggroup_size -= grp_log->buffer_len;
+                    bder->loggroup_size += result.length() + 1;
+                    grp_log->buffer_len = result.length() + 1;
+                }
+                */
+                
+                
+                /*
+                std::string total
                 cJSON* tags = cJSON_GetObjectItem(message_content, "tags");
                 if (tags != NULL && !cJSON_HasObjectItem(tags, "TerminalNo"))
                 {
@@ -700,25 +789,10 @@ void add_log_terminal_no(log_group_builder* bder, char* no) {
                     cJSON_AddItemToObject(tags, "TerminalNo", cJSON_CreateString(no));
                     changed = 1;
                 }
+                */
             }
 
-            if (changed) {
-                str_message_content = cJSON_PrintUnformatted(message_content);
-                totalBufferSize = strlen(str_message_content) + 1;
-                grp_log = &(bder->grp->logs[i]);
-                if (grp_log->buffer == NULL || grp_log->buffer_len < totalBufferSize)
-                {
-                    _adjust_buffer(grp_log, totalBufferSize);
-                }
-                memcpy(grp_log->buffer, str_message_content, totalBufferSize);
-                bder->loggroup_size -= grp_log->buffer_len;
-                bder->loggroup_size += totalBufferSize;
-                grp_log->buffer_len = totalBufferSize;
-                cJSON_free(str_message_content);
-            }
-
-            //delete
-            cJSON_Delete(message_content);
+            
         }
         else
         {

+ 1 - 1
Framework/RvcLogSdk/log_builder.h

@@ -19,7 +19,7 @@
 LOG_CPP_START
 
 typedef enum {
-    LOG_TYPE_USER_SKYEYE, LOG_TYPE_SYS_SKYEYE, LOG_TYPE_BEIDOU, LOG_TYPE_USER_BUSINESS, LOG_TYPE_SYS_BUSINESS,
+    LOG_TYPE_USER_SKYEYE, LOG_TYPE_SYS_SKYEYE, LOG_TYPE_BEIDOU, LOG_TYPE_USER_BUSINESS, LOG_TYPE_SYS_BUSINESS, LOG_TYPE_WEBSDK
 }build_type_e;
 
 typedef struct _lz4_log_buf {

+ 13 - 7
Framework/RvcLogSdk/log_db.cpp

@@ -532,15 +532,19 @@ int getReadType()
 	static unsigned int sum = 0;
 	sum = sum % 100;
 	sum++;
-	int cmpData = sum % 10;
+	int cmpData = sum % 11;
 	if (cmpData <= 5)
-		return 1;
+		return build_type_e::LOG_TYPE_SYS_SKYEYE;
+	else if (cmpData <= 6)
+		return build_type_e::LOG_TYPE_BEIDOU;
 	else if (cmpData <= 7)
-		return 0;
+		return build_type_e::LOG_TYPE_USER_SKYEYE;
 	else if (cmpData <= 8)
-		return 3;
+		return build_type_e::LOG_TYPE_USER_BUSINESS;
 	else if (cmpData <= 9)
-		return 4;
+		return build_type_e::LOG_TYPE_SYS_BUSINESS;
+	else if (cmpData <= 10)
+		return build_type_e::LOG_TYPE_WEBSDK;
 	else
 		return 1;
 
@@ -559,7 +563,8 @@ log_group_builder* db_read_table_last_logs(log_db_manager* manager, int count) {
 	sprintf(strCount, "%d", count);
 	std::string querySql = "select * from ";
 	querySql.append(manager->table_name);
-	querySql.append(" where " + COLUMN_Status + " != ").append(strStatus).append(" AND ").append(COLUMN_Type).append("=").append(std::to_string((long long)getReadType()));
+	int readType = getReadType();
+	querySql.append(" where " + COLUMN_Status + " != ").append(strStatus).append(" AND ").append(COLUMN_Type).append("=").append(std::to_string((long long)readType));
 	querySql.append(/*" order by " + COLUMN_DateTime + */" LIMIT ").append(strCount).append(";");
 
 	try {
@@ -567,9 +572,10 @@ log_group_builder* db_read_table_last_logs(log_db_manager* manager, int count) {
 
 		if (q.eof())
 		{
+			//if can not find, try to get LOG_TYPE_SYS_SKYEYE logs
 			std::string searchSys= "select * from ";
 			searchSys.append(manager->table_name);
-			searchSys.append(" where " + COLUMN_Status + " != ").append(strStatus);
+			searchSys.append(" where " + COLUMN_Status + " != ").append(strStatus).append(strStatus).append(" AND ").append(COLUMN_Type).append("=").append(std::to_string(LOG_TYPE_SYS_SKYEYE));
 			searchSys.append(/*" order by " + COLUMN_DateTime + */" LIMIT ").append(strCount).append(";");
 			q = manager->db->execQuery(searchSys.c_str());
 		}

+ 9 - 0
Framework/RvcLogSdk/log_producer_config.c

@@ -95,6 +95,10 @@ void destroy_log_producer_config(log_producer_config* pConfig)
     {
         sdsfree(pConfig->business_sys_topic);
     }
+    if (pConfig->vtmweb_topic != NULL)
+    {
+        sdsfree(pConfig->vtmweb_topic);
+    }
     if (pConfig->persistentFilePath != NULL)
     {
         sdsfree(pConfig->persistentFilePath);
@@ -397,6 +401,11 @@ void log_producer_config_set_business_sys_topic(log_producer_config* config, con
     _copy_config_string(topic, &config->business_sys_topic);
 }
 
+void log_producer_config_set_vtmweb_topic(log_producer_config* config, const char* topic)
+{
+    _copy_config_string(topic, &config->vtmweb_topic);
+}
+
 void log_producer_config_set_beidou_topic(log_producer_config* config, const char* topic)
 {
     _copy_config_string(topic, &config->beidou_topic);

+ 3 - 1
Framework/RvcLogSdk/log_producer_config.h

@@ -11,7 +11,7 @@
 LOG_CPP_START
 
 #define MAX_TOKEN_LEN 256
-typedef void (*Log_GetTokenCallBack)(char*, char*);
+typedef void (*Log_GetTokenCallBack)(char*, char*, char*, char*);
 
 typedef struct _log_producer_config
 {
@@ -39,6 +39,7 @@ typedef struct _log_producer_config
     char* beidou_topic;
     char* business_user_topic;
     char* business_sys_topic;
+    char* vtmweb_topic;
 
     int32_t sendThreadCount;
     int32_t sendThreadWaitMs;
@@ -174,6 +175,7 @@ LOG_EXPORT void log_producer_config_set_skyeye_sys_topic(log_producer_config* co
 LOG_EXPORT void log_producer_config_set_beidou_topic(log_producer_config* config, const char* topic);
 LOG_EXPORT void log_producer_config_set_business_user_topic(log_producer_config* config, const char* topic);
 LOG_EXPORT void log_producer_config_set_business_sys_topic(log_producer_config* config, const char* topic);
+LOG_EXPORT void log_producer_config_set_vtmweb_topic(log_producer_config* config, const char* topic);
 
 /**
  * set loggroup max log count, if loggoup's logs count  >= log_count, current loggroup will been flushed out

+ 2 - 1
Framework/RvcLogSdk/log_producer_manager.c

@@ -108,7 +108,8 @@ void* log_producer_read_persistent_thread(void* param)
                 config->skyeye_sys_topic == NULL ||
                 config->beidou_topic == NULL ||
                 config->business_user_topic == NULL ||
-                config->business_sys_topic == NULL) {
+                config->business_sys_topic == NULL ||
+                config->vtmweb_topic == NULL) {
                 aos_debug_log((LB, "endpoint is NULL, skip pack and send data"));
                 sleepMs = LOG_PRODUCER_READ_INTERVAL_MS;
                 break;

+ 11 - 3
Framework/RvcLogSdk/log_producer_sender.c

@@ -39,11 +39,13 @@ unsigned long g_upload_TerminalUser_Suc = 0;
 unsigned long g_upload_BussinessSys_Suc = 0;
 unsigned long g_upload_BussinessUser_Suc = 0;
 unsigned long g_upload_beidou_Suc = 0;
+unsigned long g_upload_vtmsdk_Suc = 0;
 unsigned long g_upload_TerminalSys_Err = 0;
 unsigned long g_upload_TerminalUser_Err = 0;
 unsigned long g_upload_BussinessSys_Err = 0;
 unsigned long g_upload_BussinessUser_Err = 0;
 unsigned long g_upload_beidou_Err = 0;
+unsigned long g_upload_vtmsdk_Err = 0;
 #pragma data_seg()
 #pragma comment(linker,"/section:LOG_SEND_INFO,rws")
 
@@ -177,7 +179,7 @@ void * log_producer_send_fun(void * param)
         post_log_result* rst;
         int32_t sleepMs;
         int i = 0;
-        char channelId[MAX_TOKEN_LEN] = "", token[MAX_TOKEN_LEN] = "";
+        char channelId[MAX_TOKEN_LEN] = "", token[MAX_TOKEN_LEN] = "", terminalno[MAX_TOKEN_LEN] = "", reserve1[MAX_TOKEN_LEN] = "";
         if (producer_manager->shutdown)
         {
             aos_info_log((LB, "send fail but shutdown signal received, force exit"));
@@ -206,9 +208,9 @@ void * log_producer_send_fun(void * param)
 
         
         if(config->tokenFun != NULL)
-            config->tokenFun(channelId, token);
+            config->tokenFun(channelId, token, terminalno, reserve1);
 
-        rst = post_logs(config->endpoint, accessKeyId, accessKey, stsToken, send_buf, &option, channelId, token); //通过http发送logs
+        rst = post_logs(config->endpoint, accessKeyId, accessKey, stsToken, send_buf, &option, channelId, token, terminalno, reserve1); //通过http发送logs
         aos_info_log((LB, "post_logs, type:%d, %s, result:%d", send_buf->type, config->endpoint, rst->statusCode));
 
         sdsfree(accessKeyId);
@@ -233,6 +235,9 @@ void * log_producer_send_fun(void * param)
 	        case LOG_TYPE_SYS_BUSINESS:
                 g_upload_BussinessSys_Suc += send_buf->n_logs;
                 break;
+            case LOG_TYPE_WEBSDK:
+                g_upload_vtmsdk_Suc += send_buf->n_logs;
+                break;
 	        default:
                 break;
 	        }
@@ -256,6 +261,9 @@ void * log_producer_send_fun(void * param)
             case LOG_TYPE_SYS_BUSINESS:
                 g_upload_BussinessSys_Err += send_buf->n_logs;
                 break;
+            case LOG_TYPE_WEBSDK:
+                g_upload_vtmsdk_Err += send_buf->n_logs;
+                break;
             default:
                 break;
             }

+ 2 - 2
Framework/RvcRestfulSdk/RestfulFunc.h

@@ -153,7 +153,7 @@ struct HttpClientRequestConfig
 
     void SetTimeout(uint32_t timeoutSecs) { mTimeoutSecs = timeoutSecs; }
     uint32_t GetTimeout() const { return mTimeoutSecs; }
-    bool getToken(std::string& t_channelId, std::string& t_token) const;
+    bool getToken(std::string& t_channelId, std::string& t_token, std::string& terminalNo, std::string& reserve1) const;
 
     virtual void PreDo() {}
     virtual void PostDo() {}
@@ -241,7 +241,7 @@ private:
     
 };
 
-typedef void (*GetRestfulTokenCallBack)(std::string&, std::string&);
+typedef void (*GetRestfulTokenCallBack)(std::string&, std::string&, std::string&, std::string&);
 RVCRESTFULSDK_API void SetRestfulTokenCallBack(GetRestfulTokenCallBack t_callBack);
 
 #endif //_OTHER_RESFULFUNCEXPORT_HEADER_

+ 5 - 4
Framework/RvcRestfulSdk/RestfulFuncImpl.cpp

@@ -33,10 +33,10 @@ RestfulClient::~RestfulClient()
 }
 
 
-bool HttpClientRequestConfig::getToken(std::string& t_channelId, std::string& t_token) const {
+bool HttpClientRequestConfig::getToken(std::string& t_channelId, std::string& t_token, std::string& terminalNo, std::string& reserve1) const {
     if (m_withToken && g_tokenCall != NULL)
     {
-        g_tokenCall(t_channelId, t_token);
+        g_tokenCall(t_channelId, t_token, terminalNo, reserve1);
         if (t_channelId.length() > 0 && t_token.length() > 0)
             return true;
     }
@@ -195,11 +195,12 @@ void RestfulClient::Do(const HttpClientRequestConfig* const pRequestConfig, Http
     }
     request.set_request_uri(urib.to_string());
     request.headers().add(header_names::accept, STRW(pRequestConfig->GetAcceptType()));
-    std::string token, channelId;
-    if (pRequestConfig->getToken(channelId, token))
+    std::string token, channelId, terminalno, reserve1;
+    if (pRequestConfig->getToken(channelId, token, terminalno, reserve1))
     {
         request.headers().add(STRW("channelId"), STRW(channelId));
         request.headers().add(STRW("token"), STRW(token));
+        request.headers().add(STRW("terminalno"), STRW(terminalno));
     }
 
     if (pRequestConfig->GetRequestType() != HttpRequestMethod::GET) {

+ 5 - 6
Framework/spbase/SpBase.cpp

@@ -33,11 +33,10 @@
 #include <DbgHelp.h>
 #else
 #include <exception>
-#include <RestfulFunc.h>
 #endif // RVC_OS_WIN
 #include "SpSecureClient.h"
 #include "IHttpFunc.h"
-
+#include <RestfulFunc.h>
 #include<winpr/library.h>
 #include <winpr/locale.h>
 #include <winpr/exception.h>
@@ -424,14 +423,16 @@ SPBASE_API void LogTrace(const char* pszMessage, const char* pszFile, const int
 
 #include "log.h"
 #ifdef RVC_OS_LINUX
-SPBASE_API void SpGetToken(char* channelId, char* token)
+SPBASE_API void SpGetToken(char* channelId, char* token, char* terminalno, char* reserve1)
 {
 	sp_env_t* env = sp_get_env();
 	if (NULL != env && NULL != env->cfg && NULL != env->cfg->shell_ini &&
-		env->cfg->shell_ini->channelId != NULL && env->cfg->shell_ini->token != NULL)
+		env->cfg->shell_ini->channelId != NULL && env->cfg->shell_ini->token != NULL
+		&& env->cfg->root_ini != NULL && env->cfg->root_ini->terminal_no != NULL)
 	{
 		snprintf(channelId, MAX_TOKEN_LEN, "%s", env->cfg->shell_ini->channelId);
 		snprintf(token, MAX_TOKEN_LEN, "%s", env->cfg->shell_ini->token);
+		snprintf(terminalno, MAX_TOKEN_LEN, "%s", env->cfg->root_ini->terminal_no);
 	}
 	else if (NULL == env)
 		DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("SpGetToken can not get token!env == NULL");
@@ -591,9 +592,7 @@ extern "C" SPBASE_API int __stdcall SpRun(const char *mod_name, int epid, int ra
 	}
 
 	SetTokenCallBack(getHttpToken);
-#ifdef RVC_OS_LINUX
 	SetRestfulTokenCallBack(getHttpToken);
-#endif
 
 	//need init shm first, because log_record save in shm
     hint_addr = sp_shm_init(range, FALSE);

+ 3 - 1
Framework/spbase/SpEntityPrivilege.cpp

@@ -2035,7 +2035,8 @@ ErrorCodeEnum SpEntityPrivilege::CloseOuputConsole()
 	return Error;
 }
 
-ErrorCodeEnum SpEntityPrivilege::BeginLogSend(const char* endpoint, const char* topicSys, const char* topicUser, const char* topicBeidou, const char* bussSys, const char* bussUser)
+ErrorCodeEnum SpEntityPrivilege::BeginLogSend(const char* endpoint, const char* topicSys, const char* topicUser, const char* topicBeidou
+	, const char* bussSys, const char* bussUser, const char* vtmWeb)
 {
     ErrorCodeEnum Error;
     iobuffer_t* pkt = iobuffer_create(-1, -1);
@@ -2045,6 +2046,7 @@ ErrorCodeEnum SpEntityPrivilege::BeginLogSend(const char* endpoint, const char*
     iobuffer_write(pkt, IOBUF_T_STR, topicBeidou, -1);
     iobuffer_write(pkt, IOBUF_T_STR, bussSys, -1);
     iobuffer_write(pkt, IOBUF_T_STR, bussUser, -1);
+	iobuffer_write(pkt, IOBUF_T_STR, vtmWeb, -1);
     Error = PostInfoShell(SHELL_CMD_INFO_START_UPLOAD_LOG, &pkt);
     if (pkt)
         iobuffer_dec_ref(pkt);

+ 2 - 1
Framework/spbase/SpEntityPrivilege.h

@@ -59,7 +59,8 @@ public:
 	virtual ErrorCodeEnum ShowOuputConsole();
 	virtual ErrorCodeEnum CloseOuputConsole();
 	
-	virtual ErrorCodeEnum BeginLogSend(const char* endpoint, const char* topicSys, const char* topicUser, const char* topicBeidou, const char* bussSys, const char* bussUser);
+	virtual ErrorCodeEnum BeginLogSend(const char* endpoint, const char* topicSys, const char* topicUser
+		, const char* topicBeidou, const char* bussSys, const char* bussUser, const char* vtmWeb);
 	virtual ErrorCodeEnum SetHttpToken(const char* channelId, const char* token);
 
     virtual ErrorCodeEnum SetEntityPriority(const char* pszEntityName, EntityPriorityEnum nPriority);

+ 9 - 4
Framework/spbase/SpSecureClient.cpp

@@ -20,15 +20,20 @@ using namespace TokenKeeper;
 CEntityBase* SpSecureClient::m_pEntity = NULL;
 
 
-void getHttpToken(std::string &channelId, std::string &token)
+void getHttpToken(std::string &channelId, std::string &token, std::string &terminalNo, std::string &reserve1)
 {
 	CSimpleString t_channelId, t_token;
-	if (SpSecureClient::m_pEntity == NULL || SpSecureClient::m_pEntity->GetFunction()->GetToken(t_channelId, t_token) != ErrorCodeEnum::Error_Succeed)
+	CSystemStaticInfo info;
+	
+	if (SpSecureClient::m_pEntity == NULL ||
+		SpSecureClient::m_pEntity->GetFunction()->GetToken(t_channelId, t_token) != ErrorCodeEnum::Error_Succeed ||
+		SpSecureClient::m_pEntity->GetFunction()->GetSystemStaticInfo(info) != ErrorCodeEnum::Error_Succeed)
 		return;
-	if(t_channelId.GetLength() != 0 && t_token.GetLength() != 0)
+	if(t_channelId.GetLength() != 0 && t_token.GetLength() != 0 && info.strTerminalID.GetLength() != 0)
 	{
 		channelId = t_channelId.GetData();
 		token = t_token.GetData();
+		terminalNo = info.strTerminalID.GetData();
 	}
 }
 
@@ -113,7 +118,7 @@ SpSecureClient::SpSecureClient(CEntityBase *pEntityBase)
 {
 	m_pEntity = pEntityBase;
 	if(logProducer == NULL) {
-		logProducer = create_log_producer_storage("DualActive", "0", "");
+		logProducer = create_log_producer_storage("DualActive", "0", "", "", "");
 	}
 }
 

+ 3 - 5
Framework/spbase/sp_cfg.cpp

@@ -30,7 +30,7 @@
 #include "sp_httpDefine.h"
 
 #include "sp_logwithlink.h"
-
+#include "RestfulFunc.h"
 #if defined(_MSC_VER)
 #include "AutoLock.h"
 #include <memory>
@@ -43,7 +43,6 @@
 #include <iomanip>
 #define UPDATE_ROOT_BY_HTTP
 #else
-#include "RestfulFunc.h"
 #include "JsonConvertHelper.hpp"
 #endif //_MSC_VER
 #include "sp_checkEntity.h"
@@ -119,7 +118,7 @@ int sp_tryReadFromCacheConfig(int cfgType, const char* section, const char* key,
 int sp_tryRefreshLogLevelFromCacheConfig();
 
 
-void shell_getHttpToken(std::string& channelId, std::string& token)
+void shell_getHttpToken(std::string& channelId, std::string& token, std::string& terminalNo, std::string& reserve1)
 {
 	sp_env_t* env = sp_get_env();
 	if (NULL != env && NULL != env->cfg && NULL != env->cfg->shell_ini &&
@@ -127,6 +126,7 @@ void shell_getHttpToken(std::string& channelId, std::string& token)
 	{
 		channelId = env->cfg->shell_ini->channelId;
 		token = env->cfg->shell_ini->token;
+		terminalNo = env->cfg->root_ini->terminal_no;
 	}
 	else if(NULL == env)
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("shell_getHttpToken can not get token!env == NULL");
@@ -2661,9 +2661,7 @@ int sp_cfg_create(sp_dir_t* dir, const sp_cfg_start_args_t* args, sp_cfg_t** p_c
 */
 
 	SetTokenCallBack(shell_getHttpToken);
-#ifdef RVC_OS_LINUX
 	SetRestfulTokenCallBack(shell_getHttpToken);
-#endif
 
 	if (Error_Succeed != (rc = init_defaultShellCfg(dir, cfg)))
 		return rc;

+ 2 - 9
Framework/spbase/sp_httpDefine.cpp

@@ -14,13 +14,6 @@
 
 #define QUERY_TERMINAL_MAX_WAIT_TIME 10000
 
-std::string Token_Save::channelId = "";
-std::string Token_Save::token = "";
-void Token_Save::getToken(std::string& t_channelId, std::string& t_token)
-{
-	t_channelId = channelId;
-	t_token = token;
-}
 
 CAutoArray<CSimpleString> generateUrlArr(CSimpleString url, CSimpleString appendStr)
 {
@@ -596,8 +589,8 @@ std::pair<bool, std::string> refreshToken(std::string terminalNo, std::string in
 		{
 			t_isGetTokenSuccess = true;
 			//DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("total getToken success from url %s", reqArr[tokenRet - WAIT_OBJECT_0].m_url.c_str());
-			Token_Save::channelId = channelId.c_str();
-			Token_Save::token = reqArr[tokenRet - WAIT_OBJECT_0].ret.m_token;
+			//Token_Save::channelId = channelId.c_str();
+			//Token_Save::token = reqArr[tokenRet - WAIT_OBJECT_0].ret.m_token;
 			return std::make_pair(true, reqArr[tokenRet - WAIT_OBJECT_0].ret.m_token);
 		}
 	}

+ 0 - 5
Framework/spbase/sp_httpDefine.h

@@ -121,11 +121,6 @@ struct TerminalVerUpdateRet : CHTTPRet {
 	virtual bool Parse(string strData);
 };
 
-struct Token_Save {
-	static std::string channelId;
-	static std::string token;
-	static void getToken(std::string& t_channelId, std::string& t_token);
-};
 
 std::pair<bool, TerminalCfgRet> GetTerminalCfgFromUrl(CSimpleString url, const std::string& terminalNo,
 	const std::string& center_version, const std::string& root_version, const std::string& shell_version,

+ 39 - 8
Framework/spbase/sp_logwithlink.cpp

@@ -39,12 +39,14 @@ void* g_logProduceSender = NULL;
 int curEntityLogLevel = 1;
 
 
-void Log_GetToken(char* channelId, char* token) {
+void Log_GetToken(char* channelId, char* token, char *terminalno, char *reserve1) {
     sp_env_t* env = sp_get_env();
-    if (NULL != env && NULL != env->cfg && NULL != env->cfg->shell_ini && env->cfg->shell_ini->channelId != NULL && env->cfg->shell_ini->token != NULL)
+    if (NULL != env && NULL != env->cfg && NULL != env->cfg->shell_ini && env->cfg->shell_ini->channelId != NULL && env->cfg->shell_ini->token != NULL
+        && NULL != env->cfg->root_ini && NULL != env->cfg->root_ini->terminal_no)
     {
         snprintf(channelId, 256, "%s", env->cfg->shell_ini->channelId);
         snprintf(token, 256, "%s", env->cfg->shell_ini->token);
+        snprintf(terminalno, 256, "%s", env->cfg->root_ini->terminal_no);
     }
 }
 
@@ -167,6 +169,8 @@ public:
     CSimpleStringA CallStack;
     CSimpleStringA DbStack;
     CSimpleStringA Tags;
+    CSimpleStringA deployUnitId;
+    CSimpleStringA serviceUnitId;
     void* logProducer;
     Beidou_private(const linkContext& t_context, CSimpleStringA t_Api)
         :logProducer(NULL)
@@ -182,6 +186,8 @@ public:
         CallStack = "{\"callStack\":[]}";
         DbStack = "{\"dbStack\":[]}";
         Tags = "{\"tags\":{}}";
+        deployUnitId = "";
+        serviceUnitId = "";
     }
 };
 
@@ -244,6 +250,15 @@ DbgToBeidou& DbgToBeidou::setTags(CSimpleStringA t_Tags) {
     return *this;
 }
 
+DbgToBeidou& DbgToBeidou::set_deployUnitId(CSimpleString t_deployUnitId) {
+    m_priPtr->deployUnitId = t_deployUnitId;
+    return *this;
+}
+DbgToBeidou& DbgToBeidou::set_serviceUnitId(CSimpleString t_serviceUnitId) {
+    m_priPtr->serviceUnitId = t_serviceUnitId;
+    return *this;
+}
+
 void DbgToBeidou::operator () ()  const {
     beidou_log_item beidou_log = { 0 };
     beidou_log.BussID = (char*)m_priPtr->BussID.GetData();
@@ -258,6 +273,15 @@ void DbgToBeidou::operator () ()  const {
     beidou_log.CallStack = (char*)m_priPtr->CallStack.GetData();
     beidou_log.DbStack = (char*)m_priPtr->DbStack.GetData();
     beidou_log.Tags = (char*)m_priPtr->Tags.GetData();
+    if (m_priPtr->deployUnitId.GetLength() > 0)
+        beidou_log.deployUnitId = (char*)m_priPtr->deployUnitId.GetData();
+    else
+        beidou_log.deployUnitId = NULL;
+
+    if (m_priPtr->serviceUnitId.GetLength() > 0)
+        beidou_log.serviceUnitId = (char*)m_priPtr->serviceUnitId.GetData();
+    else
+        beidou_log.serviceUnitId = NULL;
 
     log_producer_client* cur = NULL;
     if (m_priPtr->logProducer)
@@ -591,7 +615,7 @@ std::string toLowerCase(std::string str) {
     return str;
 }
 
-SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleStringA item, CSimpleStringA filePath)
+SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleStringA item, CSimpleStringA filePath, CSimpleStringA CmptId, CSimpleString CmptName)
 {
     WLog_DBG(TAG, "create log producer storage for %s, %s, %s", entityName.GetData(), item.GetData(), filePath.GetData());
     log_producer_config* config = create_log_producer_config();
@@ -613,8 +637,14 @@ SPBASE_API void* create_log_producer_storage(CSimpleStringA entityName, CSimpleS
     log_producer_config_set_send_thread_count(config, 1);
     log_producer_config_set_persistent_max_log_count(config, 50 * 1000);
     log_producer_config_set_skyeye_servname(config, (char*)"Terminal");
-    log_producer_config_set_skyeye_cmptId(config, (char*)"LR04");
-    log_producer_config_set_skyeye_cmptname(config, (char*)"FrameworkLib");
+    if(CmptId.GetLength() > 0)
+        log_producer_config_set_skyeye_cmptId(config, (char*)CmptId.GetData());
+    else
+        log_producer_config_set_skyeye_cmptId(config, (char*)"LR04");
+    if(CmptName.GetLength() > 0)
+        log_producer_config_set_skyeye_cmptname(config, (char*)CmptName.GetData());
+    else
+        log_producer_config_set_skyeye_cmptname(config, (char*)"FrameworkLib");
     log_producer_config_set_skyeye_version(config, (char*)"1.0");
     log_producer_config_set_persistent(config, 1);
 
@@ -680,7 +710,7 @@ SPBASE_API void destroy_log_producer_storage(void* obj)
     }
 }
 
-SPBASE_API void* create_log_producer_send(CSimpleStringA endpoint, CSimpleStringA topicSys, CSimpleStringA topicUser, CSimpleStringA topicBeidou, CSimpleStringA bussinessSys, CSimpleStringA bussinessUser,
+SPBASE_API void* create_log_producer_send(CSimpleStringA endpoint, CSimpleStringA topicSys, CSimpleStringA topicUser, CSimpleStringA topicBeidou, CSimpleStringA bussinessSys, CSimpleStringA bussinessUser, CSimpleStringA topicVTMWeb,
     CSimpleStringA terminalNo, CSimpleStringA sn, CSimpleStringA filePath, int sendWaitTime)
 {
 #ifndef _WIN32
@@ -697,6 +727,7 @@ SPBASE_API void* create_log_producer_send(CSimpleStringA endpoint, CSimpleString
     log_producer_config_set_skyeye_sys_topic(config, topicSys.GetData());
     log_producer_config_set_business_sys_topic(config, bussinessSys.GetData());
     log_producer_config_set_business_user_topic(config, bussinessUser.GetData());
+    log_producer_config_set_vtmweb_topic(config, topicVTMWeb.GetData());
 
     // set resource params
     log_producer_config_set_packet_log_bytes(config, 4 * 1024 * 1024);
@@ -806,12 +837,12 @@ SPBASE_API bool create_log_producer_default(CSimpleStringA entityName, int idx)
 #ifndef _WIN32
     
     WLog_DBG(TAG, "create defaut log_producer(create log producer storage) for %s %d", entityName.GetData(), idxStr.GetData());
-    g_logProducer = create_log_producer_storage(entityName, idxStr, "");
+    g_logProducer = create_log_producer_storage(entityName, idxStr, "", "", "");
     if (g_logProducer == NULL)
         WLog_ERR(TAG, "create log producer storage return null!");
     return (NULL != g_logProducer);
 #else
-	return NULL != (g_logProducer = create_log_producer_storage(entityName, idxStr, ""));
+	return NULL != (g_logProducer = create_log_producer_storage(entityName, idxStr, "", "", ""));
 #endif
 }
 

+ 1 - 1
Framework/sphost/SpHostLog.cpp

@@ -490,7 +490,7 @@ void DbgWithLink_sphost(const char* formatStr, ...) {
 
 int createLogProducer(const char* entityName, const char *id)
 {
-	g_logProducer = create_log_producer_storage("sphost", id, "");
+	g_logProducer = create_log_producer_storage("sphost", id, "", "", "");
 	if (g_logProducer == NULL)
 		return -1;
 	return 0;

+ 2 - 1
Framework/spshell/app.cpp

@@ -855,10 +855,11 @@ void app_upload_last_log()
     const char* topicBeidou = "LR18_23_VTMTerminalLogService_L_trace_VTMTerminalTraceLog_SRC_SZ";
     const char* topicBussSys = "LR18_23_VTMTerminalLogService_L_sys_VTMBusiness_SRC_SZ";
     const char* topicBussUser = "LR18_23_VTMTerminalLogService_L_biz_VTMBusiness_SRC_SZ";
+	const char* topicVTMWeb = "LR18_23_VTMWebSDKUserLog";
 
 	char dstVer[SP_MAX_VER_LEN] = "";
 	auto ret = sp_cfg_getVer(dstVer);
 	if (ret != Error_Succeed)
 		sprintf_s(dstVer, SP_MAX_VER_LEN, "Unknown");
-    create_log_producer_send(endpoint, topicSys, topicUser, topicBeidou, topicBussSys, topicBussUser, t_terminalNo, dstVer, "", 100);
+    create_log_producer_send(endpoint, topicSys, topicUser, topicBeidou, topicBussSys, topicBussUser, topicVTMWeb, t_terminalNo, dstVer, "", 100);
 }

+ 6 - 4
Framework/spshell/svc.cpp

@@ -531,21 +531,23 @@ void on_start_upload_log(sp_rpc_server_t* server, int epid, int svc_id, int call
 		return;
 	sp_env_t* env = sp_get_env();
 
-	char *endpoint = NULL, *topicSys = NULL, *topicUser = NULL, *topicBeidou = NULL, *bussSys = NULL, *bussUser = NULL;
-	iobuffer_format_read(*info_pkt, "ssssss", &endpoint, &topicSys, &topicUser, &topicBeidou, &bussSys, &bussUser);
+	char* endpoint = NULL, * topicSys = NULL, * topicUser = NULL, * topicBeidou = NULL, * bussSys = NULL, * bussUser = NULL , *vtmWeb = NULL;
+	iobuffer_format_read(*info_pkt, "sssssss", &endpoint, &topicSys, &topicUser, &topicBeidou, &bussSys, &bussUser, &vtmWeb);
 	
 	char dstVer[SP_MAX_VER_LEN] = "";
 	auto ret = sp_cfg_getVer(dstVer);
 	if (ret != Error_Succeed)
 		sprintf_s(dstVer, SP_MAX_VER_LEN, "Unknown");
-	auto logSender = create_log_producer_send(endpoint, topicSys, topicUser, topicBeidou, bussSys, bussUser, env->cfg->root_ini->terminal_no, dstVer, "", 20000);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create log produce sender %s-%s-%s-%s-%s-%s %s", endpoint, topicSys, topicUser, topicBeidou, bussSys, bussUser, logSender == NULL ? "failed" : "success");
+	auto logSender = create_log_producer_send(endpoint, topicSys, topicUser, topicBeidou, bussSys, bussUser, vtmWeb, env->cfg->root_ini->terminal_no, dstVer, "", 20000);
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create log produce sender %s-%s-%s-%s-%s-%s-%s %s",
+		endpoint, topicSys, topicUser, topicBeidou, bussSys, bussUser, vtmWeb, logSender == NULL ? "failed" : "success");
 	toolkit_free(endpoint);
 	toolkit_free(topicSys);
 	toolkit_free(topicUser);
 	toolkit_free(topicBeidou);
 	toolkit_free(bussSys);
 	toolkit_free(bussUser);
+	toolkit_free(vtmWeb);
 	
 }
 

+ 0 - 3
Module/mod_chromium/CModTools.cpp

@@ -955,13 +955,10 @@ namespace Chromium {
 			std::vector<std::string> installUrls;
 #ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
 			installUrls.push_back("https://deviceinstallweb.paasst.cmbchina.cn/installRequire");
-			installUrls.push_back("https://deviceinstallwebdmz.paasst.cmbchina.cn/installRequire");
 #elif defined(DEVOPS_ON_UAT)/*DevOps流水线编译,UAT环境*/
 			installUrls.push_back("https://deviceinstallweb.paasuat.cmbchina.cn/installRequire");
-			installUrls.push_back("https://deviceinstallwebdmz.paasuat.cmbchina.cn/installRequire");
 #elif defined(DEVOPS_ON_PRD)/*DevOps流水线编译,PRD环境*/
 			installUrls.push_back("https://deviceinstallweb.paas.cmbchina.cn/installRequire");
-			installUrls.push_back("https://deviceinstallweb.paas.cmbchina.com/installRequire");
 #else/*本地编译等非DevOps环境编译的版本*/
 			installUrls.push_back("https://deviceinstallweb.paasst.cmbchina.cn/installRequire");
 #endif

+ 60 - 9
Module/mod_chromium/CWebsocketServer.cpp

@@ -243,6 +243,9 @@ namespace Chromium {
 			const char* msg_TipMsg = "TipMsg";
 			const char* msg_BeginTime = "BeginTime";
 			const char* msg_EndTime = "EndTime";
+			const char* msg_CmptId = "CmptId";
+			const char* msg_CmptName = "CmptName";
+
 
 
 			auto msg = json_deal::getStringFromCjsonObj(pJson.get(), msg_nodeName);
@@ -261,19 +264,32 @@ namespace Chromium {
 			//create the logProduer if not exist
 			if (g_logProducerArr.find(t_entityName.second.GetData()) == g_logProducerArr.end())//can not find the logProducer
 			{
-				void *t_producer = create_log_producer_storage(t_entityName.second.GetData(), "0", "");
+				auto t_CmptId = json_deal::getStringFromCjsonObj(pJson.get(), msg_CmptId);
+				auto t_CmptName = json_deal::getStringFromCjsonObj(pJson.get(), msg_CmptName);
+
+
+				void *t_producer = create_log_producer_storage(t_entityName.second.GetData(), "0", "", t_CmptId.second.GetData(), t_CmptName.second.GetData());
 				if (!t_producer)
 				{
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create producer failed, %s", t_entityName.second.GetData());
 					break;
 				}
+				else
+					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("create producer sueccess, entityName:%s, CmptId:%s, t_CmptName:%s"
+						, t_entityName.second.GetData(), t_CmptId.second.GetData(), t_CmptName.second.GetData());
 				g_logProducerArr.insert(std::make_pair(t_entityName.second.GetData(), t_producer));
 			}
 			auto t_logProducer = g_logProducerArr[t_entityName.second.GetData()];
 
 
-			auto logType = json_deal::getStringFromCjsonObj(pJson.get(), msg_logType);//it can be equal to Sys/User
-			LOG_TYPE_E t_type = (logType.second.Compare("User", true) == 0) ? LOG_TYPE_USER : LOG_TYPE_SYSTEM;
+			auto logType = json_deal::getStringFromCjsonObj(pJson.get(), msg_logType);//it can be equal to Sys/User/VTMWeb
+			LOG_TYPE_E t_type = LOG_TYPE_SYSTEM;
+			if (logType.second.Compare("User", true) == 0)
+				t_type = LOG_TYPE_USER;
+			else if (logType.second.Compare("VTMWeb", true) == 0)
+				t_type = LOG_TYPE_VTMWEB;
+			else if(logType.second.Compare("Sys", true) == 0)
+				t_type = LOG_TYPE_SYSTEM;
 
 			//通过变量方式进行处理
 			DbgWithLink t_obj(changeMessageTypeToLogLevel(messageType), t_type);
@@ -335,6 +351,8 @@ namespace Chromium {
 			const char* ReturnCode_nodeName = "ReturnCode";
 			const char* Tags_nodeName = "Tags";
 			const char* API_nodeName = "API";
+			const char* deployUnitId_nodeName = "deployUnitId";
+			const char* serviceUintId_nodeName = "serviceUintId";
 			auto  BusinessId = json_deal::getStringFromCjsonObj(pJson.get(), BusinessId_nodeName);
 			if (!BusinessId.first)
 			{
@@ -359,30 +377,63 @@ namespace Chromium {
 				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI(__FUNCTION__)("do not has node %s", ParentSpanId_nodeName);
 				break;
 			}
+
+			linkContext cur(BusinessId.second.GetData(), TraceId.second.GetData(), SpanId.second.GetData(), ParentSpanId.second.GetData());
+			auto API = json_deal::getStringFromCjsonObj(pJson.get(), API_nodeName);
+			if (!API.first)
+				API.second = "";
+			DbgToBeidou obj(cur, API.second.GetData());
+
 			auto Timestamp = json_deal::getStringFromCjsonObj(pJson.get(), Timestamp_nodeName);
 			if (!Timestamp.first)
 				Timestamp.second = "";
+			else if(Timestamp.second.GetLength() > 0)
+				obj.setResponseTime(Timestamp.second);
+
 			auto Host = json_deal::getStringFromCjsonObj(pJson.get(), Host_nodeName);
 			if (!Host.first)
 				Host.second = "";
+			else if (Host.second.GetLength() > 0)
+				obj.setHost(Host.second);
+
 			auto CallStack = json_deal::getStringFromCjsonObj(pJson.get(), CallStack_nodeName);
 			if (!CallStack.first)
 				CallStack.second = "";
+			else if (CallStack.second.GetLength() > 0)
+				obj.setCallStack(CallStack.second);
+
 			auto DbStack = json_deal::getStringFromCjsonObj(pJson.get(), DbStack_nodeName);
 			if (!DbStack.first)
 				DbStack.second = "";
+			else if (DbStack.second.GetLength() > 0)
+				obj.setCallStack(DbStack.second);
+
 			auto ReturnCode = json_deal::getStringFromCjsonObj(pJson.get(), ReturnCode_nodeName);
 			if (!ReturnCode.first)
 				ReturnCode.second = "";
+			else if (ReturnCode.second.GetLength() > 0)
+				obj.setReturnCode(ReturnCode.second);
+
 			auto Tags = json_deal::getStringFromCjsonObj(pJson.get(), Tags_nodeName);
 			if (!Tags.first)
 				Tags.second = "";
-			auto API = json_deal::getStringFromCjsonObj(pJson.get(), API_nodeName);
-			if (!API.first)
-				API.second = "";
-			linkContext cur(BusinessId.second.GetData(), TraceId.second.GetData(), SpanId.second.GetData(), ParentSpanId.second.GetData());
-
-			DbgToBeidou(cur, API.second.GetData())();
+			else if (Tags.second.GetLength() > 0)
+				obj.setTags(Tags.second);
+
+			auto deployUnitId = json_deal::getStringFromCjsonObj(pJson.get(), deployUnitId_nodeName);
+			if (!deployUnitId.first)
+				deployUnitId.second = "";
+			else if (deployUnitId.second.GetLength() > 0)
+				obj.set_deployUnitId(deployUnitId.second);
+
+			auto serviceUintId = json_deal::getStringFromCjsonObj(pJson.get(), serviceUintId_nodeName);
+			if (!serviceUintId.first)
+				serviceUintId.second = "";
+			else if (serviceUintId.second.GetLength() > 0)
+				obj.set_serviceUnitId(serviceUintId.second);
+			
+			obj();
+			
 			break;
 		}
 			

+ 127 - 2
Module/mod_chromium/MessageType.h

@@ -68,7 +68,7 @@ MessageType include
 	"messageType": 3080198,
 	"EntityName": "postmanpostman",
 	"ResultMsg": "for LogTest from postman",
-	"LogType": "User",
+	"LogType": "VTMWeb", 
 	"CostTime": 444,
 	"ResultCode": "RTA444444",
 	"LogCode": "ASDASSD",
@@ -77,7 +77,10 @@ MessageType include
 	"BussID":"asdfafwerwqerqwerwerqwerwqerwerwqerwqerqwer",
 	"TipMsg":"fjoawjerfownfojinwiqfneuiwnefionwfnewqionr",
 	"BeginTime":123456,
-	"EndTime":234567
+	"EndTime":234567,
+	"CmptId":"232323",
+	"CmptName":"sldfoeofoefbo"
+
 }
 messageType must have
 EntityName must have, it mean your upload entityName
@@ -92,6 +95,128 @@ BussID Not necessarily needed,like the beidou
 TipMsg Not necessarily needed,what the msg you desired to show when errors cause
 BegtinTime Not necessarily needed, begin Time
 EndTime Not necessarily needed, end Time
+CmptId Not necessarily needed
+CmptName Not necessarily needed
+
+httptest
+WS ws://99.12.43.134:9002
+
+{
+	"messageType": 3080198,
+	"EntityName": "postmanpostman",
+	"ResultMsg": "for LogTest from postman",
+	"LogType": "User",
+	"CostTime": 444,
+	"ResultCode": "RTA444444",
+	"LogCode": "ASDASSD",
+	"API": "postman::test",
+	"SourceType": "test.cpp",
+	"BussID":"asdfafwerwqerqwerwerqwerwqerwerwqerwqerqwer",
+	"TipMsg":"fjoawjerfownfojinwiqfneuiwnefionwfnewqionr",
+	"BeginTime":123456,
+	"EndTime":234567
+}
+
+
+{{@streaming
+  async function writeStream(){
+	await sleep(3000);
+	$requestClient.send({
+	  "event": "ping",
+	  "reqid": 45
+	});
+	await sleep(1000);
+  }
+  exports.waitPromise = writeStream();
+}}
+
+vtmweb
+WS ws://99.12.43.134:9002
+
+{
+	"messageType": 3080198,
+	"EntityName": "postmanpostman",
+	"ResultMsg": "for LogTest from postman",
+	"LogType": "VTMWeb",
+	"CostTime": 444,
+	"ResultCode": "RTA444444",
+	"LogCode": "ASDASSD",
+	"API": "postman::test",
+	"SourceType": "test.cpp",
+	"BussID":"asdfafwerwqerqwerwerqwerwqerwerwqerwqerqwer",
+	"TipMsg":"fjoawjerfownfojinwiqfneuiwnefionwfnewqionr",
+	"BeginTime":123456,
+	"EndTime":234567,
+	"CmptId":"232323",
+	"CmptName":"sldfoeofoefbo"
+
+}
+
+{{@streaming
+  async function writeStream(){
+	await sleep(1000);
+	$requestClient.send({
+	  "event": "ping",
+	  "reqid": 45
+	});
+	await sleep(1000);
+  }
+  exports.waitPromise = writeStream();
+}}
+*/
+
+
+/*
+beidou
+[[tracing]]
+{
+   "api": "testBeidouAPI",
+   "businessId": "testBeidou",
+   "callStack": [],
+   "dbStack": [],
+   "deployUnitId": "testBeidouPostdeployUnitId",
+   "host": "vtmtlog.paas.cmbchina.cn:8080",
+   "parentSpanId": "0",
+   "responseTime": "0",
+   "returnCode": "SUC0000",
+   "serviceUnitId": "testBeidouserviceUintId",
+   "spanId": "e11f264333564b54",
+   "tags": {
+	  "TerminalNo": "7555980277"
+   },
+   "timestamp": "1722310468000",
+   "traceId": "a2bcd4e10afc420b9e46a0b0030f7247"
+}
+[[tracing]]
+
+http_beidou
+WS ws://99.12.43.134:9002
+{
+	"messageType": 4128769,
+	"BusinessId": "testBeidou",
+	"TraceId": "a2bcd4e10afc420b9e46a0b0030f7247",
+	"SpanId": "e11f264333564b54",
+	"ParentSpanId": "0",
+	"Timestamp": "",
+	"Host": "",
+	"CallStack": "",
+	"DbStack": "",
+	"Tags":"",
+	"API":"testBeidouAPI",
+	"deployUnitId":"testBeidouPostdeployUnitId",
+	"serviceUintId":"testBeidouserviceUintId"
+}
 
 
+{{@streaming
+  async function writeStream(){
+	await sleep(3000);
+	$requestClient.send({
+	  "event": "ping",
+	  "reqid": 45
+	});
+	await sleep(1000);
+  }
+  exports.waitPromise = writeStream();
+}}
 */

+ 17 - 11
Module/mod_vtmloader/VtmLoaderFSM.cpp

@@ -1695,18 +1695,18 @@ bool CVtmLoaderFSM::GetConfig()
 #ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
 	CSimpleString channelId = "5fdd82e3b90a4de69f9da4738e5f1216";
 	CSimpleString tokenSecret = "eca829c78067c686561bd844129321c8a78af3";
-	CSimpleString CommonLaunchUrl = "https://rvc-gateway.paasst.cmbchina.cn|https://rvc-gateway-out.paasst.cmbchina.cn";
+	CSimpleString CommonLaunchUrl = "https://rvc-gateway.paasst.cmbchina.cn";
 	CSimpleString CenterConfigTotal = "https://accessproxy-service.paasst.cmbchina.cn/centerconfig";
 #elif defined(DEVOPS_ON_UAT)/*DevOps流水线编译,UAT环境*/
 	CSimpleString channelId = "7eb748cb71744c87b5c126e05af8cce7";
 	CSimpleString tokenSecret = "eca529c78967c640561bd844229391c8a78af3";
-	CSimpleString CommonLaunchUrl = "https://rvc-gateway.paasuat.cmbchina.cn|https://rvc-gateway-out.paasuat.cmbchina.cn";
-	CSimpleString CenterConfigTotal = "https://accessproxy-service.paasuat.cmbchina.cn/centerconfig|https://accessproxy-service.paasuat.cmbchina.cn/centerconfigdmz";
+	CSimpleString CommonLaunchUrl = "https://rvc-gateway.paasuat.cmbchina.cn";
+	CSimpleString CenterConfigTotal = "https://accessproxy-service.paasuat.cmbchina.cn/centerconfig";
 #elif defined(DEVOPS_ON_PRD)/*DevOps流水线编译,PRD环境*/
 	CSimpleString channelId = "572f7577fa9f425c8475a8d77db4ae31";
 	CSimpleString tokenSecret = "eca129c78767c670561bd844629361c8a78af3";
-	CSimpleString CommonLaunchUrl = "https://rvc-gateway.paas.cmbchina.cn|https://vtmunify.paas.cmbchina.com/gateway";
-	CSimpleString CenterConfigTotal = "https://accessproxy-service.paas.cmbchina.cn/centerconfig|https://vtmunify.paas.cmbchina.com/centerconfig";
+	CSimpleString CommonLaunchUrl = "https://rvc-gateway.paas.cmbchina.cn";
+	CSimpleString CenterConfigTotal = "https://accessproxy-service.paas.cmbchina.cn/centerconfig";
 #else/*本地编译等非DevOps环境编译的版本*/
 	CSimpleString channelId = "5fdd82e3b90a4de69f9da4738e5f1216";
 	CSimpleString tokenSecret = "eca829c78067c686561bd844129321c8a78af3";
@@ -1757,7 +1757,7 @@ bool CVtmLoaderFSM::GetConfig()
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("subscribe event succeed");
 
 	CSmartPointer<IConfigInfo> pConfig;
-	CSimpleString t_endpoint, t_topicSys, t_topicUser, t_topicBeidou, t_bussSys, t_bussUser;
+	CSimpleString t_endpoint, t_topicSys, t_topicUser, t_topicBeidou, t_bussSys, t_bussUser, t_VTMWeb;
 
 	eErr = GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, pConfig);
 	if (eErr == Error_Succeed && Error_Succeed == pConfig->ReadConfigValue("Common", "SendEndpoint", t_endpoint)
@@ -1766,17 +1766,21 @@ bool CVtmLoaderFSM::GetConfig()
 		&& Error_Succeed == pConfig->ReadConfigValue("Common", "SendBeidou", t_topicBeidou)
 		&& Error_Succeed == pConfig->ReadConfigValue("Common", "BusinessSys", t_bussSys)
 		&& Error_Succeed == pConfig->ReadConfigValue("Common", "BusinessUser", t_bussUser)
+		&& Error_Succeed == pConfig->ReadConfigValue("Common", "VTMWeb", t_VTMWeb)
 		&& 0 != t_topicSys.GetLength()
 		&& 0 != t_topicUser.GetLength()
 		&& 0 != t_topicBeidou.GetLength()
 		&& 0 != t_bussSys.GetLength()
-		&& 0 != t_bussUser.GetLength())
+		&& 0 != t_bussUser.GetLength()
+		&& 0 != t_VTMWeb.GetLength())
 	{
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("endpoint:%s, topicSys:%s, topicUser:%s, topicBeidou:%s, bussSys:%s, bussUser:%s", t_endpoint.GetData(), t_topicSys.GetData(), t_topicUser.GetData(), t_topicBeidou.GetData(), t_bussSys.GetData(), t_bussUser.GetData());
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("endpoint:%s, topicSys:%s, topicUser:%s, topicBeidou:%s, bussSys:%s, bussUser:%s, vtmWeb:%s"
+			, t_endpoint.GetData(), t_topicSys.GetData(), t_topicUser.GetData(), t_topicBeidou.GetData(), t_bussSys.GetData(), t_bussUser.GetData(), t_VTMWeb.GetData());
 
 		if (0 != t_endpoint.GetLength())
 		{
-			GetEntityBase()->GetFunction()->GetPrivilegeFunction()->BeginLogSend(t_endpoint.GetData(), t_topicSys.GetData(), t_topicUser.GetData(), t_topicBeidou.GetData(), t_bussSys.GetData(), t_bussUser.GetData());
+			GetEntityBase()->GetFunction()->GetPrivilegeFunction()->BeginLogSend(t_endpoint.GetData()
+				, t_topicSys.GetData(), t_topicUser.GetData(), t_topicBeidou.GetData(), t_bussSys.GetData(), t_bussUser.GetData(), t_VTMWeb.GetData());
 		}
 		else
 			LogWarn(Severity_High, ErrorCodeEnum::Error_Cancel, Event_VtmLoader_GetConfig_Suc, "endpoint is empty, do not begin send log");
@@ -1789,8 +1793,10 @@ bool CVtmLoaderFSM::GetConfig()
 		const char* topicBeidou = "LR18_23_VTMTerminalLogService_L_trace_VTMTerminalTraceLog_SRC_SZ";
 		const char* topicBussSys = "LR18_23_VTMTerminalLogService_L_sys_VTMBusiness_SRC_SZ";
 		const char* topicBussUser = "LR18_23_VTMTerminalLogService_L_biz_VTMBusiness_SRC_SZ";
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("read endpoint and topic err, need check centersetting, use default %s-%s-%s-%s-%s-%s", default_endpoint, topicSys, topicUser, topicBeidou, topicBussSys, topicBussUser);
-		GetEntityBase()->GetFunction()->GetPrivilegeFunction()->BeginLogSend(default_endpoint, topicSys, topicUser, topicBeidou, topicBussSys, topicBussUser);
+		const char* topicVTMWeb = "LR18_23_VTMWebSDKUserLog";
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("read endpoint and topic err, need check centersetting, use default %s-%s-%s-%s-%s-%s-%s"
+			, default_endpoint, topicSys, topicUser, topicBeidou, topicBussSys, topicBussUser, topicVTMWeb);
+		GetEntityBase()->GetFunction()->GetPrivilegeFunction()->BeginLogSend(default_endpoint, topicSys, topicUser, topicBeidou, topicBussSys, topicBussUser, topicVTMWeb);
 	}
 
 	

+ 6 - 3
Other/libRestfulFunc/RestfulFunc.h

@@ -33,7 +33,7 @@
 * -3:地址不符合规范
 */
 
-typedef void (*restFul_GetTokenCallBack)(char *, char *);
+typedef void (*restFul_GetTokenCallBack)(char *, char *, char*, char*);
 
 RESTFULFUNC_API int HttpProbe(const std::string& url, std::string& out_msg, uint32_t wait_max_secs = (uint32_t)-1);
 
@@ -181,16 +181,19 @@ struct HttpClientRequestConfig
     virtual void PreDo() {}
     virtual void PostDo() {}
 
-    bool getToken(std::string & t_channelId, std::string &t_token) const {
+    bool getToken(std::string & t_channelId, std::string &t_token, std::string& t_terminalNo, std::string& t_reserve1) const {
         char channelId[256] = "";
         char token[256] = "";
+        char terminalNo[256] = "";
+        char reserve1[256] = "";
         if (m_withToken && g_tokenCall != NULL)
         {
-            g_tokenCall(channelId, token);
+            g_tokenCall(channelId, token, terminalNo, reserve1);
             if (std::string(channelId).length() > 0 && std::string(token).length() > 0)
             {
                 t_channelId = channelId;
                 t_token = token;
+                t_terminalNo = terminalNo;
                 return true;
             }
         }

+ 3 - 2
Other/libRestfulFunc/RestfulFuncImpl.cpp

@@ -181,11 +181,12 @@ void RestfulClient::Do(const HttpClientRequestConfig* const pRequestConfig, Http
 	request.set_request_uri(urib.to_string());
 	request.headers().add(header_names::accept, STRW(pRequestConfig->GetAcceptType()));
 
-	std::string token, channelId;
-	if (pRequestConfig->getToken(channelId, token))
+	std::string token, channelId, terminalno, reserve1;
+	if (pRequestConfig->getToken(channelId, token, terminalno, reserve1))
 	{
 		request.headers().add(STRW("channelId"), STRW(channelId));
 		request.headers().add(STRW("token"), STRW(token));
+		request.headers().add(STRW("terminalno"), STRW(terminalno));
 	}
 
 	if (pRequestConfig->GetRequestType() != HttpRequestMethod::GET) {

+ 1 - 0
Other/liblog4rvcother/log4upload.h

@@ -49,6 +49,7 @@ struct log_producer_config
     char* beidou_topic;
     char* business_user_topic;
     char* business_sys_topic;
+    char* vtmweb_topic;
 
     int32_t sendThreadCount;
 

+ 1 - 0
Other/liblog4vendor/log4upload.h

@@ -49,6 +49,7 @@ struct log_producer_config
     char* beidou_topic;
     char* business_user_topic;
     char* business_sys_topic;
+    char* vtmweb_topic;
 
     int32_t sendThreadCount;