skyeyeLog.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679
  1. #include "skyeyeLog.h"
  2. #include "RestfulFunc.h"
  3. #include "JsonConvertHelper.hpp"
  4. #include "json/json.h"
  5. #include <chrono>
  6. #include <thread>
  7. #include <mutex>
  8. #include "uuid4.h"
  9. #include "SpDefine.h"
  10. #include <list>
  11. #include <cstdarg>
  12. #if (defined _WIN32 || defined _WIN64)
  13. #include <Windows.h>
  14. #include <WinSock.h>
  15. #include <IPHlpApi.h>
  16. #pragma comment(lib, "IPHlpApi.lib")
  17. #pragma comment(lib, "Ws2_32.lib")
  18. #else
  19. #include <winpr/string.h>
  20. #include <netdb.h>
  21. #include <unistd.h>
  22. #include <sys/un.h>
  23. #include <sys/ioctl.h>
  24. #include <sys/socket.h>
  25. #include <arpa/inet.h>
  26. #include <netinet/in.h>
  27. #include <netinet/tcp.h>
  28. #include <net/if.h>
  29. #include <sys/stat.h>
  30. #include <sys/time.h>
  31. #endif
  32. #define MAX_LOG_LEN 1900
  33. void skyeye_GetToken(char* channelId, char* token, char* terminalno, char* reserve1);
  34. void GetUnitedTimeStr(time_t time, char* szTime)
  35. {
  36. struct tm* tm = localtime(&time);
  37. sprintf(szTime, "%04d-%02d-%02dT%02d:%02d:%02d.000000000Z",
  38. tm->tm_year + 1900,
  39. tm->tm_mon + 1,
  40. tm->tm_mday,
  41. tm->tm_hour,
  42. tm->tm_min,
  43. tm->tm_sec
  44. );
  45. }
  46. int GetLocalIP(char* ip_str)
  47. {
  48. #ifdef _WIN32
  49. struct hostent* ent;
  50. char tmp[256] = "";
  51. int i;
  52. __try {
  53. ent = gethostbyname(tmp);
  54. }
  55. __except (EXCEPTION_EXECUTE_HANDLER) {
  56. strcpy(ip_str, "0.0.0.0");
  57. return -1;
  58. }
  59. if (ent) {
  60. for (i = 0; ent->h_addr_list[i]; ++i) {
  61. if (ent->h_addrtype == AF_INET) {
  62. struct in_addr* in = (struct in_addr*)ent->h_addr_list[i];
  63. char* p = inet_ntoa(*in);
  64. if (p[0] != '0') {
  65. strcpy(ip_str, p);
  66. return 0;
  67. }
  68. }
  69. }
  70. }
  71. #else
  72. int sockfd = -1;
  73. struct ifconf ifconf;
  74. struct ifreq* ifreq = NULL;
  75. char strbuf[256] = { 0 };
  76. ifconf.ifc_len = 256;
  77. ifconf.ifc_buf = strbuf;
  78. if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0) {
  79. ioctl(sockfd, SIOCGIFCONF, &ifconf); //get all socket info
  80. ifreq = (struct ifreq*)ifconf.ifc_buf;
  81. for (int i = (ifconf.ifc_len / sizeof(struct ifreq)); i > 0; i--) {
  82. if (ifreq->ifr_flags == AF_INET) { //for ipv4
  83. char* strIP = inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr);
  84. ifreq++;
  85. if (NULL != strIP) {
  86. if (NULL == strstr(strIP, "198.168.") && NULL == strstr(strIP, "127.0.0.1")) {
  87. strcpy(ip_str, strIP);
  88. close(sockfd);
  89. return 0;
  90. }
  91. }
  92. }
  93. }
  94. close(sockfd);
  95. }
  96. #endif //_WIN32
  97. return -1;
  98. }
  99. std::string get_format_uuid()
  100. {
  101. char strbuffer[64] = "";
  102. int uuidlen = 0;
  103. uuid4_init();
  104. uuid4_generate(strbuffer);
  105. return strbuffer;
  106. }
  107. class TokenManager {
  108. private:
  109. std::string endpoint;
  110. std::string channelId;
  111. std::string tokenSecret;
  112. std::string terminalno;
  113. std::string installVersion;
  114. //need return channelId and token
  115. std::string token;
  116. //every 20 minites execute getToken task
  117. std::chrono::system_clock::time_point lastExecutionTime;
  118. std::chrono::minutes interval;
  119. public:
  120. static TokenManager& getInstance()
  121. {
  122. static TokenManager cur;
  123. return cur;
  124. }
  125. void InitTokenManager(int t_expired_min, std::string t_endpoint, std::string t_channelId,
  126. std::string t_tokenSecret, std::string t_terminalno, std::string t_installVersion)
  127. {
  128. interval = std::chrono::minutes(t_expired_min);
  129. endpoint = t_endpoint + "/api/auth/v2/token";
  130. channelId = t_channelId;
  131. tokenSecret = t_tokenSecret;
  132. terminalno = t_terminalno;
  133. installVersion = t_installVersion;
  134. getToken();
  135. }
  136. std::string getTerminalNo()
  137. {
  138. return terminalno;
  139. }
  140. std::pair<std::string ,std::string> getToken()
  141. {
  142. auto execute_refreshToken = [this] {
  143. HttpClientRequestConfig config(HttpRequestMethod::POST, endpoint, NULL);
  144. HttpClientResponseResult result;
  145. Json::Value businessId;
  146. businessId["installVersion"] = installVersion;
  147. businessId["terminalNo"] = terminalno;
  148. Json::FastWriter writer;
  149. std::string businessId_str = writer.write(businessId);
  150. Json::Value root;
  151. root["channelId"] = channelId;
  152. root["clientSecret"] = tokenSecret;
  153. root["businessId"] = businessId_str;
  154. std::string root_str = writer.write(root);
  155. config.SetJsonBody(root_str);
  156. RestfulClient client = RestfulClient::getInstance();
  157. client.Do(&config, &result, NULL);
  158. if (result.ResponseOK()) {
  159. //解析返回字符串
  160. Json::Reader reader;
  161. Json::Value rootRet;
  162. if (!reader.parse(result.content, rootRet, false))
  163. return;
  164. token = rootRet["data"].asString();
  165. if (token.length() > 0)
  166. lastExecutionTime = std::chrono::system_clock::now();
  167. }
  168. };
  169. if (endpoint.length() == 0 && channelId.length() == 0 && endpoint.length() == 0
  170. && tokenSecret.length() == 0 && terminalno.length() == 0 && installVersion.length() == 0)
  171. return std::make_pair("", "");
  172. auto duration = std::chrono::duration_cast<std::chrono::minutes>(std::chrono::system_clock::now() - lastExecutionTime);
  173. if (duration >= interval)//already expired
  174. {
  175. execute_refreshToken();
  176. return std::make_pair(token.length() > 0 ? channelId : "", token.length() > 0 ? token : "");
  177. }
  178. else if (duration >= interval / 2)// pre update token
  179. {
  180. std::string oldToken = token;
  181. std::thread (execute_refreshToken).detach();
  182. return std::make_pair(oldToken.length() > 0 ? channelId : "", oldToken.length() > 0 ? oldToken : "");
  183. }
  184. else
  185. return std::make_pair(token.length() > 0 ? channelId : "", token.length() > 0 ? token : "");
  186. }
  187. };
  188. /*reference example
  189. *
  190. {
  191. "_CMB_LOG_SPEC_VERSION": "2.0",
  192. "level": "DEBUG",
  193. "ts": "2024-09-03T15:09:50.000000000Z",
  194. "type": "BASETYPE",
  195. "serviceUnitId": "LR04.02@FrameworkLib_PRD_PRD",
  196. "log": {
  197. "content": {
  198. "CmptId": "LR04",
  199. "CmptName": "FrameworkLib",
  200. "LogFile": "SD",
  201. "EvenTime": "2024-09-03 15:09:50.414",
  202. "CostTime": 0,
  203. "VtmUuid": "1f595ef586bc427fa49ee5bf9842e110",
  204. "Version": "1.0",
  205. "DateTime": "2024-09-03 15:09:50.414",
  206. "ResultCode": "SUC0000",
  207. "LogCode": "",
  208. "API": "",
  209. "TipMsg": "",
  210. "BussID": "",
  211. "SourceType": "",
  212. "ResultMsg": "ReadConfigValue can not find value:site",
  213. "TraceID": "",
  214. "Item": "1",
  215. "EntityName": "mod_chromium",
  216. "LifeID": 4,
  217. "TimeSn": 125,
  218. "ServName": "7555980277",
  219. "TerminalNo": "7555980277",
  220. "SN": "7.5.1.1",
  221. "ClientIP": "192.168.56.1"
  222. }
  223. }
  224. }
  225. */
  226. void GetTimeStr(time_t time, char* szTime)
  227. {
  228. #if defined(_MSC_VER)
  229. LARGE_INTEGER liTime, liFreq;
  230. double dTime;
  231. struct tm* tm = localtime(&time);
  232. QueryPerformanceFrequency(&liFreq);
  233. QueryPerformanceCounter(&liTime);
  234. dTime = (double)liTime.QuadPart / (double)liFreq.QuadPart;
  235. sprintf(szTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d",
  236. tm->tm_year + 1900,
  237. tm->tm_mon + 1,
  238. tm->tm_mday,
  239. tm->tm_hour,
  240. tm->tm_min,
  241. tm->tm_sec,
  242. (long)(dTime * 1000) % 1000
  243. );
  244. #else
  245. struct timeval tv;
  246. struct tm* tm = localtime(&time);
  247. gettimeofday(&tv, NULL);
  248. sprintf(szTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d",
  249. tm->tm_year + 1900,
  250. tm->tm_mon + 1,
  251. tm->tm_mday,
  252. tm->tm_hour,
  253. tm->tm_min,
  254. tm->tm_sec,
  255. tv.tv_usec / 1000
  256. );
  257. #endif //_MSC_VER
  258. }
  259. Link_private::Link_private(LOG_LEVEL_E t_level, LOG_TYPE_E t_type)
  260. : Level(t_level), Type(t_type), BeginTime(0), EndTime(0), CostTime(0), ResultCode("SUC0000")
  261. {
  262. TraceID = ResultMsg = LogCode = API = BussID = TipMsg = SourceType = recordTime = VtmCode = "";
  263. char nowTime[64] = { 0 };
  264. auto now = time(NULL);
  265. GetTimeStr(now, nowTime);
  266. recordTime = nowTime;
  267. }
  268. class skyeye_sender {
  269. private:
  270. std::mutex m_mtx;
  271. std::list<Link_private> m_msgArr;
  272. int m_TimeSn;
  273. std::chrono::system_clock::time_point m_beginTime;
  274. std::string convertLinkPrivateToStr(const Link_private& cur)
  275. {
  276. static char local_ip_str[64] = "0.0.0.0";
  277. static long ipInit = 0;
  278. //get ip every 1000 times
  279. if (ipInit % 1000 == 0)
  280. GetLocalIP(local_ip_str);
  281. ipInit++;
  282. Json::Value root;
  283. root["_CMB_LOG_SPEC_VERSION"] = "2.0";
  284. root["level"] = cur.get_baseLogType();
  285. root["ts"] = cur.recordTime;
  286. root["type"] = "BASETYPE";
  287. root["serviceUnitId"] = skyeye_logger::getDefaultLogger().m_constParam.m_serviceUnitId;
  288. Json::Value root_log;
  289. root_log["CmptId"] = skyeye_logger::getDefaultLogger().m_constParam.m_cmptId;
  290. root_log["CmptName"] = skyeye_logger::getDefaultLogger().m_constParam.m_cmptName;
  291. root_log["LogFile"] = cur.get_LogFile();
  292. root_log["EvenTime"] = cur.recordTime;
  293. root_log["CostTime"] = cur.CostTime;
  294. root_log["VtmUuid"] = get_format_uuid();
  295. root_log["Version"] = "1.0";
  296. root_log["DateTime"] = cur.recordTime;
  297. root_log["ResultCode"] = cur.ResultCode.length() > 0 ? cur.ResultCode : "";
  298. root_log["LogCode"] = cur.LogCode;
  299. root_log["API"] = cur.API;
  300. root_log["TipMsg"] = cur.TipMsg;
  301. root_log["BussID"] = cur.BussID;
  302. root_log["SourceType"] = cur.SourceType;
  303. root_log["ResultMsg"] = cur.ResultMsg;
  304. root_log["TraceID"] = cur.TraceID;
  305. root_log["Item"] = skyeye_logger::getDefaultLogger().m_constParam.m_item;
  306. root_log["EntityName"] = skyeye_logger::getDefaultLogger().m_constParam.m_entityName;
  307. auto currentTime = std::chrono::system_clock::now();
  308. auto elapsedTime = std::chrono::duration_cast<std::chrono::seconds>(currentTime - m_beginTime);
  309. root_log["LifeID"] = elapsedTime.count();
  310. root_log["TimeSn"] = ++m_TimeSn;
  311. root_log["ServName"] = skyeye_logger::getDefaultLogger().m_constParam.m_terminalNo;
  312. root_log["TerminalNo"] = skyeye_logger::getDefaultLogger().m_constParam.m_terminalNo;
  313. root_log["SN"] = skyeye_logger::getDefaultLogger().m_constParam.m_version;
  314. root_log["ClientIP"] = local_ip_str;
  315. Json::Value content_log;
  316. content_log["content"] = root_log;
  317. root["log"] = content_log;
  318. Json::FastWriter writer;
  319. std::string dst = writer.write(root);
  320. return dst;
  321. }
  322. public:
  323. static skyeye_sender& getInstance()
  324. {
  325. static skyeye_sender cur;
  326. return cur;
  327. }
  328. void LogToSender(Link_private* msg)
  329. {
  330. m_mtx.lock();
  331. m_msgArr.push_back(*msg);
  332. m_mtx.unlock();
  333. }
  334. void InitSender(std::string t_endpoint, std::string t_topic)
  335. {
  336. auto skyeye_sender = [this](std::string t_endpoint, std::string t_topic) {
  337. while (true)
  338. {
  339. if (m_msgArr.empty())
  340. std::this_thread::sleep_for(std::chrono::seconds(1));//every 1 seconds
  341. std::vector<Link_private> sendArr;
  342. m_mtx.lock();
  343. //max send 12 logs
  344. for (int i = 0; i < 12; i++)
  345. {
  346. if (m_msgArr.size() == 0)
  347. break;
  348. sendArr.emplace_back(m_msgArr.front());
  349. m_msgArr.pop_front();
  350. }
  351. m_mtx.unlock();
  352. if (sendArr.size() == 0)
  353. continue; //no need to send
  354. //generate send str
  355. Json::Value root;
  356. Json::Value arraylist;//消息列表
  357. Json::FastWriter fw;//写入对象
  358. for (int i = 0; i < sendArr.size(); i++)
  359. {
  360. arraylist[i] = convertLinkPrivateToStr(sendArr[i]);
  361. }
  362. root["message_list"] = arraylist;
  363. root["topic"] = t_topic;
  364. auto sendStr = fw.write(root);
  365. //send
  366. HttpClientResponseResult result;
  367. HttpClientRequestConfig config(HttpRequestMethod::POST, t_endpoint, skyeye_GetToken);
  368. config.SetTimeout(60);
  369. config.SetJsonBody(sendStr.c_str());
  370. RestfulClient client = RestfulClient::getInstance();
  371. config.PreDo();
  372. client.Do(&config, &result, NULL);
  373. if (result.ResponseOK()) {
  374. struct CommResponse
  375. {
  376. bool success;
  377. std::string errorCode;
  378. std::string returnCode;
  379. std::string errorMsg;
  380. std::string message;
  381. JSONCONVERT2OBJECT_MEMEBER_REGISTER(success, errorCode, returnCode, errorMsg, message)
  382. JSONCONVERT2OBJECT_MEMEBER_RENAME_REGISTER("success", "code", "return_code", "error_msg", "message")
  383. } responseIns;
  384. Json::Value rawRoot;
  385. if (GetJsonRootObject(rawRoot, result.content) && Json2Object(responseIns, rawRoot)) {
  386. if (!responseIns.success)
  387. {
  388. if (responseIns.errorCode.find("RTI1002") != -1)
  389. {
  390. m_mtx.lock();
  391. for (auto it : sendArr)
  392. m_msgArr.emplace_back(it);
  393. m_mtx.unlock();
  394. std::this_thread::sleep_for(std::chrono::seconds(30));//upload logs failed
  395. }
  396. }
  397. }
  398. }
  399. else
  400. {
  401. m_mtx.lock();
  402. for (auto it : sendArr)
  403. m_msgArr.emplace_back(it);
  404. m_mtx.unlock();
  405. }
  406. }
  407. };
  408. std::thread(skyeye_sender, t_endpoint, t_topic).detach();
  409. }
  410. skyeye_sender()
  411. : m_TimeSn(0)
  412. {
  413. };
  414. };
  415. #define MAX_TOKEN_LEN 256
  416. void skyeye_GetToken(char* channelId, char* token, char* terminalno, char* reserve1)
  417. {
  418. auto tokenInfo = TokenManager::getInstance().getToken();
  419. auto terminalnoInfo = TokenManager::getInstance().getTerminalNo();
  420. snprintf(channelId, MAX_TOKEN_LEN, "%s", tokenInfo.first.c_str());
  421. snprintf(token, MAX_TOKEN_LEN, "%s", tokenInfo.second.c_str());
  422. snprintf(terminalno, MAX_TOKEN_LEN, "%s", terminalnoInfo.c_str());
  423. }
  424. skyeye_logger& skyeye_logger::getDefaultLogger()
  425. {
  426. // TODO: 在此处插入 return 语句
  427. static skyeye_logger cur;
  428. if (cur.m_msg == nullptr)
  429. cur.m_msg = new Link_private(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM);
  430. else
  431. {
  432. delete cur.m_msg;
  433. cur.m_msg = new Link_private(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM);
  434. }
  435. return cur;
  436. }
  437. skyeye_logger& skyeye_logger::setLogLevel(LOG_LEVEL_E t_level)
  438. {
  439. // TODO: 在此处插入 return 语句
  440. if (m_msg != nullptr)
  441. m_msg->Level = t_level;
  442. return *this;
  443. }
  444. skyeye_logger& skyeye_logger::setLogType(LOG_TYPE_E t_type)
  445. {
  446. // TODO: 在此处插入 return 语句
  447. if (m_msg != nullptr)
  448. m_msg->Type = t_type;
  449. return *this;
  450. }
  451. skyeye_logger& skyeye_logger::setResultCode(std::string t_ResultCode)
  452. {
  453. // TODO: 在此处插入 return 语句
  454. if (m_msg != nullptr)
  455. m_msg->ResultCode = t_ResultCode;
  456. return *this;
  457. }
  458. skyeye_logger& skyeye_logger::setTraceID(std::string t_TraceID)
  459. {
  460. // TODO: 在此处插入 return 语句
  461. if (m_msg != nullptr)
  462. m_msg->TraceID = t_TraceID;
  463. return *this;
  464. }
  465. skyeye_logger& skyeye_logger::setResultMsg(std::string t_ResultMsg)
  466. {
  467. // TODO: 在此处插入 return 语句
  468. if (m_msg != nullptr)
  469. m_msg->ResultMsg = t_ResultMsg;
  470. return *this;
  471. }
  472. skyeye_logger& skyeye_logger::setLogCode(std::string t_LogCode)
  473. {
  474. // TODO: 在此处插入 return 语句
  475. if (m_msg != nullptr)
  476. m_msg->LogCode = t_LogCode;
  477. return *this;
  478. }
  479. skyeye_logger& skyeye_logger::setAPI(std::string t_API)
  480. {
  481. // TODO: 在此处插入 return 语句
  482. if (m_msg != nullptr)
  483. m_msg->API = t_API;
  484. return *this;
  485. }
  486. skyeye_logger& skyeye_logger::setBussID(std::string t_BussID)
  487. {
  488. // TODO: 在此处插入 return 语句
  489. if (m_msg != nullptr)
  490. m_msg->BussID = t_BussID;
  491. return *this;
  492. }
  493. skyeye_logger& skyeye_logger::setTipMsg(std::string t_TipMsg)
  494. {
  495. // TODO: 在此处插入 return 语句
  496. if (m_msg != nullptr)
  497. m_msg->TipMsg = t_TipMsg;
  498. return *this;
  499. }
  500. skyeye_logger& skyeye_logger::setSourceType(std::string t_SourceType)
  501. {
  502. // TODO: 在此处插入 return 语句
  503. if (m_msg != nullptr)
  504. m_msg->SourceType = t_SourceType;
  505. return *this;
  506. }
  507. skyeye_logger& skyeye_logger::setBeginTime(long t_BeginTime)
  508. {
  509. // TODO: 在此处插入 return 语句
  510. if (m_msg != nullptr)
  511. m_msg->BeginTime = t_BeginTime;
  512. return *this;
  513. }
  514. skyeye_logger& skyeye_logger::setEndTime(long t_EndTime)
  515. {
  516. // TODO: 在此处插入 return 语句
  517. if (m_msg != nullptr)
  518. m_msg->EndTime = t_EndTime;
  519. return *this;
  520. }
  521. skyeye_logger& skyeye_logger::setCostTime(long t_costTime)
  522. {
  523. // TODO: 在此处插入 return 语句
  524. if (m_msg != nullptr)
  525. m_msg->CostTime = t_costTime;
  526. return *this;
  527. }
  528. skyeye_logger& skyeye_logger::setVtmCode(std::string t_VtmCode)
  529. {
  530. // TODO: 在此处插入 return 语句
  531. if (m_msg != nullptr)
  532. m_msg->VtmCode = t_VtmCode;
  533. return *this;
  534. }
  535. void skyeye_logger::operator()(LOG_LEVEL_E t_level, const char* str, ...)
  536. {
  537. if (m_msg != nullptr)
  538. {
  539. if (str == nullptr)
  540. return;
  541. va_list arg;
  542. va_start(arg, str);
  543. int n = _vscprintf(str, arg) + 1;
  544. if (n > MAX_LOG_LEN) {
  545. n = MAX_LOG_LEN;
  546. }
  547. std::vector<char> buf(n + 1, '\0');
  548. vsnprintf(&buf[0], n, str, arg);
  549. va_end(arg);
  550. m_msg->Level = t_level;
  551. m_msg->ResultMsg = &buf[0];
  552. skyeye_sender::getInstance().LogToSender(m_msg);
  553. delete m_msg;
  554. m_msg = nullptr;
  555. }
  556. }
  557. void CreateDefaultLogger(std::string logEndpoint, std::string logTopic,std::string tokenEndpoint, std::string channelId, std::string tokenSecret, Link_const constParam)
  558. {
  559. skyeye_logger::getDefaultLogger().m_constParam = constParam;
  560. TokenManager::getInstance().InitTokenManager(30, tokenEndpoint, channelId, tokenSecret, constParam.m_terminalNo, constParam.m_version);
  561. skyeye_sender::getInstance().InitSender(logEndpoint, logTopic);
  562. }
  563. void CreateDefaultLogger(std::string terminalno, std::string version, std::string entityName, std::string itemId)
  564. {
  565. Link_const constParam;
  566. constParam.m_entityName = entityName;
  567. constParam.m_item = itemId;
  568. constParam.m_terminalNo = terminalno;
  569. constParam.m_version = version;
  570. constParam.m_cmptId = SpDefine::cmptId;
  571. constParam.m_cmptName = SpDefine::CmptName;
  572. constParam.m_serviceUnitId = SpDefine::serviceUnitId;
  573. constParam.m_deployUnitId = SpDefine::deployUnitId;
  574. //std::this_thread::sleep_for(std::chrono::seconds(10));//every 30 seconds
  575. skyeye_logger::getDefaultLogger().m_constParam = constParam;
  576. TokenManager::getInstance().InitTokenManager(30, SpDefine::CommonLaunchUrl, SpDefine::channelId, SpDefine::tokenSecret, constParam.m_terminalNo, constParam.m_version);
  577. //skyeye_sender::getInstance();
  578. std::string endpoint = SpDefine::endpoint_env;
  579. std::string topic = SpDefine::topicSys;
  580. skyeye_sender::getInstance().InitSender(endpoint, topic);
  581. }
  582. skyeye_logger& GetDefaultLogger()
  583. {
  584. return skyeye_logger::getDefaultLogger();
  585. }