@next-core/easyops-runtime 0.6.28 → 0.6.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,6 +19,9 @@ function initialize(api) {
19
19
  }
20
20
  initialized = true;
21
21
  function upload() {
22
+ if (allMetrics.length === 0) {
23
+ return;
24
+ }
22
25
  const headers = {
23
26
  type: "application/json"
24
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","names":["initialized","pageState","isFirstPageView","stashedApiMetrics","allMetrics","initialize","api","upload","headers","type","data","model","columns","blob","Blob","JSON","stringify","length","window","navigator","sendBeacon","addEventListener","createPageView","finishPageView","metric","pageId","generateUUID","lt","route","push","apiCount","maxApiTimeCost","Math","max","map","duration","size","filter","reduce","prev","current","item","earlyFinishPageView","pushApiMetric","url","URL","createObjectURL","uuid","substring","lastIndexOf","revokeObjectURL"],"sources":["../../../src/analytics/analytics.ts"],"sourcesContent":["import type {\n ApiMetric,\n ApiPageState,\n PageViewMetric,\n PartialPageViewMetric,\n} from \"./interfaces.js\";\n\nlet initialized = false;\nlet pageState: ApiPageState | null = null;\nlet isFirstPageView = true;\nconst stashedApiMetrics: ApiMetric[] = [];\n\nconst allMetrics: (ApiMetric | PageViewMetric)[] = [];\n\nexport function initialize(api: string) {\n if (initialized) {\n return;\n }\n initialized = true;\n\n function upload() {\n const headers = {\n type: \"application/json\",\n };\n const data = {\n model: \"easyops.FRONTEND_STAT\",\n columns: [\n \"_ver\",\n \"st\",\n \"et\",\n \"lt\",\n \"size\",\n \"time\",\n \"traceId\",\n \"code\",\n \"duration\",\n \"page\",\n \"uid\",\n \"username\",\n \"api\",\n \"type\",\n \"msg\",\n \"status\",\n \"pageId\",\n \"route\",\n \"apiCount\",\n \"maxApiTimeCost\",\n \"apiSizeCost\",\n \"pageTitle\",\n ],\n data: allMetrics,\n };\n const blob = new Blob([JSON.stringify(data)], headers);\n allMetrics.length = 0;\n\n window.navigator.sendBeacon(api, blob);\n }\n\n window.addEventListener(\"beforeunload\", upload, false);\n}\n\nexport function createPageView() {\n stashedApiMetrics.length = 0;\n pageState = null;\n}\n\nexport function finishPageView(metric: PartialPageViewMetric) {\n const pageId = generateUUID();\n const { lt, route } = metric;\n pageState = { lt, route, pageId };\n\n allMetrics.push({\n ...metric,\n pageId,\n apiCount: stashedApiMetrics.length,\n maxApiTimeCost: Math.max(\n 0,\n ...stashedApiMetrics.map((api) => api.duration)\n ),\n size: stashedApiMetrics\n .map((api) => api.size)\n .filter((size) => size > 0)\n .reduce((prev, current) => prev + current, 0),\n });\n\n for (const item of stashedApiMetrics) {\n allMetrics.push({\n ...item,\n ...pageState,\n });\n }\n stashedApiMetrics.length = 0;\n}\n\nexport function earlyFinishPageView() {\n allMetrics.push(...stashedApiMetrics);\n stashedApiMetrics.length = 0;\n}\n\nexport function pushApiMetric(metric: ApiMetric) {\n if (pageState) {\n allMetrics.push({\n ...metric,\n type: \"apiRequest\",\n ...pageState,\n });\n } else {\n stashedApiMetrics.push(metric);\n }\n}\n\n// Ref https://medium.com/teads-engineering/generating-uuids-at-scale-on-the-web-2877f529d2a2\nfunction generateUUID() {\n const url = URL.createObjectURL(new Blob([]));\n let uuid = url.substring(url.lastIndexOf(\"/\") + 1);\n URL.revokeObjectURL(url);\n // 第一次渲染加上特殊标记\n if (isFirstPageView) {\n uuid = \"88-\" + uuid;\n isFirstPageView = false;\n }\n return uuid;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"analytics.js","names":["initialized","pageState","isFirstPageView","stashedApiMetrics","allMetrics","initialize","api","upload","length","headers","type","data","model","columns","blob","Blob","JSON","stringify","window","navigator","sendBeacon","addEventListener","createPageView","finishPageView","metric","pageId","generateUUID","lt","route","push","apiCount","maxApiTimeCost","Math","max","map","duration","size","filter","reduce","prev","current","item","earlyFinishPageView","pushApiMetric","url","URL","createObjectURL","uuid","substring","lastIndexOf","revokeObjectURL"],"sources":["../../../src/analytics/analytics.ts"],"sourcesContent":["import type {\n ApiMetric,\n ApiPageState,\n PageViewMetric,\n PartialPageViewMetric,\n} from \"./interfaces.js\";\n\nlet initialized = false;\nlet pageState: ApiPageState | null = null;\nlet isFirstPageView = true;\nconst stashedApiMetrics: ApiMetric[] = [];\n\nconst allMetrics: (ApiMetric | PageViewMetric)[] = [];\n\nexport function initialize(api: string) {\n if (initialized) {\n return;\n }\n initialized = true;\n\n function upload() {\n if (allMetrics.length === 0) {\n return;\n }\n const headers = {\n type: \"application/json\",\n };\n const data = {\n model: \"easyops.FRONTEND_STAT\",\n columns: [\n \"_ver\",\n \"st\",\n \"et\",\n \"lt\",\n \"size\",\n \"time\",\n \"traceId\",\n \"code\",\n \"duration\",\n \"page\",\n \"uid\",\n \"username\",\n \"api\",\n \"type\",\n \"msg\",\n \"status\",\n \"pageId\",\n \"route\",\n \"apiCount\",\n \"maxApiTimeCost\",\n \"apiSizeCost\",\n \"pageTitle\",\n ],\n data: allMetrics,\n };\n const blob = new Blob([JSON.stringify(data)], headers);\n allMetrics.length = 0;\n\n window.navigator.sendBeacon(api, blob);\n }\n\n window.addEventListener(\"beforeunload\", upload, false);\n}\n\nexport function createPageView() {\n stashedApiMetrics.length = 0;\n pageState = null;\n}\n\nexport function finishPageView(metric: PartialPageViewMetric) {\n const pageId = generateUUID();\n const { lt, route } = metric;\n pageState = { lt, route, pageId };\n\n allMetrics.push({\n ...metric,\n pageId,\n apiCount: stashedApiMetrics.length,\n maxApiTimeCost: Math.max(\n 0,\n ...stashedApiMetrics.map((api) => api.duration)\n ),\n size: stashedApiMetrics\n .map((api) => api.size)\n .filter((size) => size > 0)\n .reduce((prev, current) => prev + current, 0),\n });\n\n for (const item of stashedApiMetrics) {\n allMetrics.push({\n ...item,\n ...pageState,\n });\n }\n stashedApiMetrics.length = 0;\n}\n\nexport function earlyFinishPageView() {\n allMetrics.push(...stashedApiMetrics);\n stashedApiMetrics.length = 0;\n}\n\nexport function pushApiMetric(metric: ApiMetric) {\n if (pageState) {\n allMetrics.push({\n ...metric,\n type: \"apiRequest\",\n ...pageState,\n });\n } else {\n stashedApiMetrics.push(metric);\n }\n}\n\n// Ref https://medium.com/teads-engineering/generating-uuids-at-scale-on-the-web-2877f529d2a2\nfunction generateUUID() {\n const url = URL.createObjectURL(new Blob([]));\n let uuid = url.substring(url.lastIndexOf(\"/\") + 1);\n URL.revokeObjectURL(url);\n // 第一次渲染加上特殊标记\n if (isFirstPageView) {\n uuid = \"88-\" + uuid;\n isFirstPageView = false;\n }\n return uuid;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/analytics/interfaces.ts"],"sourcesContent":["export interface HttpAnalyticsMeta {\n st: number;\n time: number;\n perfStartTime: number;\n}\n\nexport interface ApiMetric extends BaseMetric {\n type: \"api\" | \"apiRequest\";\n uid: string | undefined;\n time: number;\n duration: number;\n api: string;\n code: number;\n status: number | undefined;\n msg: string;\n traceId: string;\n}\n\nexport interface PageViewMetric extends BaseMetric {\n type: \"page\";\n apiCount: number;\n maxApiTimeCost: number;\n pageTitle: string | undefined;\n lt: number;\n route: string | undefined;\n pageId: string;\n}\n\nexport type PartialPageViewMetric = Omit<\n PageViewMetric,\n \"apiCount\" | \"maxApiTimeCost\" | \"size\" | \"pageId\"\n>;\n\nexport type ApiPageState = Pick<PageViewMetric, \"lt\" | \"route\" | \"pageId\">;\n\nexport interface BaseMetric {\n type: string;\n st: number;\n et: number;\n _ver: number;\n username: string | undefined;\n page: string;\n size: number;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/analytics/interfaces.ts"],"sourcesContent":["export interface HttpAnalyticsMeta {\n st: number;\n time: number;\n perfStartTime: number;\n}\n\nexport interface ApiMetric extends BaseMetric {\n type: \"api\" | \"apiRequest\";\n uid: string | undefined;\n duration: number;\n api: string;\n code: number;\n status: number | undefined;\n msg: string;\n traceId: string;\n}\n\nexport interface PageViewMetric extends BaseMetric {\n type: \"page\";\n apiCount: number;\n maxApiTimeCost: number;\n pageTitle: string | undefined;\n lt: number;\n route: string | undefined;\n pageId: string;\n}\n\nexport type PartialPageViewMetric = Omit<\n PageViewMetric,\n \"apiCount\" | \"maxApiTimeCost\" | \"size\" | \"pageId\"\n>;\n\nexport type ApiPageState = Pick<PageViewMetric, \"lt\" | \"route\" | \"pageId\">;\n\nexport interface BaseMetric {\n type: string;\n time: number;\n st: number;\n et: number;\n _ver: number;\n username: string | undefined;\n page: string;\n size: number;\n}\n"],"mappings":""}
@@ -28,6 +28,7 @@ function create() {
28
28
  type: "page",
29
29
  page: location.href,
30
30
  _ver: startTime,
31
+ time: Math.round(startTime / 1000),
31
32
  st: startTime,
32
33
  et: endTime,
33
34
  lt: renderTime,
@@ -1 +1 @@
1
- {"version":3,"file":"pageView.js","names":["_analytics","require","_auth","create","perfStartTime","Math","round","performance","now","startTime","Date","createPageView","finish","status","path","pageTitle","earlyFinishPageView","renderTime","endTime","username","getAuth","finishPageView","type","page","location","href","_ver","st","et","lt","route","window","dispatchEvent","CustomEvent","detail"],"sources":["../../../src/analytics/pageView.ts"],"sourcesContent":["import type { PageViewInfo } from \"@next-core/runtime\";\nimport {\n createPageView,\n earlyFinishPageView,\n finishPageView,\n} from \"./analytics.js\";\nimport { getAuth } from \"../auth.js\";\n\nexport function create() {\n const perfStartTime = Math.round(performance.now());\n const startTime = Date.now();\n createPageView();\n\n return function finish({ status, path, pageTitle }: PageViewInfo) {\n if (status !== \"ok\") {\n earlyFinishPageView();\n return;\n }\n\n const renderTime = Math.round(performance.now()) - perfStartTime;\n const endTime = Date.now();\n const { username } = getAuth();\n\n finishPageView({\n type: \"page\",\n page: location.href,\n _ver: startTime,\n st: startTime,\n et: endTime,\n lt: renderTime,\n pageTitle,\n username,\n route: path,\n });\n\n // For bricks which would take actions with render time.\n window.dispatchEvent(\n new CustomEvent(\"route.render\", {\n detail: {\n renderTime,\n },\n })\n );\n };\n}\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAKA,IAAAC,KAAA,GAAAD,OAAA;AAEO,SAASE,MAAMA,CAAA,EAAG;EACvB,MAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC;EACnD,MAAMC,SAAS,GAAGC,IAAI,CAACF,GAAG,CAAC,CAAC;EAC5B,IAAAG,yBAAc,EAAC,CAAC;EAEhB,OAAO,SAASC,MAAMA,CAAC;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAwB,CAAC,EAAE;IAChE,IAAIF,MAAM,KAAK,IAAI,EAAE;MACnB,IAAAG,8BAAmB,EAAC,CAAC;MACrB;IACF;IAEA,MAAMC,UAAU,GAAGZ,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC,GAAGJ,aAAa;IAChE,MAAMc,OAAO,GAAGR,IAAI,CAACF,GAAG,CAAC,CAAC;IAC1B,MAAM;MAAEW;IAAS,CAAC,GAAG,IAAAC,aAAO,EAAC,CAAC;IAE9B,IAAAC,yBAAc,EAAC;MACbC,IAAI,EAAE,MAAM;MACZC,IAAI,EAAEC,QAAQ,CAACC,IAAI;MACnBC,IAAI,EAAEjB,SAAS;MACfkB,EAAE,EAAElB,SAAS;MACbmB,EAAE,EAAEV,OAAO;MACXW,EAAE,EAAEZ,UAAU;MACdF,SAAS;MACTI,QAAQ;MACRW,KAAK,EAAEhB;IACT,CAAC,CAAC;;IAEF;IACAiB,MAAM,CAACC,aAAa,CAClB,IAAIC,WAAW,CAAC,cAAc,EAAE;MAC9BC,MAAM,EAAE;QACNjB;MACF;IACF,CAAC,CACH,CAAC;EACH,CAAC;AACH"}
1
+ {"version":3,"file":"pageView.js","names":["_analytics","require","_auth","create","perfStartTime","Math","round","performance","now","startTime","Date","createPageView","finish","status","path","pageTitle","earlyFinishPageView","renderTime","endTime","username","getAuth","finishPageView","type","page","location","href","_ver","time","st","et","lt","route","window","dispatchEvent","CustomEvent","detail"],"sources":["../../../src/analytics/pageView.ts"],"sourcesContent":["import type { PageViewInfo } from \"@next-core/runtime\";\nimport {\n createPageView,\n earlyFinishPageView,\n finishPageView,\n} from \"./analytics.js\";\nimport { getAuth } from \"../auth.js\";\n\nexport function create() {\n const perfStartTime = Math.round(performance.now());\n const startTime = Date.now();\n createPageView();\n\n return function finish({ status, path, pageTitle }: PageViewInfo) {\n if (status !== \"ok\") {\n earlyFinishPageView();\n return;\n }\n\n const renderTime = Math.round(performance.now()) - perfStartTime;\n const endTime = Date.now();\n const { username } = getAuth();\n\n finishPageView({\n type: \"page\",\n page: location.href,\n _ver: startTime,\n time: Math.round(startTime / 1000),\n st: startTime,\n et: endTime,\n lt: renderTime,\n pageTitle,\n username,\n route: path,\n });\n\n // For bricks which would take actions with render time.\n window.dispatchEvent(\n new CustomEvent(\"route.render\", {\n detail: {\n renderTime,\n },\n })\n );\n };\n}\n"],"mappings":";;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAKA,IAAAC,KAAA,GAAAD,OAAA;AAEO,SAASE,MAAMA,CAAA,EAAG;EACvB,MAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC;EACnD,MAAMC,SAAS,GAAGC,IAAI,CAACF,GAAG,CAAC,CAAC;EAC5B,IAAAG,yBAAc,EAAC,CAAC;EAEhB,OAAO,SAASC,MAAMA,CAAC;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAwB,CAAC,EAAE;IAChE,IAAIF,MAAM,KAAK,IAAI,EAAE;MACnB,IAAAG,8BAAmB,EAAC,CAAC;MACrB;IACF;IAEA,MAAMC,UAAU,GAAGZ,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC,GAAGJ,aAAa;IAChE,MAAMc,OAAO,GAAGR,IAAI,CAACF,GAAG,CAAC,CAAC;IAC1B,MAAM;MAAEW;IAAS,CAAC,GAAG,IAAAC,aAAO,EAAC,CAAC;IAE9B,IAAAC,yBAAc,EAAC;MACbC,IAAI,EAAE,MAAM;MACZC,IAAI,EAAEC,QAAQ,CAACC,IAAI;MACnBC,IAAI,EAAEjB,SAAS;MACfkB,IAAI,EAAEtB,IAAI,CAACC,KAAK,CAACG,SAAS,GAAG,IAAI,CAAC;MAClCmB,EAAE,EAAEnB,SAAS;MACboB,EAAE,EAAEX,OAAO;MACXY,EAAE,EAAEb,UAAU;MACdF,SAAS;MACTI,QAAQ;MACRY,KAAK,EAAEjB;IACT,CAAC,CAAC;;IAEF;IACAkB,MAAM,CAACC,aAAa,CAClB,IAAIC,WAAW,CAAC,cAAc,EAAE;MAC9BC,MAAM,EAAE;QACNlB;MACF;IACF,CAAC,CACH,CAAC;EACH,CAAC;AACH"}
@@ -10,6 +10,9 @@ export function initialize(api) {
10
10
  }
11
11
  initialized = true;
12
12
  function upload() {
13
+ if (allMetrics.length === 0) {
14
+ return;
15
+ }
13
16
  var headers = {
14
17
  type: "application/json"
15
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","names":["initialized","pageState","isFirstPageView","stashedApiMetrics","allMetrics","initialize","api","upload","headers","type","data","model","columns","blob","Blob","JSON","stringify","length","window","navigator","sendBeacon","addEventListener","createPageView","finishPageView","metric","pageId","generateUUID","lt","route","push","_objectSpread","apiCount","maxApiTimeCost","Math","max","map","duration","size","filter","reduce","prev","current","item","earlyFinishPageView","pushApiMetric","url","URL","createObjectURL","uuid","substring","lastIndexOf","revokeObjectURL"],"sources":["../../../src/analytics/analytics.ts"],"sourcesContent":["import type {\n ApiMetric,\n ApiPageState,\n PageViewMetric,\n PartialPageViewMetric,\n} from \"./interfaces.js\";\n\nlet initialized = false;\nlet pageState: ApiPageState | null = null;\nlet isFirstPageView = true;\nconst stashedApiMetrics: ApiMetric[] = [];\n\nconst allMetrics: (ApiMetric | PageViewMetric)[] = [];\n\nexport function initialize(api: string) {\n if (initialized) {\n return;\n }\n initialized = true;\n\n function upload() {\n const headers = {\n type: \"application/json\",\n };\n const data = {\n model: \"easyops.FRONTEND_STAT\",\n columns: [\n \"_ver\",\n \"st\",\n \"et\",\n \"lt\",\n \"size\",\n \"time\",\n \"traceId\",\n \"code\",\n \"duration\",\n \"page\",\n \"uid\",\n \"username\",\n \"api\",\n \"type\",\n \"msg\",\n \"status\",\n \"pageId\",\n \"route\",\n \"apiCount\",\n \"maxApiTimeCost\",\n \"apiSizeCost\",\n \"pageTitle\",\n ],\n data: allMetrics,\n };\n const blob = new Blob([JSON.stringify(data)], headers);\n allMetrics.length = 0;\n\n window.navigator.sendBeacon(api, blob);\n }\n\n window.addEventListener(\"beforeunload\", upload, false);\n}\n\nexport function createPageView() {\n stashedApiMetrics.length = 0;\n pageState = null;\n}\n\nexport function finishPageView(metric: PartialPageViewMetric) {\n const pageId = generateUUID();\n const { lt, route } = metric;\n pageState = { lt, route, pageId };\n\n allMetrics.push({\n ...metric,\n pageId,\n apiCount: stashedApiMetrics.length,\n maxApiTimeCost: Math.max(\n 0,\n ...stashedApiMetrics.map((api) => api.duration)\n ),\n size: stashedApiMetrics\n .map((api) => api.size)\n .filter((size) => size > 0)\n .reduce((prev, current) => prev + current, 0),\n });\n\n for (const item of stashedApiMetrics) {\n allMetrics.push({\n ...item,\n ...pageState,\n });\n }\n stashedApiMetrics.length = 0;\n}\n\nexport function earlyFinishPageView() {\n allMetrics.push(...stashedApiMetrics);\n stashedApiMetrics.length = 0;\n}\n\nexport function pushApiMetric(metric: ApiMetric) {\n if (pageState) {\n allMetrics.push({\n ...metric,\n type: \"apiRequest\",\n ...pageState,\n });\n } else {\n stashedApiMetrics.push(metric);\n }\n}\n\n// Ref https://medium.com/teads-engineering/generating-uuids-at-scale-on-the-web-2877f529d2a2\nfunction generateUUID() {\n const url = URL.createObjectURL(new Blob([]));\n let uuid = url.substring(url.lastIndexOf(\"/\") + 1);\n URL.revokeObjectURL(url);\n // 第一次渲染加上特殊标记\n if (isFirstPageView) {\n uuid = \"88-\" + uuid;\n isFirstPageView = false;\n }\n return uuid;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"analytics.js","names":["initialized","pageState","isFirstPageView","stashedApiMetrics","allMetrics","initialize","api","upload","length","headers","type","data","model","columns","blob","Blob","JSON","stringify","window","navigator","sendBeacon","addEventListener","createPageView","finishPageView","metric","pageId","generateUUID","lt","route","push","_objectSpread","apiCount","maxApiTimeCost","Math","max","map","duration","size","filter","reduce","prev","current","item","earlyFinishPageView","pushApiMetric","url","URL","createObjectURL","uuid","substring","lastIndexOf","revokeObjectURL"],"sources":["../../../src/analytics/analytics.ts"],"sourcesContent":["import type {\n ApiMetric,\n ApiPageState,\n PageViewMetric,\n PartialPageViewMetric,\n} from \"./interfaces.js\";\n\nlet initialized = false;\nlet pageState: ApiPageState | null = null;\nlet isFirstPageView = true;\nconst stashedApiMetrics: ApiMetric[] = [];\n\nconst allMetrics: (ApiMetric | PageViewMetric)[] = [];\n\nexport function initialize(api: string) {\n if (initialized) {\n return;\n }\n initialized = true;\n\n function upload() {\n if (allMetrics.length === 0) {\n return;\n }\n const headers = {\n type: \"application/json\",\n };\n const data = {\n model: \"easyops.FRONTEND_STAT\",\n columns: [\n \"_ver\",\n \"st\",\n \"et\",\n \"lt\",\n \"size\",\n \"time\",\n \"traceId\",\n \"code\",\n \"duration\",\n \"page\",\n \"uid\",\n \"username\",\n \"api\",\n \"type\",\n \"msg\",\n \"status\",\n \"pageId\",\n \"route\",\n \"apiCount\",\n \"maxApiTimeCost\",\n \"apiSizeCost\",\n \"pageTitle\",\n ],\n data: allMetrics,\n };\n const blob = new Blob([JSON.stringify(data)], headers);\n allMetrics.length = 0;\n\n window.navigator.sendBeacon(api, blob);\n }\n\n window.addEventListener(\"beforeunload\", upload, false);\n}\n\nexport function createPageView() {\n stashedApiMetrics.length = 0;\n pageState = null;\n}\n\nexport function finishPageView(metric: PartialPageViewMetric) {\n const pageId = generateUUID();\n const { lt, route } = metric;\n pageState = { lt, route, pageId };\n\n allMetrics.push({\n ...metric,\n pageId,\n apiCount: stashedApiMetrics.length,\n maxApiTimeCost: Math.max(\n 0,\n ...stashedApiMetrics.map((api) => api.duration)\n ),\n size: stashedApiMetrics\n .map((api) => api.size)\n .filter((size) => size > 0)\n .reduce((prev, current) => prev + current, 0),\n });\n\n for (const item of stashedApiMetrics) {\n allMetrics.push({\n ...item,\n ...pageState,\n });\n }\n stashedApiMetrics.length = 0;\n}\n\nexport function earlyFinishPageView() {\n allMetrics.push(...stashedApiMetrics);\n stashedApiMetrics.length = 0;\n}\n\nexport function pushApiMetric(metric: ApiMetric) {\n if (pageState) {\n allMetrics.push({\n ...metric,\n type: \"apiRequest\",\n ...pageState,\n });\n } else {\n stashedApiMetrics.push(metric);\n }\n}\n\n// Ref https://medium.com/teads-engineering/generating-uuids-at-scale-on-the-web-2877f529d2a2\nfunction generateUUID() {\n const url = URL.createObjectURL(new Blob([]));\n let uuid = url.substring(url.lastIndexOf(\"/\") + 1);\n URL.revokeObjectURL(url);\n // 第一次渲染加上特殊标记\n if (isFirstPageView) {\n uuid = \"88-\" + uuid;\n isFirstPageView = false;\n }\n return uuid;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/analytics/interfaces.ts"],"sourcesContent":["export interface HttpAnalyticsMeta {\n st: number;\n time: number;\n perfStartTime: number;\n}\n\nexport interface ApiMetric extends BaseMetric {\n type: \"api\" | \"apiRequest\";\n uid: string | undefined;\n time: number;\n duration: number;\n api: string;\n code: number;\n status: number | undefined;\n msg: string;\n traceId: string;\n}\n\nexport interface PageViewMetric extends BaseMetric {\n type: \"page\";\n apiCount: number;\n maxApiTimeCost: number;\n pageTitle: string | undefined;\n lt: number;\n route: string | undefined;\n pageId: string;\n}\n\nexport type PartialPageViewMetric = Omit<\n PageViewMetric,\n \"apiCount\" | \"maxApiTimeCost\" | \"size\" | \"pageId\"\n>;\n\nexport type ApiPageState = Pick<PageViewMetric, \"lt\" | \"route\" | \"pageId\">;\n\nexport interface BaseMetric {\n type: string;\n st: number;\n et: number;\n _ver: number;\n username: string | undefined;\n page: string;\n size: number;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"interfaces.js","names":[],"sources":["../../../src/analytics/interfaces.ts"],"sourcesContent":["export interface HttpAnalyticsMeta {\n st: number;\n time: number;\n perfStartTime: number;\n}\n\nexport interface ApiMetric extends BaseMetric {\n type: \"api\" | \"apiRequest\";\n uid: string | undefined;\n duration: number;\n api: string;\n code: number;\n status: number | undefined;\n msg: string;\n traceId: string;\n}\n\nexport interface PageViewMetric extends BaseMetric {\n type: \"page\";\n apiCount: number;\n maxApiTimeCost: number;\n pageTitle: string | undefined;\n lt: number;\n route: string | undefined;\n pageId: string;\n}\n\nexport type PartialPageViewMetric = Omit<\n PageViewMetric,\n \"apiCount\" | \"maxApiTimeCost\" | \"size\" | \"pageId\"\n>;\n\nexport type ApiPageState = Pick<PageViewMetric, \"lt\" | \"route\" | \"pageId\">;\n\nexport interface BaseMetric {\n type: string;\n time: number;\n st: number;\n et: number;\n _ver: number;\n username: string | undefined;\n page: string;\n size: number;\n}\n"],"mappings":""}
@@ -23,6 +23,7 @@ export function create() {
23
23
  type: "page",
24
24
  page: location.href,
25
25
  _ver: startTime,
26
+ time: Math.round(startTime / 1000),
26
27
  st: startTime,
27
28
  et: endTime,
28
29
  lt: renderTime,
@@ -1 +1 @@
1
- {"version":3,"file":"pageView.js","names":["createPageView","earlyFinishPageView","finishPageView","getAuth","create","perfStartTime","Math","round","performance","now","startTime","Date","finish","_ref","status","path","pageTitle","renderTime","endTime","username","type","page","location","href","_ver","st","et","lt","route","window","dispatchEvent","CustomEvent","detail"],"sources":["../../../src/analytics/pageView.ts"],"sourcesContent":["import type { PageViewInfo } from \"@next-core/runtime\";\nimport {\n createPageView,\n earlyFinishPageView,\n finishPageView,\n} from \"./analytics.js\";\nimport { getAuth } from \"../auth.js\";\n\nexport function create() {\n const perfStartTime = Math.round(performance.now());\n const startTime = Date.now();\n createPageView();\n\n return function finish({ status, path, pageTitle }: PageViewInfo) {\n if (status !== \"ok\") {\n earlyFinishPageView();\n return;\n }\n\n const renderTime = Math.round(performance.now()) - perfStartTime;\n const endTime = Date.now();\n const { username } = getAuth();\n\n finishPageView({\n type: \"page\",\n page: location.href,\n _ver: startTime,\n st: startTime,\n et: endTime,\n lt: renderTime,\n pageTitle,\n username,\n route: path,\n });\n\n // For bricks which would take actions with render time.\n window.dispatchEvent(\n new CustomEvent(\"route.render\", {\n detail: {\n renderTime,\n },\n })\n );\n };\n}\n"],"mappings":"AACA,SACEA,cAAc,EACdC,mBAAmB,EACnBC,cAAc,QACT,gBAAgB;AACvB,SAASC,OAAO,QAAQ,YAAY;AAEpC,OAAO,SAASC,MAAMA,CAAA,EAAG;EACvB,IAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC;EACnD,IAAMC,SAAS,GAAGC,IAAI,CAACF,GAAG,CAAC,CAAC;EAC5BT,cAAc,CAAC,CAAC;EAEhB,OAAO,SAASY,MAAMA,CAAAC,IAAA,EAA4C;IAAA,IAA3C;MAAEC,MAAM;MAAEC,IAAI;MAAEC;IAAwB,CAAC,GAAAH,IAAA;IAC9D,IAAIC,MAAM,KAAK,IAAI,EAAE;MACnBb,mBAAmB,CAAC,CAAC;MACrB;IACF;IAEA,IAAMgB,UAAU,GAAGX,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC,GAAGJ,aAAa;IAChE,IAAMa,OAAO,GAAGP,IAAI,CAACF,GAAG,CAAC,CAAC;IAC1B,IAAM;MAAEU;IAAS,CAAC,GAAGhB,OAAO,CAAC,CAAC;IAE9BD,cAAc,CAAC;MACbkB,IAAI,EAAE,MAAM;MACZC,IAAI,EAAEC,QAAQ,CAACC,IAAI;MACnBC,IAAI,EAAEd,SAAS;MACfe,EAAE,EAAEf,SAAS;MACbgB,EAAE,EAAER,OAAO;MACXS,EAAE,EAAEV,UAAU;MACdD,SAAS;MACTG,QAAQ;MACRS,KAAK,EAAEb;IACT,CAAC,CAAC;;IAEF;IACAc,MAAM,CAACC,aAAa,CAClB,IAAIC,WAAW,CAAC,cAAc,EAAE;MAC9BC,MAAM,EAAE;QACNf;MACF;IACF,CAAC,CACH,CAAC;EACH,CAAC;AACH"}
1
+ {"version":3,"file":"pageView.js","names":["createPageView","earlyFinishPageView","finishPageView","getAuth","create","perfStartTime","Math","round","performance","now","startTime","Date","finish","_ref","status","path","pageTitle","renderTime","endTime","username","type","page","location","href","_ver","time","st","et","lt","route","window","dispatchEvent","CustomEvent","detail"],"sources":["../../../src/analytics/pageView.ts"],"sourcesContent":["import type { PageViewInfo } from \"@next-core/runtime\";\nimport {\n createPageView,\n earlyFinishPageView,\n finishPageView,\n} from \"./analytics.js\";\nimport { getAuth } from \"../auth.js\";\n\nexport function create() {\n const perfStartTime = Math.round(performance.now());\n const startTime = Date.now();\n createPageView();\n\n return function finish({ status, path, pageTitle }: PageViewInfo) {\n if (status !== \"ok\") {\n earlyFinishPageView();\n return;\n }\n\n const renderTime = Math.round(performance.now()) - perfStartTime;\n const endTime = Date.now();\n const { username } = getAuth();\n\n finishPageView({\n type: \"page\",\n page: location.href,\n _ver: startTime,\n time: Math.round(startTime / 1000),\n st: startTime,\n et: endTime,\n lt: renderTime,\n pageTitle,\n username,\n route: path,\n });\n\n // For bricks which would take actions with render time.\n window.dispatchEvent(\n new CustomEvent(\"route.render\", {\n detail: {\n renderTime,\n },\n })\n );\n };\n}\n"],"mappings":"AACA,SACEA,cAAc,EACdC,mBAAmB,EACnBC,cAAc,QACT,gBAAgB;AACvB,SAASC,OAAO,QAAQ,YAAY;AAEpC,OAAO,SAASC,MAAMA,CAAA,EAAG;EACvB,IAAMC,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC;EACnD,IAAMC,SAAS,GAAGC,IAAI,CAACF,GAAG,CAAC,CAAC;EAC5BT,cAAc,CAAC,CAAC;EAEhB,OAAO,SAASY,MAAMA,CAAAC,IAAA,EAA4C;IAAA,IAA3C;MAAEC,MAAM;MAAEC,IAAI;MAAEC;IAAwB,CAAC,GAAAH,IAAA;IAC9D,IAAIC,MAAM,KAAK,IAAI,EAAE;MACnBb,mBAAmB,CAAC,CAAC;MACrB;IACF;IAEA,IAAMgB,UAAU,GAAGX,IAAI,CAACC,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,CAAC,CAAC,GAAGJ,aAAa;IAChE,IAAMa,OAAO,GAAGP,IAAI,CAACF,GAAG,CAAC,CAAC;IAC1B,IAAM;MAAEU;IAAS,CAAC,GAAGhB,OAAO,CAAC,CAAC;IAE9BD,cAAc,CAAC;MACbkB,IAAI,EAAE,MAAM;MACZC,IAAI,EAAEC,QAAQ,CAACC,IAAI;MACnBC,IAAI,EAAEd,SAAS;MACfe,IAAI,EAAEnB,IAAI,CAACC,KAAK,CAACG,SAAS,GAAG,IAAI,CAAC;MAClCgB,EAAE,EAAEhB,SAAS;MACbiB,EAAE,EAAET,OAAO;MACXU,EAAE,EAAEX,UAAU;MACdD,SAAS;MACTG,QAAQ;MACRU,KAAK,EAAEd;IACT,CAAC,CAAC;;IAEF;IACAe,MAAM,CAACC,aAAa,CAClB,IAAIC,WAAW,CAAC,cAAc,EAAE;MAC9BC,MAAM,EAAE;QACNhB;MACF;IACF,CAAC,CACH,CAAC;EACH,CAAC;AACH"}
@@ -6,7 +6,6 @@ export interface HttpAnalyticsMeta {
6
6
  export interface ApiMetric extends BaseMetric {
7
7
  type: "api" | "apiRequest";
8
8
  uid: string | undefined;
9
- time: number;
10
9
  duration: number;
11
10
  api: string;
12
11
  code: number;
@@ -27,6 +26,7 @@ export type PartialPageViewMetric = Omit<PageViewMetric, "apiCount" | "maxApiTim
27
26
  export type ApiPageState = Pick<PageViewMetric, "lt" | "route" | "pageId">;
28
27
  export interface BaseMetric {
29
28
  type: string;
29
+ time: number;
30
30
  st: number;
31
31
  et: number;
32
32
  _ver: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-core/easyops-runtime",
3
- "version": "0.6.28",
3
+ "version": "0.6.30",
4
4
  "homepage": "https://github.com/easyops-cn/next-core/tree/v3/packages/easyops-runtime",
5
5
  "license": "GPL-3.0",
6
6
  "repository": {
@@ -47,7 +47,7 @@
47
47
  "@next-core/cook": "^2.2.5",
48
48
  "@next-core/http": "^1.1.2",
49
49
  "@next-core/pipes": "^2.0.9",
50
- "@next-core/runtime": "^1.22.6",
50
+ "@next-core/runtime": "^1.22.7",
51
51
  "@next-core/types": "^1.6.1",
52
52
  "@next-core/utils": "^1.5.8",
53
53
  "js-yaml": "^3.14.1",
@@ -59,5 +59,5 @@
59
59
  "jest-websocket-mock": "^2.4.1",
60
60
  "whatwg-fetch": "^3.6.18"
61
61
  },
62
- "gitHead": "77e71491fb621a73e40d4a39ef564d327febde97"
62
+ "gitHead": "0ff39700a261a82c4b018c9ca0bb89811f50e0a0"
63
63
  }