log_producer_client.c 5.4 KB

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