index.uts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. // AppShowReportParams, AppHideReportParams, PageReportParams,
  2. import { StatDefault } from '../../interface.uts'
  3. import { AppShowParamsKeys, AppHideParamsKeys, PageShowParamsKeys, PushParamsKeys, EventParamsKeys, ErrorParamsKeys,CrashParamsKeys } from '../core/stat-type.uts'
  4. /**
  5. * 序列化url参数
  6. * @param {Object} obj
  7. * @example
  8. */
  9. export function Serialize(obj : UTSJSONObject) : string {
  10. let str : string[] = [];
  11. for (let p in obj) {
  12. if (obj.hasOwnProperty(p)) {
  13. let key = obj[p]
  14. if (obj[p] == null) {
  15. key = ''
  16. }
  17. const text = p + "=" + key
  18. str.push(text);
  19. }
  20. }
  21. return "?" + str.join("&");
  22. }
  23. export function IsNumber(value : any | null) : boolean {
  24. return typeof value === 'number';
  25. // if (value.trim() === "") {
  26. // return false;
  27. // }
  28. // const num = parseInt(value);
  29. // if (isNaN(num)) {
  30. // return false;
  31. // }
  32. // return true;
  33. }
  34. /**
  35. * 上报参数过滤
  36. */
  37. export function FilterParam<T>(keys : string[] = [], data : StatDefault) : T {
  38. let result = {};
  39. keys.forEach(key => {
  40. result[key] = data[key];
  41. });
  42. let formdata : T = result as T
  43. return formdata;
  44. }
  45. /**
  46. * 日志输出
  47. * @param {StatDefault} data 统计数据
  48. * @param {Boolean} type 打印类型,如果是type=true ,则是最终上报数据
  49. */
  50. export function Log(data : StatDefault, type : Boolean = false) {
  51. let logData = getEventData(data.lt!, data)
  52. let msg_type : string = ''
  53. switch (data.lt) {
  54. case '1':
  55. msg_type = '应用启动'
  56. break
  57. case '3':
  58. msg_type = '应用进入后台'
  59. break
  60. case '11':
  61. msg_type = '页面切换'
  62. break
  63. case '21':
  64. msg_type = '事件触发'
  65. break
  66. case '31':
  67. msg_type = '应用错误'
  68. break
  69. case '41':
  70. msg_type = '应用崩溃'
  71. break
  72. case '101':
  73. msg_type = 'PUSH'
  74. break
  75. }
  76. if (type) {
  77. console.log(`=== 统计队列数据上报 :`, logData)
  78. // console.log(logData)
  79. // console.log(`=== 上报结束 ===`)
  80. return
  81. }
  82. if (msg_type != '') {
  83. console.log(`=== 统计数据采集:${msg_type} :`,logData)
  84. // console.log(logData)
  85. // console.log(`=== 采集结束 ===`)
  86. }
  87. }
  88. /**
  89. * map 转 string
  90. */
  91. export function Map2String(statData : Map<string, StatDefault[]>) : string {
  92. let statDataJson = {}
  93. statData.forEach((rd : StatDefault[], key : string) => {
  94. statDataJson[key] = rd
  95. });
  96. return JSON.stringify(statDataJson)
  97. }
  98. export function Map2Json(statData : Map<string, StatDefault[]>) : UTSJSONObject {
  99. let statDataJson = {}
  100. statData.forEach((rd : StatDefault[], key : string) => {
  101. let arr : object[] = [];
  102. rd.forEach((elm : StatDefault) => {
  103. let data = getEventData(key, elm)
  104. arr.push(data)
  105. })
  106. statDataJson[key] = arr
  107. });
  108. return statDataJson
  109. }
  110. /**
  111. * 处理上报参数
  112. * @param {Object} statData 需要处理的数据
  113. */
  114. export const handle_data = (statData : Map<string, StatDefault[]>) : string => {
  115. let firstArr : any[] = []
  116. let contentArr : any[] = []
  117. let lastArr : any[] = []
  118. statData.forEach((rd : StatDefault[], key : string) => {
  119. rd.forEach((elm : StatDefault) => {
  120. let data = getEventData(key, elm)
  121. if (key == '1') {
  122. firstArr.push(data)
  123. } else if (key == '4') {
  124. lastArr.push(data)
  125. } else {
  126. contentArr.push(data)
  127. }
  128. })
  129. });
  130. firstArr.push(...contentArr, ...lastArr)
  131. return JSON.stringify(firstArr)
  132. }
  133. /**
  134. * 获取具体的上报参数对象
  135. */
  136. function getEventData(lt : string, elm : StatDefault) : any {
  137. let data : any = {}
  138. switch (lt) {
  139. case '1'://应用启动
  140. data = FilterParam(AppShowParamsKeys, elm)
  141. break
  142. case '3': // 应用进入后台
  143. data = FilterParam(AppHideParamsKeys, elm)
  144. break
  145. case '11': //页面切换
  146. data = FilterParam(PageShowParamsKeys, elm)
  147. break
  148. case '21': // 事件触发
  149. data = FilterParam(EventParamsKeys, elm)
  150. break
  151. case '31': // 应用错误
  152. data = FilterParam(ErrorParamsKeys, elm)
  153. break
  154. case '41': // 崩溃
  155. data = FilterParam(CrashParamsKeys, elm)
  156. break
  157. case '101': // PUSH
  158. data = FilterParam(PushParamsKeys, elm)
  159. break
  160. }
  161. return data
  162. }