Browse Source

!2 update test log fun

chenliangyu 1 năm trước cách đây
mục cha
commit
31f4bf2aa6

+ 1 - 0
Framework/Common/SpBase.h

@@ -1618,6 +1618,7 @@ SPBASE_API bool refreshLogLevel();
 SPBASE_API int getCurLogLevel();
 SPBASE_API int getReduceSpbaseLog();
 SPBASE_API void setReduceSpbaseLog(int isNor);
+SPBASE_API void setTestLogMode();
 SPBASE_API ErrorCodeEnum GetAllEntityIdx(CAutoArray<CSimpleStringA>& strEntityNames, CAutoArray<WORD>& wEntityDevelopIDs);
 
 

+ 44 - 0
Framework/RvcLogSdk/baseFun.cpp

@@ -1,5 +1,8 @@
 #include "baseFun.h"
 #include <time.h>
+#include <condition_variable>
+#include <RestfulFunc.h>
+#include "json/json.h"
 
 long LOG_GET_TIME() 
 { 
@@ -17,4 +20,45 @@ std::list<log_group_builder*> &RvcLogSdkManager::getResendFrameList() {
 
 RvcLogSdkManager::RvcLogSdkManager() {
     m_resend_frame_list.clear();
+    m_testLogMode = false;
+}
+
+bool RvcLogSdkManager::wait_for_counter_greater_than_one_with_timeout() {
+    std::unique_lock<std::mutex> lock(m_mutex);
+    // 等待条件满足(即 counter > 1),最多等待 100 毫秒
+    bool timed_out = !condition_variable.wait_for(lock, std::chrono::milliseconds(100), [&] { return m_logFlush_num > 0; });
+
+    m_logFlush_num = 0;//已经刷新了,后续重新计数
+    return true;
+}
+
+int RvcLogSdkManager::LOG_OS_TestLogPost(const char* url, const char* body)
+{
+    HttpClientResponseResult result;
+    HttpClientRequestConfig config(HttpRequestMethod::POST, url);
+
+    std::string str((const char*)body);
+    config.SetJsonBody(str.c_str());
+    RestfulClient client = RestfulClient::getInstance();
+    config.PreDo();
+    client.Do(&config, &result);
+    return 0;
+}
+
+int RvcLogSdkManager::SendTestLog(const char* body)
+{
+    if (m_testLogMode == false)
+        return -1;
+    HttpClientRequestConfig sendErr(HttpRequestMethod::POST, "http://99.12.43.134:9000/upload_msg");
+    HttpClientResponseResult curResult;
+    Json::Value rootReq;
+    Json::FastWriter writer;
+    rootReq["req"] = body;
+    rootReq["ans"] = "Json_not_vaild";
+    std::string jsonReq = writer.write(rootReq);
+    sendErr.SetJsonBody(jsonReq.c_str());
+    RestfulClient client = RestfulClient::getInstance();
+    sendErr.PreDo();
+    client.Do(&sendErr, &curResult);
+    return 0;
 }

+ 12 - 0
Framework/RvcLogSdk/baseFun.h

@@ -4,6 +4,8 @@
 #include <list>
 #include <string>
 #include "log_builder.h"
+#include <atomic>
+#include <mutex>
 
 #ifdef _WIN32
 DWORD WINAPI log_producer_send_thread(LPVOID param);
@@ -21,8 +23,18 @@ class RvcLogSdkManager {
 public:
     static RvcLogSdkManager& getInstance();
     std::list<log_group_builder*> &getResendFrameList();
+
+    std::atomic<int>  m_logFlush_num;
+    bool m_testLogMode;
+    
+    bool wait_for_counter_greater_than_one_with_timeout();
+
+    int LOG_OS_TestLogPost(const char* url, const char* body);
+    int SendTestLog(const char* body);
 private:
     std::list<log_group_builder*> m_resend_frame_list;
+    std::mutex m_mutex;
+    std::condition_variable condition_variable;
 private:
     RvcLogSdkManager();
     RvcLogSdkManager(const RvcLogSdkManager&) = delete;

+ 0 - 11
Framework/RvcLogSdk/log_api.cpp

@@ -201,18 +201,7 @@ if (result->statusCode / 100 == 2)
 
 */
 
-int LOG_OS_TestLogPost(const char* url, const char* body)
-{
-	HttpClientResponseResult result;
-	HttpClientRequestConfig config(HttpRequestMethod::POST, url);
 
-	std::string str((const char*)body);
-	config.SetJsonBody(str.c_str());
-	RestfulClient client = RestfulClient::getInstance();
-	config.PreDo();
-	client.Do(&config, &result);
-	return 0;
-}
 
 int LOG_OS_HttpPost(const char* url,
 	char** header_array,

+ 1 - 1
Framework/RvcLogSdk/log_api.h

@@ -29,7 +29,7 @@ post_log_result * post_logs(const char *endpoint, const char * accesskeyId, cons
 
 void post_log_result_destroy(post_log_result * result);
 
-int LOG_OS_TestLogPost(const char* url, const char* body);
+
 
 LOG_CPP_END
 #endif

+ 7 - 0
Framework/RvcLogSdk/log_producer_client.cpp

@@ -6,6 +6,7 @@
 #include <string.h>
 #include "log_persistent_manager.h"
 #include "log_multi_thread.h"
+#include "baseFun.h"
 
 static uint32_t s_init_flag = 0;
 static log_producer_result s_last_result = 0;
@@ -148,6 +149,7 @@ log_producer_result log_producer_client_add_log(log_producer_client* client,
     rst = log_producer_manager_add_log(manager, log, flush, record_time);
     //aos_debug_log((LB, "log producer client add log rst %d", rst));
     
+    RvcLogSdkManager::getInstance().m_logFlush_num++;
     return rst;
 }
 
@@ -175,4 +177,9 @@ log_producer_result log_producer_client_add_beidou_log(log_producer_client* clie
     //aos_debug_log((LB, "log producer client add beidou log rst %d", rst));
 
     return rst;
+}
+
+void log_producer_set_testLogMode()
+{
+    RvcLogSdkManager::getInstance().m_testLogMode = true;
 }

+ 2 - 0
Framework/RvcLogSdk/log_producer_client.h

@@ -67,6 +67,8 @@ LOG_EXPORT log_producer_result log_producer_client_add_log(log_producer_client*
  * */
 LOG_EXPORT log_producer_result log_producer_client_add_beidou_log(log_producer_client* client, beidou_log_item* log, int flush);
 
+LOG_EXPORT void log_producer_set_testLogMode();
+
 LOG_CPP_END
 
 #endif

+ 2 - 5
Framework/RvcLogSdk/log_producer_manager.cpp

@@ -23,7 +23,6 @@ void _try_flush_loggroup(log_producer_manager* producer_manager)
 {
     int loggroup_size;
     int rst;
-    int32_t now_time = time(NULL);
 
     CS_ENTER(producer_manager->lock);
     if (producer_manager->builder != NULL)
@@ -394,7 +393,7 @@ DWORD WINAPI log_producer_flush_thread(LPVOID param)    //flush the log to spshe
 void* log_producer_flush_thread(void* param)
 #endif
 {
-    while(1)
+    while(RvcLogSdkManager::getInstance().wait_for_counter_greater_than_one_with_timeout())
     {
         int i = 0;
 	    for(i =0; i < producer_manager_num; i++)
@@ -423,6 +422,7 @@ void* log_producer_flush_thread(void* param)
                     log_group_builder* builder = (log_group_builder*)data;
                     memset(frame.data, 0, sizeof(serialize_buf));
                     serialize_to_buf(&builder->grp->logs[0], (serialize_buf*)frame.data);
+                    RvcLogSdkManager::getInstance().SendTestLog(builder->grp->logs[builder->grp->n_logs - 1].buffer);
                     frame.size = sizeof(serialize_buf);
                     CS_ENTER(persistent_manager->lock);
                     insert_result = ClibsharequeueInsert(producer_manager->share_queue, &frame, 0);
@@ -440,10 +440,7 @@ void* log_producer_flush_thread(void* param)
             // if no job, check now loggroup
             _try_flush_loggroup(producer_manager);
 	    }
-        Sleep(100);
     }
-
-    
     aos_info_log((LB, "exit flusher thread"));
     return 0;
 }

+ 1 - 1
Framework/RvcLogSdk/log_producer_sender.cpp

@@ -135,7 +135,7 @@ void * log_producer_send_thread(void * param)
 }
 void send_log_data(const char* url, const char* body)
 {
-    LOG_OS_TestLogPost(url, body);
+    RvcLogSdkManager::getInstance().LOG_OS_TestLogPost(url, body);
 }
 
 void * log_producer_send_fun(void * param)

+ 5 - 0
Framework/spbase/sp_logwithlink.cpp

@@ -837,6 +837,11 @@ SPBASE_API void setReduceSpbaseLog(int isNor)
     g_spbaseLogNor = isNor;
 }
 
+SPBASE_API void setTestLogMode()
+{
+    log_producer_set_testLogMode();
+}
+
 int changeDbtoNew()
 {
     char tmp[MAX_PATH];

+ 2 - 1
Module/mod_chromium/mod_chromium.cpp

@@ -488,7 +488,8 @@ namespace Chromium {
 				{
 					std::string dirtyLog = std::to_string(count++) + std::string(100 + count, 0xcd);
 					DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("dirty_logs")(dirtyLog.c_str());
-					std::this_thread::sleep_for(std::chrono::seconds(3));
+					//std::this_thread::sleep_for(std::chrono::seconds(3));
+					std::this_thread::sleep_for(std::chrono::milliseconds(100));
 				}
 				
 			};