CLogTrack.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "CLogTrack.h"
  2. #include "json/json.h"
  3. std::shared_ptr<CLogTrack> g_logPtr = nullptr;
  4. CLogData::CLogData()
  5. {
  6. }
  7. CLogData::~CLogData()
  8. {
  9. m_LogList.clear();
  10. }
  11. QString CLogData::genLogJson()
  12. {
  13. Json::Value jLog;
  14. jLog[LOG_CONSTANT_DEF::SOURCE] = LOG_CONSTANT_DEF::WIN;
  15. Json::Value item;
  16. for_each(m_LogList.begin(), m_LogList.end(), [&](CLogInfo v){
  17. item[v.sKey.toStdString()] = v.sValue.toStdString();
  18. });
  19. jLog[LOG_CONSTANT_DEF::LOGS].append(item);
  20. return Json::FastWriter().write(jLog).c_str();
  21. }
  22. void CLogData::pushLog(QString sKey, QString sValue)
  23. {
  24. CLogInfo li;
  25. li.sKey = sKey;
  26. li.sValue = sValue;
  27. m_LogList.push_back(li);
  28. }
  29. CLogTrack::CLogTrack(QString sProjectName, QString sEndpoint, QString sLogstore)
  30. {
  31. m_sUrl = QString("https://%1.%2/logstores/%3/track").arg(sProjectName).arg(sEndpoint).arg(sLogstore);
  32. m_bIsRun = true;
  33. m_thread = std::thread(std::bind(&CLogTrack::threadProc, this));
  34. }
  35. CLogTrack::~CLogTrack()
  36. {
  37. std::scoped_lock lock(m_logMutex);
  38. m_LogList.clear();
  39. m_bIsRun = false;
  40. m_thread.join();
  41. }
  42. void CLogTrack::putLog(CLogData log)
  43. {
  44. std::scoped_lock lock(m_logMutex);
  45. m_LogList.push_back(log);
  46. }
  47. void CLogTrack::threadProc()
  48. {
  49. while(m_bIsRun)
  50. {
  51. if(m_LogList.size() > 0)
  52. {
  53. CLogData ld;
  54. {
  55. std::scoped_lock lock(m_logMutex);
  56. ld = m_LogList.front();
  57. m_LogList.pop_front();
  58. }
  59. int nCode = 0;
  60. std::string sResponseStr = "";
  61. QString sBody = ld.genLogJson();
  62. m_httpClient.addHeader(LOG_CONSTANT_DEF::X_LOG_APIVERSION, LOG_CONSTANT_DEF::LOG_API_VERSION);
  63. m_httpClient.addHeader(LOG_CONSTANT_DEF::X_LOG_BODYRAWSIZE, std::to_string(sBody.length()));
  64. if(m_httpClient.post(m_sUrl.toStdString(), sBody.toStdString(), sResponseStr, nCode))
  65. {
  66. if(nCode == 200)//成功
  67. {
  68. // OC oc;
  69. // emit logFaild(oc);
  70. }
  71. }
  72. else
  73. {
  74. //失败
  75. }
  76. }
  77. else
  78. {
  79. Sleep(100);
  80. }
  81. }
  82. }