logger.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { logApi, reportFrontLogApi } from '@/http/logApi'
  2. import { getBrowser } from '@/uilts/help.js';
  3. import { logType } from './logEnum.js';
  4. import { getChromeStorage } from '@/uilts/chromeExtension'
  5. let userInfo = null;
  6. let mid = '';
  7. /**
  8. * @eventData 以键值对存储,会在最终上报里解开的参数
  9. * @extParams 最终上报到阿里云以json字符串存储的参数,如果extparams传入的不是obj会转换成obj
  10. */
  11. export async function reportLog(eventData = {}, extParams = {}) {
  12. if (!userInfo) {
  13. userInfo = await getChromeStorage('userInfo') || null;
  14. }
  15. if (!mid) {
  16. mid = await getChromeStorage('mid') || '';
  17. }
  18. let isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
  19. let platform = isMobile ? `mobile` : `pc`;
  20. let browser = getBrowser();
  21. if (chrome && chrome.tabs) {
  22. chrome.tabs.getCurrent((tab) => {
  23. if (tab && tab.url) {
  24. let { url = '' } = tab;
  25. let extData = {
  26. url,
  27. platform,
  28. browser,
  29. twitterId: userInfo && userInfo.nickName || '',
  30. ...eventData,
  31. }
  32. paramsPretreatmentAndRequest(logType.denet, extData, extParams)
  33. }else{
  34. let extData = {
  35. platform,
  36. browser,
  37. twitterId: userInfo && userInfo.nickName || '',
  38. ...eventData,
  39. }
  40. paramsPretreatmentAndRequest(logType.denet, extData, extParams)
  41. }
  42. })
  43. } else {
  44. paramsPretreatmentAndRequest(logType.denet, eventData, extParams)
  45. }
  46. }
  47. function paramsPretreatmentAndRequest(logType, eventData, extParams) {
  48. extParams = wrapObject(extParams)
  49. let obj = {};
  50. let pageSource = eventData.pageSource;
  51. if (eventData.hasOwnProperty('pageSource')) {
  52. delete eventData.pageSource;
  53. }
  54. obj.logType = logType;
  55. obj.eventData = JSON.stringify(eventData)
  56. obj.extParams = JSON.stringify(extParams)
  57. logApi({
  58. params: {
  59. pageSource,
  60. ...obj
  61. }
  62. }).then(res => {
  63. }).catch(err => {
  64. reportFrontLogApi({
  65. logData: JSON.stringify(err)
  66. })
  67. })
  68. }
  69. function wrapObject(extParams) {
  70. if (typeDecide(extParams, 'Object')) {
  71. return extParams
  72. }
  73. return { 'defaultExt': extParams }
  74. }
  75. /**
  76. * 检测对象类型
  77. */
  78. function typeDecide(o, type) {
  79. return Object.prototype.toString.call(o) === `[object ${type}]`;
  80. }