log_producer_client.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. #include "log_producer_client.h"
  2. #include "log_producer_manager.h"
  3. #include "inner_log.h"
  4. #include "log_api.h"
  5. #include <stdarg.h>
  6. #include <string.h>
  7. #include "log_persistent_manager.h"
  8. #include "log_multi_thread.h"
  9. #include "baseFun.h"
  10. static uint32_t s_init_flag = 0;
  11. static log_producer_result s_last_result = 0;
  12. static int disable_log_sdk = 0;
  13. typedef struct _producer_client_private {
  14. log_producer_manager* producer_manager;
  15. log_producer_config* producer_config;
  16. log_persistent_manager* persistent_manager;
  17. }producer_client_private;
  18. log_producer_result log_producer_env_init()
  19. {
  20. // if already init, just return s_last_result
  21. if (s_init_flag == 1)
  22. {
  23. return s_last_result;
  24. }
  25. s_init_flag = 1;
  26. if (0 != sls_log_init(0))
  27. {
  28. s_last_result = LOG_PRODUCER_INVALID;
  29. }
  30. else
  31. {
  32. s_last_result = LOG_PRODUCER_OK;
  33. }
  34. return s_last_result;
  35. }
  36. void log_producer_env_destroy()
  37. {
  38. if (s_init_flag == 0)
  39. {
  40. return;
  41. }
  42. s_init_flag = 0;
  43. sls_log_destroy();
  44. }
  45. log_producer_client* create_log_producer_client(log_producer_config* config, on_log_producer_send_done_function send_done_function, void* user_param)
  46. {
  47. int log_ret;
  48. int log_level;
  49. log_producer_client* producer_client;
  50. producer_client_private* client_private;
  51. if (config->persistentFilePath == NULL || config->skyeyeEntityName == NULL) {
  52. return NULL;
  53. }
  54. //log_level = LM_DEBUG;
  55. log_level = !!(config->debugMode) ? LM_DEBUG : LM_OFF;
  56. log_ret = RvcLog_init(config->persistentFilePath, config->skyeyeEntityName, log_level, 1);//写本地日志
  57. if (log_ret) {
  58. return NULL;
  59. }
  60. if (!log_producer_config_is_valid(config))
  61. {
  62. return NULL;
  63. }
  64. producer_client = (log_producer_client*)malloc(sizeof(log_producer_client));
  65. if (disable_log_sdk) {
  66. return producer_client;
  67. }
  68. client_private = (producer_client_private*)malloc(sizeof(producer_client_private));
  69. producer_client->private_data = client_private;
  70. client_private->producer_config = config;
  71. //nor:flush线程,用于传送数据到spshell,shell:flush,send * n, read, write
  72. client_private->producer_manager = create_log_producer_manager(config);
  73. client_private->producer_manager->send_done_function = send_done_function;
  74. client_private->producer_manager->user_param = user_param;
  75. client_private->producer_manager->start_time = time(NULL);
  76. client_private->persistent_manager = create_log_persistent_manager(config);//就只创建了个db
  77. if (client_private->persistent_manager != NULL) {
  78. client_private->producer_manager->uuid_user_param = client_private->persistent_manager;
  79. client_private->producer_manager->uuid_send_done_function = on_log_persistent_manager_send_done_uuid;
  80. client_private->producer_manager->persistent_manager = client_private->persistent_manager;
  81. }
  82. aos_debug_log((LB, "create producer client success"));
  83. producer_client->valid_flag = 1;
  84. return producer_client;
  85. }
  86. void destroy_log_producer_client(log_producer_client* client)
  87. {
  88. producer_client_private* client_private;
  89. if (client == NULL) {
  90. return;
  91. }
  92. if (disable_log_sdk) {
  93. free(client);
  94. RvcLog_destroy();
  95. return;
  96. }
  97. client->valid_flag = 0;
  98. client_private = (producer_client_private*)client->private_data;
  99. if (client_private != NULL) {
  100. destroy_log_producer_manager(client_private->producer_manager);
  101. destroy_log_persistent_manager(client_private->persistent_manager);
  102. //WARNING: the produce above would let the process lost at UOS platform.
  103. destroy_log_producer_config(client_private->producer_config);
  104. free(client_private);
  105. client->private_data = NULL;
  106. }
  107. free(client);
  108. aos_debug_log((LB, "destroy producer client"));
  109. RvcLog_destroy();
  110. }
  111. log_producer_result log_producer_client_add_log(log_producer_client* client,
  112. log_item* log, int flush, long record_time)
  113. {
  114. int rst;
  115. int i = 0, j = 0;
  116. log_producer_manager* manager;
  117. if (client == NULL || !client->valid_flag)
  118. {
  119. aos_error_log((LB, "log producer client add log failed for null"));
  120. return LOG_PRODUCER_INVALID;
  121. }
  122. if (disable_log_sdk) {
  123. return LOG_PRODUCER_OK;
  124. }
  125. manager = ((producer_client_private*)client->private_data)->producer_manager;
  126. CS_ENTER(manager->lock);
  127. manager->pack_index++;
  128. CS_LEAVE(manager->lock);
  129. //日志放入内存缓存,再发送
  130. rst = log_producer_manager_add_log(manager, log, flush, record_time);
  131. //aos_debug_log((LB, "log producer client add log rst %d", rst));
  132. RvcLogSdkManager::getInstance().m_logFlush_num++;
  133. return rst;
  134. }
  135. log_producer_result log_producer_client_add_beidou_log(log_producer_client* client,
  136. beidou_log_item* log, int flush) {
  137. int rst;
  138. int i = 0, j = 0;
  139. log_producer_manager* manager;
  140. if (client == NULL || !client->valid_flag)
  141. {
  142. aos_error_log((LB, "log producer client add beidou log failed for null"));
  143. return LOG_PRODUCER_INVALID;
  144. }
  145. if (disable_log_sdk) {
  146. return LOG_PRODUCER_OK;
  147. }
  148. manager = ((producer_client_private*)client->private_data)->producer_manager;
  149. CS_ENTER(manager->lock);
  150. manager->pack_index++;
  151. CS_LEAVE(manager->lock);
  152. //日志放入内存缓存,再发送
  153. rst = log_producer_manager_add_beidou_log(manager, log, flush);
  154. //aos_debug_log((LB, "log producer client add beidou log rst %d", rst));
  155. return rst;
  156. }
  157. void log_producer_set_testLogMode()
  158. {
  159. RvcLogSdkManager::getInstance().m_testLogMode = true;
  160. }
  161. int log_producer_sendTestLog_loki(const char* app, const char* env, const char* body)
  162. {
  163. return RvcLogSdkManager::getInstance().SendTestLog_loki(app, env, body);
  164. }