@ms-cloudpack/cli 0.31.5 → 0.31.7
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.
- package/lib/commands/start/appServer/inlineScripts/errorHandler.inline.d.ts +0 -9
- package/lib/commands/start/appServer/inlineScripts/errorHandler.inline.js.map +1 -1
- package/lib/commands/start/appServer/inlineScripts/getInlineScripts.js +1 -1
- package/lib/commands/start/appServer/inlineScripts/getInlineScripts.js.map +1 -1
- package/lib/commands/start/appServer/inlineScripts/pageLoadTimeMeasure.inline.d.ts +1 -0
- package/lib/commands/start/appServer/inlineScripts/pageLoadTimeMeasure.inline.js +64 -0
- package/lib/commands/start/appServer/inlineScripts/pageLoadTimeMeasure.inline.js.map +1 -0
- package/lib/commands/start/startApiServer.js +7 -0
- package/lib/commands/start/startApiServer.js.map +1 -1
- package/lib/index.js +6 -1
- package/lib/index.js.map +1 -1
- package/lib/initTelemetry.d.ts +6 -0
- package/lib/initTelemetry.js +10 -4
- package/lib/initTelemetry.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.inline.js","sourceRoot":"","sources":["../../../../../src/commands/start/appServer/inlineScripts/errorHandler.inline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errorHandler.inline.js","sourceRoot":"","sources":["../../../../../src/commands/start/appServer/inlineScripts/errorHandler.inline.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,YAAY,GAAG;IACxC,cAAc,EAAE,EAAkB;IAClC,kBAAkB,EAAE,EAA6B;IACjD,UAAU,EAAE,GAAG,EAAE;QACf,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;IACpE,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,KAAiB;IACpC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,eAAe,CAAC,KAA4B;IACnD,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC9C,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC","sourcesContent":["const pageErrors = (window.__pageErrors = {\n uncaughtErrors: [] as ErrorEvent[],\n uncaughtRejections: [] as PromiseRejectionEvent[],\n unregister: () => {\n window.removeEventListener('error', handleError);\n window.removeEventListener('unhandledrejection', handleRejection);\n },\n});\n\nfunction handleError(event: ErrorEvent) {\n pageErrors.uncaughtErrors.push(event);\n}\n\nfunction handleRejection(event: PromiseRejectionEvent) {\n pageErrors.uncaughtRejections.push(event);\n}\n\nwindow.addEventListener('error', handleError);\nwindow.addEventListener('unhandledrejection', handleRejection);\n"]}
|
|
@@ -5,7 +5,7 @@ const { readFile } = fs.promises;
|
|
|
5
5
|
const currentPath = fileURLToPath(path.dirname(import.meta.url));
|
|
6
6
|
let inlineScripts;
|
|
7
7
|
// List of files that we will load on demand.
|
|
8
|
-
const inlineScriptFiles = ['errorHandler.inline.js'];
|
|
8
|
+
const inlineScriptFiles = ['errorHandler.inline.js', 'pageLoadTimeMeasure.inline.js'];
|
|
9
9
|
export async function getInlineScripts() {
|
|
10
10
|
if (!inlineScripts) {
|
|
11
11
|
inlineScripts = await Promise.all(inlineScriptFiles.map((filename) => readFile(path.resolve(currentPath, filename), 'utf-8')));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInlineScripts.js","sourceRoot":"","sources":["../../../../../src/commands/start/appServer/inlineScripts/getInlineScripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;AACjC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,IAAI,aAAmC,CAAC;AAExC,6CAA6C;AAC7C,MAAM,iBAAiB,GAAG,CAAC,wBAAwB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"getInlineScripts.js","sourceRoot":"","sources":["../../../../../src/commands/start/appServer/inlineScripts/getInlineScripts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;AACjC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,IAAI,aAAmC,CAAC;AAExC,6CAA6C;AAC7C,MAAM,iBAAiB,GAAG,CAAC,wBAAwB,EAAE,+BAA+B,CAAC,CAAC;AAEtF,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,aAAa,EAAE;QAClB,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAC5F,CAAC;KACH;IAED,OAAO,aAAa,CAAC;AACvB,CAAC","sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst { readFile } = fs.promises;\nconst currentPath = fileURLToPath(path.dirname(import.meta.url));\n\nlet inlineScripts: string[] | undefined;\n\n// List of files that we will load on demand.\nconst inlineScriptFiles = ['errorHandler.inline.js', 'pageLoadTimeMeasure.inline.js'];\n\nexport async function getInlineScripts() {\n if (!inlineScripts) {\n inlineScripts = await Promise.all(\n inlineScriptFiles.map((filename) => readFile(path.resolve(currentPath, filename), 'utf-8')),\n );\n }\n\n return inlineScripts;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { overlayRootDivId } from '@ms-cloudpack/overlay';
|
|
2
|
+
/**
|
|
3
|
+
* Performance mark name for page load time.
|
|
4
|
+
* This makes it easier to see the page load time in the performance tab in dev tools
|
|
5
|
+
*/
|
|
6
|
+
const pageLoadMarker = 'CLOUDPACK_PAGE_LOAD_TIME';
|
|
7
|
+
// The below dom elements will be ignored by mutation observer
|
|
8
|
+
const excludedIds = [overlayRootDivId];
|
|
9
|
+
function debounce(func, wait) {
|
|
10
|
+
let timeout;
|
|
11
|
+
return function (...args) {
|
|
12
|
+
const later = () => {
|
|
13
|
+
timeout = null;
|
|
14
|
+
func(...args);
|
|
15
|
+
};
|
|
16
|
+
if (timeout) {
|
|
17
|
+
clearTimeout(timeout);
|
|
18
|
+
}
|
|
19
|
+
timeout = setTimeout(later, wait);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function hasMutationNonExcludedNodes(mutation) {
|
|
23
|
+
return [...mutation.addedNodes].some((node) => {
|
|
24
|
+
const id = node.id;
|
|
25
|
+
if (id) {
|
|
26
|
+
return !excludedIds.includes(id);
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const pageLoadTimePromise = new Promise((resolve) => {
|
|
32
|
+
const observer = new MutationObserver(domChanged);
|
|
33
|
+
function reportLastAnimationTime(time) {
|
|
34
|
+
// Stop observing the DOM
|
|
35
|
+
observer.disconnect();
|
|
36
|
+
// Resolve the promise with the page load time
|
|
37
|
+
resolve(time);
|
|
38
|
+
}
|
|
39
|
+
const debouncedReportLastAnimationTime = debounce(reportLastAnimationTime, 2000 /* wait ms */);
|
|
40
|
+
function domChanged(mutations) {
|
|
41
|
+
const shouldProcess = mutations.filter(hasMutationNonExcludedNodes).length > 0;
|
|
42
|
+
if (shouldProcess) {
|
|
43
|
+
requestAnimationFrame(() => {
|
|
44
|
+
// Get the current time in ms since the time when navigation has started in window
|
|
45
|
+
const time = performance.now();
|
|
46
|
+
// Clear previous marks
|
|
47
|
+
performance.clearMarks(pageLoadMarker);
|
|
48
|
+
// Mark the page load time
|
|
49
|
+
performance.mark(pageLoadMarker);
|
|
50
|
+
// Report the page load time
|
|
51
|
+
debouncedReportLastAnimationTime(time);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
observer.observe(document.body, {
|
|
56
|
+
childList: true,
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
window.__cloudpack = {
|
|
60
|
+
getPageLoadTime() {
|
|
61
|
+
return pageLoadTimePromise;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=pageLoadTimeMeasure.inline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pageLoadTimeMeasure.inline.js","sourceRoot":"","sources":["../../../../../src/commands/start/appServer/inlineScripts/pageLoadTimeMeasure.inline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;GAGG;AACH,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAElD,8DAA8D;AAC9D,MAAM,WAAW,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAIvC,SAAS,QAAQ,CAAsB,IAAqB,EAAE,IAAY;IACxE,IAAI,OAA6C,CAAC;IAElD,OAAO,UAAU,GAAG,IAAO;QACzB,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QAEF,IAAI,OAAO,EAAE;YACX,YAAY,CAAC,OAAO,CAAC,CAAC;SACvB;QACD,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,QAAwB;IAC3D,OAAO,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5C,MAAM,EAAE,GAAI,IAAwB,CAAC,EAAE,CAAC;QAExC,IAAI,EAAE,EAAE;YACN,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAClC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;IAC1D,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAElD,SAAS,uBAAuB,CAAC,IAAY;QAC3C,yBAAyB;QACzB,QAAQ,CAAC,UAAU,EAAE,CAAC;QAEtB,8CAA8C;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,MAAM,gCAAgC,GAAG,QAAQ,CAAC,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAE/F,SAAS,UAAU,CAAC,SAA2B;QAC7C,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAE/E,IAAI,aAAa,EAAE;YACjB,qBAAqB,CAAC,GAAG,EAAE;gBACzB,kFAAkF;gBAClF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBAE/B,uBAAuB;gBACvB,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBAEvC,0BAA0B;gBAC1B,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAEjC,4BAA4B;gBAC5B,gCAAgC,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC9B,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,WAAW,GAAG;IACnB,eAAe;QACb,OAAO,mBAAmB,CAAC;IAC7B,CAAC;CACF,CAAC","sourcesContent":["import { overlayRootDivId } from '@ms-cloudpack/overlay';\n\n/**\n * Performance mark name for page load time.\n * This makes it easier to see the page load time in the performance tab in dev tools\n */\nconst pageLoadMarker = 'CLOUDPACK_PAGE_LOAD_TIME';\n\n// The below dom elements will be ignored by mutation observer\nconst excludedIds = [overlayRootDivId];\n\ntype DebounceFunc<T extends unknown[]> = (...args: T) => void;\n\nfunction debounce<T extends unknown[]>(func: DebounceFunc<T>, wait: number): DebounceFunc<T> {\n let timeout: ReturnType<typeof setTimeout> | null;\n\n return function (...args: T) {\n const later = () => {\n timeout = null;\n func(...args);\n };\n\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(later, wait);\n };\n}\n\nfunction hasMutationNonExcludedNodes(mutation: MutationRecord) {\n return [...mutation.addedNodes].some((node) => {\n const id = (node as { id?: string }).id;\n\n if (id) {\n return !excludedIds.includes(id);\n }\n\n return true;\n });\n}\n\nconst pageLoadTimePromise = new Promise<number>((resolve) => {\n const observer = new MutationObserver(domChanged);\n\n function reportLastAnimationTime(time: number) {\n // Stop observing the DOM\n observer.disconnect();\n\n // Resolve the promise with the page load time\n resolve(time);\n }\n\n const debouncedReportLastAnimationTime = debounce(reportLastAnimationTime, 2000 /* wait ms */);\n\n function domChanged(mutations: MutationRecord[]) {\n const shouldProcess = mutations.filter(hasMutationNonExcludedNodes).length > 0;\n\n if (shouldProcess) {\n requestAnimationFrame(() => {\n // Get the current time in ms since the time when navigation has started in window\n const time = performance.now();\n\n // Clear previous marks\n performance.clearMarks(pageLoadMarker);\n\n // Mark the page load time\n performance.mark(pageLoadMarker);\n\n // Report the page load time\n debouncedReportLastAnimationTime(time);\n });\n }\n }\n\n observer.observe(document.body, {\n childList: true,\n });\n});\n\nwindow.__cloudpack = {\n getPageLoadTime() {\n return pageLoadTimePromise;\n },\n};\n"]}
|
|
@@ -18,6 +18,7 @@ import { addOverride } from './addOverride.js';
|
|
|
18
18
|
import { validateOverride } from './validateOverride.js';
|
|
19
19
|
import { getConfigPath, readConfigSync, writeConfigSync } from '../../common/config.js';
|
|
20
20
|
import { parseHttpsConfig } from '@ms-cloudpack/create-express-app';
|
|
21
|
+
import { rootSpan } from '../../initTelemetry.js';
|
|
21
22
|
/**
|
|
22
23
|
* The api server handles the data pub/sub (for things like reporting build status)
|
|
23
24
|
* and hosting the dashboard verb backend (for executing actions like loading vscode,
|
|
@@ -254,6 +255,12 @@ export async function startApiServer({ session, config, }) {
|
|
|
254
255
|
notifyReload();
|
|
255
256
|
break;
|
|
256
257
|
}
|
|
258
|
+
case 'reportMetric': {
|
|
259
|
+
const { metric, value } = request.data;
|
|
260
|
+
console.debug(`ApiServer: Received metric: ${metric}, value: ${value}`);
|
|
261
|
+
rootSpan?.addEvent(metric, value);
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
257
264
|
}
|
|
258
265
|
}
|
|
259
266
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startApiServer.js","sourceRoot":"","sources":["../../../src/commands/start/startApiServer.ts"],"names":[],"mappings":"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","sourcesContent":["import os from 'os';\nimport getPort from 'get-port';\nimport path from 'path';\nimport http from 'http';\nimport https from 'https';\nimport WebSocket, { WebSocketServer } from 'ws';\nimport { createDataBus } from '@ms-cloudpack/data-bus';\nimport { execSync } from 'child_process';\nimport { TaskRunner } from './TaskRunner.js';\nimport { getCachePath } from '../../common/getCachePath.js';\nimport fsExtra from 'fs-extra';\nimport fs from 'fs';\nimport { startWatcher } from './startWatcher.js';\nimport type {\n ApiServer,\n CloudpackConfig,\n Session,\n SessionStats,\n TaskDescription,\n TaskEndDescription,\n TaskStartDescription,\n} from '../../types.js';\nimport { PackageDefinitions } from '@ms-cloudpack/package-utilities';\nimport { createPackageOverrideTransform } from '../../common/createPackageOverrideTransform.js';\nimport { configTemplate } from '../../common/configTemplate.js';\nimport { addOverride } from './addOverride.js';\nimport { validateOverride } from './validateOverride.js';\nimport { getConfigPath, readConfigSync, writeConfigSync } from '../../common/config.js';\nimport { parseHttpsConfig } from '@ms-cloudpack/create-express-app';\n\n/**\n * The api server handles the data pub/sub (for things like reporting build status)\n * and hosting the dashboard verb backend (for executing actions like loading vscode,\n * changing dependencies, connecting new projects to the running session, etc.)\n *\n * Each time `cloudpack start` is run, an api server will start up for that session. The\n * hosted web page will have a \"cloudpack-api-server\" header which points\n * to the websocket server.\n *\n * The bundle server will call the api server to publish build status updates.\n *\n * The app server will burn the api server url on the host html, so that client-side\n * javascript can connect and subscribe to page changes.\n */\nexport async function startApiServer({\n session,\n config,\n}: {\n session: Session;\n config: CloudpackConfig;\n}): Promise<ApiServer> {\n const host = config?.devServer?.domain || 'localhost';\n const port = await getPort({ port: [9890, 9891, 9892, 9893] });\n const bus = createDataBus();\n const sessionStats: SessionStats = {\n status: 'idle',\n\n remainingTasks: 0,\n totalTasks: 0,\n\n totalErrors: 0,\n totalWarnings: 0,\n };\n\n const allTasks: Map<string, TaskDescription> = new Map();\n const taskRunner = new TaskRunner();\n\n function reportStart(taskStart: TaskStartDescription): void {\n const previousResult = allTasks.get(taskStart.id);\n const now = new Date().getTime();\n\n if (!previousResult) {\n sessionStats.totalTasks++;\n }\n\n if (previousResult?.status === 'complete') {\n sessionStats.totalErrors -= previousResult.errors?.length || 0;\n sessionStats.totalWarnings -= previousResult.warnings?.length || 0;\n }\n\n sessionStats.remainingTasks++;\n sessionStats.status = 'pending';\n\n allTasks.set(taskStart.id, {\n ...taskStart,\n status: 'pending',\n startTime: now,\n });\n\n bus.publish([session.id, 'status'], sessionStats);\n bus.publish([session.id, 'status-details'], { tasks: Array.from(allTasks.values()) });\n }\n\n function reportEnd(taskEnd: TaskEndDescription): void {\n const previousResult = allTasks.get(taskEnd.id);\n const now = new Date().getTime();\n\n if (previousResult) {\n sessionStats.remainingTasks--;\n sessionStats.totalErrors += taskEnd.errors?.length || 0;\n sessionStats.totalWarnings += taskEnd.warnings?.length || 0;\n\n allTasks.set(taskEnd.id, {\n ...previousResult,\n ...taskEnd,\n status: 'complete',\n durationMilliseconds: now - previousResult.startTime,\n lastUpdated: now,\n });\n\n if (sessionStats.remainingTasks === 0) {\n sessionStats.status = 'idle';\n }\n\n bus.publish([session.id, 'status'], sessionStats);\n bus.publish([session.id, 'status-details'], { tasks: Array.from(allTasks.values()) });\n }\n }\n\n bus.publish([session.id, 'status'], sessionStats);\n\n const addTask: ApiServer['addTask'] = (task, options) => {\n if (task.watch) {\n options = options || {};\n options.watch = () => {\n watcher.watch(task, { onSuccess: notifyReload });\n };\n }\n\n return taskRunner.add(\n {\n ...task,\n execute: async () => {\n reportStart({\n ...task.getStartDescription?.(),\n id: task.id,\n });\n\n let taskResult;\n\n try {\n taskResult = await task.execute();\n } catch (err) {\n // no-op\n }\n\n reportEnd({\n ...task.getEndDescription?.(taskResult),\n id: task.id,\n } as TaskEndDescription);\n\n return taskResult;\n },\n },\n options,\n );\n };\n\n const watcher = startWatcher(addTask);\n\n // Create a node http(s) server.\n let server: http.Server | https.Server;\n const httpsConfig = config?.devServer?.https;\n const protocol = httpsConfig ? 'wss' : 'ws';\n\n if (httpsConfig) {\n const { key, cert, passphrase } = parseHttpsConfig(httpsConfig);\n\n if (!key || !cert) {\n console.error('Invalid https config in cloudpack.config.js. Make sure key and cert are valid.');\n\n throw new Error('Invalid https config.');\n }\n\n server = https\n .createServer(\n {\n key,\n cert,\n passphrase,\n },\n () => {\n /* no-op */\n },\n )\n .listen(port, host);\n } else {\n server = http.createServer().listen(port, host);\n }\n\n // Create a websocket server which listens for subscriptions and verb requests,\n // and broadcasts the data to all connected clients.\n const socketServer = new WebSocketServer({ server }, () => {\n // console.log(`ApiServer: Started on port ${port}`);\n }).on('connection', (socket: WebSocket) => {\n const disposables = new Map<number, () => void>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function sendMessage(message: any) {\n socket.send(JSON.stringify(message, null, 2));\n }\n\n socket.send(\n JSON.stringify({\n type: 'sequence',\n sequence: session.sequence,\n }),\n );\n\n socket\n .on('message', (rawData) => {\n try {\n const request = JSON.parse(rawData.toString()) as {\n type: string;\n requestId?: string;\n data: Record<string, unknown>;\n };\n\n switch (request.type) {\n case 'subscribe': {\n const { path: subscriptionPath, id } = request.data;\n\n disposables.set(\n id as number,\n bus.subscribe(\n subscriptionPath as string[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n (data: any) => sendMessage({ type: 'notify', id, path: subscriptionPath, data }),\n ),\n );\n\n break;\n }\n\n case 'unsubscribe': {\n const id = request.data.id as number | undefined;\n if (id) {\n const dispose = disposables.get(id);\n\n if (dispose) {\n dispose();\n disposables.delete(id);\n }\n }\n\n break;\n }\n\n case 'openSource': {\n const { rootPath, relativePath = '', line, column } = request.data;\n const fullPath = path.join(rootPath as string, relativePath as string);\n\n console.log(`Opening VSCode with path: ${fullPath}`);\n execSync(`code --goto ${fullPath}:${line}:${column}`, { cwd: process.cwd() });\n break;\n }\n\n case 'open': {\n const { rootPath, relativePath = '' } = request.data;\n const fullPath = path.join(rootPath as string, relativePath as string);\n\n console.log(`Opening path: ${fullPath}`);\n const openCommand = os.platform() == 'win32' ? 'start' : 'open';\n\n execSync(`${openCommand} ${fullPath}`, { cwd: process.cwd() });\n break;\n }\n\n case 'editConfig': {\n const fullPath = path.resolve(getConfigPath());\n // Check if file exists\n if (!fs.existsSync(fullPath)) {\n // Create file with default config\n writeConfigSync(configTemplate);\n }\n console.log('Opening config file');\n console.log(`Opening VSCode with path: ${fullPath}`);\n execSync(`code --goto ${fullPath}:${1}`, { cwd: process.cwd() });\n break;\n }\n\n case 'addOverride': {\n // TODO: Send filename from request data to findResolveMapEntry when chromium Issue 1371551 is fixed.\n const { packageName, importPath } = request.data as Record<string, string>;\n (async () => {\n await addOverride({ session, packageName, importPath });\n session.incrementSessionVersion();\n notifyReload();\n })().catch(() => {\n // no-op\n });\n break;\n }\n\n case 'validateOverride': {\n // TODO: Get filename from request data when chromium Issue 1371551 is fixed.\n const { requestId, data } = request as { requestId: string; data: Record<string, string> };\n const { packageName, importPath } = data;\n (async () => {\n const fixable = await validateOverride({ session, packageName, importPath });\n sendMessage({ type: 'validateOverride', requestId, data: { fixable } });\n })().catch(() => {\n // no-op\n });\n break;\n }\n\n case 'restartAllTasks': {\n console.log('ApiServer: Restarting all tasks');\n\n // Clear entire local cache.\n fsExtra.emptyDirSync(getCachePath());\n\n // All tasks can be removed as notifyReload()\n // will cause the client to add the tasks again.\n allTasks.forEach((_, id) => {\n taskRunner.remove(id);\n });\n\n // Parse config if it exists.\n const cloudpackConfig = readConfigSync();\n\n // Initialize package overrides.\n PackageDefinitions.getInstance().registerTransform(createPackageOverrideTransform(cloudpackConfig));\n\n // Update session version.\n session.incrementSessionVersion();\n\n notifyReload();\n break;\n }\n\n case 'restartTask': {\n const { id, inputPath } = request.data as Record<string, string>;\n console.log(`ApiServer: Restarting task ${id}`);\n taskRunner.remove(id);\n session.incrementTargetVersion(inputPath);\n notifyReload();\n break;\n }\n }\n } catch (err) {\n console.error('ApiServer: error handling message');\n console.error('Error:', err);\n console.error('Message:', rawData.toString());\n }\n })\n .on('close', () => {\n for (const d of disposables.values()) {\n d();\n }\n });\n });\n\n const notifyReload = () => {\n session.sequence++;\n socketServer.clients.forEach((socket: WebSocket) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n type: 'reload',\n data: { sessionId: session.id },\n }),\n );\n }\n });\n };\n\n return {\n url: `${protocol}://${host}:${port}`,\n port,\n\n notifyReload,\n\n addTask: (task, options) => {\n return addTask(task, options);\n },\n\n close: () =>\n new Promise<void>((resolve, reject) => {\n socketServer.clients.forEach((socket: WebSocket) => socket.terminate());\n socketServer.close((err) => (err ? reject(err) : resolve()));\n server.close();\n }),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"startApiServer.js","sourceRoot":"","sources":["../../../src/commands/start/startApiServer.ts"],"names":[],"mappings":"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","sourcesContent":["import os from 'os';\nimport getPort from 'get-port';\nimport path from 'path';\nimport http from 'http';\nimport https from 'https';\nimport WebSocket, { WebSocketServer } from 'ws';\nimport { createDataBus } from '@ms-cloudpack/data-bus';\nimport { execSync } from 'child_process';\nimport { TaskRunner } from './TaskRunner.js';\nimport { getCachePath } from '../../common/getCachePath.js';\nimport fsExtra from 'fs-extra';\nimport fs from 'fs';\nimport { startWatcher } from './startWatcher.js';\nimport type {\n ApiServer,\n CloudpackConfig,\n Session,\n SessionStats,\n TaskDescription,\n TaskEndDescription,\n TaskStartDescription,\n} from '../../types.js';\nimport { PackageDefinitions } from '@ms-cloudpack/package-utilities';\nimport { createPackageOverrideTransform } from '../../common/createPackageOverrideTransform.js';\nimport { configTemplate } from '../../common/configTemplate.js';\nimport { addOverride } from './addOverride.js';\nimport { validateOverride } from './validateOverride.js';\nimport { getConfigPath, readConfigSync, writeConfigSync } from '../../common/config.js';\nimport { parseHttpsConfig } from '@ms-cloudpack/create-express-app';\nimport { rootSpan } from '../../initTelemetry.js';\n\n/**\n * The api server handles the data pub/sub (for things like reporting build status)\n * and hosting the dashboard verb backend (for executing actions like loading vscode,\n * changing dependencies, connecting new projects to the running session, etc.)\n *\n * Each time `cloudpack start` is run, an api server will start up for that session. The\n * hosted web page will have a \"cloudpack-api-server\" header which points\n * to the websocket server.\n *\n * The bundle server will call the api server to publish build status updates.\n *\n * The app server will burn the api server url on the host html, so that client-side\n * javascript can connect and subscribe to page changes.\n */\nexport async function startApiServer({\n session,\n config,\n}: {\n session: Session;\n config: CloudpackConfig;\n}): Promise<ApiServer> {\n const host = config?.devServer?.domain || 'localhost';\n const port = await getPort({ port: [9890, 9891, 9892, 9893] });\n const bus = createDataBus();\n const sessionStats: SessionStats = {\n status: 'idle',\n\n remainingTasks: 0,\n totalTasks: 0,\n\n totalErrors: 0,\n totalWarnings: 0,\n };\n\n const allTasks: Map<string, TaskDescription> = new Map();\n const taskRunner = new TaskRunner();\n\n function reportStart(taskStart: TaskStartDescription): void {\n const previousResult = allTasks.get(taskStart.id);\n const now = new Date().getTime();\n\n if (!previousResult) {\n sessionStats.totalTasks++;\n }\n\n if (previousResult?.status === 'complete') {\n sessionStats.totalErrors -= previousResult.errors?.length || 0;\n sessionStats.totalWarnings -= previousResult.warnings?.length || 0;\n }\n\n sessionStats.remainingTasks++;\n sessionStats.status = 'pending';\n\n allTasks.set(taskStart.id, {\n ...taskStart,\n status: 'pending',\n startTime: now,\n });\n\n bus.publish([session.id, 'status'], sessionStats);\n bus.publish([session.id, 'status-details'], { tasks: Array.from(allTasks.values()) });\n }\n\n function reportEnd(taskEnd: TaskEndDescription): void {\n const previousResult = allTasks.get(taskEnd.id);\n const now = new Date().getTime();\n\n if (previousResult) {\n sessionStats.remainingTasks--;\n sessionStats.totalErrors += taskEnd.errors?.length || 0;\n sessionStats.totalWarnings += taskEnd.warnings?.length || 0;\n\n allTasks.set(taskEnd.id, {\n ...previousResult,\n ...taskEnd,\n status: 'complete',\n durationMilliseconds: now - previousResult.startTime,\n lastUpdated: now,\n });\n\n if (sessionStats.remainingTasks === 0) {\n sessionStats.status = 'idle';\n }\n\n bus.publish([session.id, 'status'], sessionStats);\n bus.publish([session.id, 'status-details'], { tasks: Array.from(allTasks.values()) });\n }\n }\n\n bus.publish([session.id, 'status'], sessionStats);\n\n const addTask: ApiServer['addTask'] = (task, options) => {\n if (task.watch) {\n options = options || {};\n options.watch = () => {\n watcher.watch(task, { onSuccess: notifyReload });\n };\n }\n\n return taskRunner.add(\n {\n ...task,\n execute: async () => {\n reportStart({\n ...task.getStartDescription?.(),\n id: task.id,\n });\n\n let taskResult;\n\n try {\n taskResult = await task.execute();\n } catch (err) {\n // no-op\n }\n\n reportEnd({\n ...task.getEndDescription?.(taskResult),\n id: task.id,\n } as TaskEndDescription);\n\n return taskResult;\n },\n },\n options,\n );\n };\n\n const watcher = startWatcher(addTask);\n\n // Create a node http(s) server.\n let server: http.Server | https.Server;\n const httpsConfig = config?.devServer?.https;\n const protocol = httpsConfig ? 'wss' : 'ws';\n\n if (httpsConfig) {\n const { key, cert, passphrase } = parseHttpsConfig(httpsConfig);\n\n if (!key || !cert) {\n console.error('Invalid https config in cloudpack.config.js. Make sure key and cert are valid.');\n\n throw new Error('Invalid https config.');\n }\n\n server = https\n .createServer(\n {\n key,\n cert,\n passphrase,\n },\n () => {\n /* no-op */\n },\n )\n .listen(port, host);\n } else {\n server = http.createServer().listen(port, host);\n }\n\n // Create a websocket server which listens for subscriptions and verb requests,\n // and broadcasts the data to all connected clients.\n const socketServer = new WebSocketServer({ server }, () => {\n // console.log(`ApiServer: Started on port ${port}`);\n }).on('connection', (socket: WebSocket) => {\n const disposables = new Map<number, () => void>();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function sendMessage(message: any) {\n socket.send(JSON.stringify(message, null, 2));\n }\n\n socket.send(\n JSON.stringify({\n type: 'sequence',\n sequence: session.sequence,\n }),\n );\n\n socket\n .on('message', (rawData) => {\n try {\n const request = JSON.parse(rawData.toString()) as {\n type: string;\n requestId?: string;\n data: Record<string, unknown>;\n };\n\n switch (request.type) {\n case 'subscribe': {\n const { path: subscriptionPath, id } = request.data;\n\n disposables.set(\n id as number,\n bus.subscribe(\n subscriptionPath as string[],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n (data: any) => sendMessage({ type: 'notify', id, path: subscriptionPath, data }),\n ),\n );\n\n break;\n }\n\n case 'unsubscribe': {\n const id = request.data.id as number | undefined;\n if (id) {\n const dispose = disposables.get(id);\n\n if (dispose) {\n dispose();\n disposables.delete(id);\n }\n }\n\n break;\n }\n\n case 'openSource': {\n const { rootPath, relativePath = '', line, column } = request.data;\n const fullPath = path.join(rootPath as string, relativePath as string);\n\n console.log(`Opening VSCode with path: ${fullPath}`);\n execSync(`code --goto ${fullPath}:${line}:${column}`, { cwd: process.cwd() });\n break;\n }\n\n case 'open': {\n const { rootPath, relativePath = '' } = request.data;\n const fullPath = path.join(rootPath as string, relativePath as string);\n\n console.log(`Opening path: ${fullPath}`);\n const openCommand = os.platform() == 'win32' ? 'start' : 'open';\n\n execSync(`${openCommand} ${fullPath}`, { cwd: process.cwd() });\n break;\n }\n\n case 'editConfig': {\n const fullPath = path.resolve(getConfigPath());\n // Check if file exists\n if (!fs.existsSync(fullPath)) {\n // Create file with default config\n writeConfigSync(configTemplate);\n }\n console.log('Opening config file');\n console.log(`Opening VSCode with path: ${fullPath}`);\n execSync(`code --goto ${fullPath}:${1}`, { cwd: process.cwd() });\n break;\n }\n\n case 'addOverride': {\n // TODO: Send filename from request data to findResolveMapEntry when chromium Issue 1371551 is fixed.\n const { packageName, importPath } = request.data as Record<string, string>;\n (async () => {\n await addOverride({ session, packageName, importPath });\n session.incrementSessionVersion();\n notifyReload();\n })().catch(() => {\n // no-op\n });\n break;\n }\n\n case 'validateOverride': {\n // TODO: Get filename from request data when chromium Issue 1371551 is fixed.\n const { requestId, data } = request as { requestId: string; data: Record<string, string> };\n const { packageName, importPath } = data;\n (async () => {\n const fixable = await validateOverride({ session, packageName, importPath });\n sendMessage({ type: 'validateOverride', requestId, data: { fixable } });\n })().catch(() => {\n // no-op\n });\n break;\n }\n\n case 'restartAllTasks': {\n console.log('ApiServer: Restarting all tasks');\n\n // Clear entire local cache.\n fsExtra.emptyDirSync(getCachePath());\n\n // All tasks can be removed as notifyReload()\n // will cause the client to add the tasks again.\n allTasks.forEach((_, id) => {\n taskRunner.remove(id);\n });\n\n // Parse config if it exists.\n const cloudpackConfig = readConfigSync();\n\n // Initialize package overrides.\n PackageDefinitions.getInstance().registerTransform(createPackageOverrideTransform(cloudpackConfig));\n\n // Update session version.\n session.incrementSessionVersion();\n\n notifyReload();\n break;\n }\n\n case 'restartTask': {\n const { id, inputPath } = request.data as Record<string, string>;\n console.log(`ApiServer: Restarting task ${id}`);\n taskRunner.remove(id);\n session.incrementTargetVersion(inputPath);\n notifyReload();\n break;\n }\n\n case 'reportMetric': {\n const { metric, value } = request.data as { metric: string; value: number };\n console.debug(`ApiServer: Received metric: ${metric}, value: ${value}`);\n rootSpan?.addEvent(metric, value);\n break;\n }\n }\n } catch (err) {\n console.error('ApiServer: error handling message');\n console.error('Error:', err);\n console.error('Message:', rawData.toString());\n }\n })\n .on('close', () => {\n for (const d of disposables.values()) {\n d();\n }\n });\n });\n\n const notifyReload = () => {\n session.sequence++;\n socketServer.clients.forEach((socket: WebSocket) => {\n if (socket.readyState === WebSocket.OPEN) {\n socket.send(\n JSON.stringify({\n type: 'reload',\n data: { sessionId: session.id },\n }),\n );\n }\n });\n };\n\n return {\n url: `${protocol}://${host}:${port}`,\n port,\n\n notifyReload,\n\n addTask: (task, options) => {\n return addTask(task, options);\n },\n\n close: () =>\n new Promise<void>((resolve, reject) => {\n socketServer.clients.forEach((socket: WebSocket) => socket.terminate());\n socketServer.close((err) => (err ? reject(err) : resolve()));\n server.close();\n }),\n };\n}\n"]}
|
package/lib/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import path from 'path';
|
|
|
5
5
|
import { fileURLToPath, pathToFileURL } from 'url';
|
|
6
6
|
import { getVersion } from './getVersion.js';
|
|
7
7
|
import { PerfMarkerCliEntry } from './performance/markers.js';
|
|
8
|
-
import { initTelemetry } from './initTelemetry.js';
|
|
8
|
+
import { initTelemetry, setSharedTelemetryAttributes } from './initTelemetry.js';
|
|
9
9
|
import { setReporterOptions } from './reporter.js';
|
|
10
10
|
const currentPath = path.dirname(fileURLToPath(import.meta.url));
|
|
11
11
|
/**
|
|
@@ -39,6 +39,11 @@ export async function main() {
|
|
|
39
39
|
useDebugLogging,
|
|
40
40
|
useVerboseLogging,
|
|
41
41
|
});
|
|
42
|
+
setSharedTelemetryAttributes({
|
|
43
|
+
verb,
|
|
44
|
+
arguments: process.argv.slice(3).join(' '),
|
|
45
|
+
environment: process.env.CI || process.env.TF_BUILD ? 'ci' : 'local',
|
|
46
|
+
});
|
|
42
47
|
const commands = glob.sync('commands/*/index.js', { cwd: currentPath });
|
|
43
48
|
for (const commandPath of commands) {
|
|
44
49
|
const command = (await import(pathToFileURL(path.resolve(currentPath, commandPath)).toString()));
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,kBAAkB,EAClB,oBAAoB,EACpB,QAAQ,EACR,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n bold,\n debugLoggingConfig,\n defaultLoggingConfig,\n gradient,\n verboseLoggingConfig,\n} from '@ms-cloudpack/task-reporter';\nimport { Command } from 'commander';\nimport glob from 'glob';\nimport path from 'path';\nimport { fileURLToPath, pathToFileURL } from 'url';\nimport { getVersion } from './getVersion.js';\nimport { PerfMarkerCliEntry } from './performance/markers.js';\nimport { initTelemetry, setSharedTelemetryAttributes } from './initTelemetry.js';\nimport { setReporterOptions } from './reporter.js';\n\nconst currentPath = path.dirname(fileURLToPath(import.meta.url));\n\n/**\n * Entry point for the cloudpack CLI. Resolves all commands defined\n * within the \"./commands\" folder.\n */\nexport async function main() {\n performance.mark(PerfMarkerCliEntry);\n\n const program = new Command();\n const plainTextMode = process.argv.includes('--no-color') || process.argv.includes('-n');\n\n // Initialize the color setting as soon as possible.\n setReporterOptions({\n plainTextMode,\n });\n\n const version = getVersion();\n // the name \"Cloudpack\" preceed by an emoji representing sun behind cloud\n const productName = gradient(`Cloudpack`);\n const useDebugLogging = process.argv.includes('--debug') || process.argv.includes('-d');\n const verb = process.argv[2];\n const useVerboseLogging = process.argv.includes('--verbose') || process.argv.includes('-v') || verb === 'bundle';\n\n program.name(productName).version(version).usage('<command> [options]');\n\n setReporterOptions({\n productName,\n version,\n description: `Running \"${bold(process.argv.slice(2).join(' '))}\"`,\n ...defaultLoggingConfig,\n ...(useVerboseLogging && verboseLoggingConfig),\n ...(useDebugLogging && debugLoggingConfig),\n });\n\n await initTelemetry({\n useDebugLogging,\n useVerboseLogging,\n });\n\n setSharedTelemetryAttributes({\n verb,\n arguments: process.argv.slice(3).join(' '),\n environment: process.env.CI || process.env.TF_BUILD ? 'ci' : 'local',\n });\n\n const commands = glob.sync('commands/*/index.js', { cwd: currentPath });\n\n for (const commandPath of commands) {\n const command = (await import(pathToFileURL(path.resolve(currentPath, commandPath)).toString())) as {\n init: (cmd: Command) => void;\n };\n\n command.init(program);\n }\n\n program.option('-v, --verbose', 'Show additional details about the running tasks. (default: false)');\n program.option('-d, --debug', 'Show debug information (superset of --verbose). (default: false)');\n program.option('-n, --no-color', 'Disable colors in the output. (default: false)');\n\n program.parse(process.argv);\n\n if (program.args.length === 0) {\n program.help();\n }\n}\n\nexport type {\n ApiServer,\n BundleRequest,\n BundleServer,\n BundleTaskOptions,\n CloudpackConfig,\n TelemetryConfig,\n CreateHtmlFunction,\n CreateHtmlOptions,\n CreateHtmlResult,\n CreateHtmlScript,\n DevServer,\n PackageOverride,\n Route,\n Session,\n SessionStats,\n Task,\n TaskDescription,\n TaskEndDescription,\n TaskError,\n TaskOptions,\n TaskStartDescription,\n Watcher,\n} from './types.js';\n"]}
|
package/lib/initTelemetry.d.ts
CHANGED
|
@@ -11,6 +11,12 @@ export declare let rootSpan: Span | undefined;
|
|
|
11
11
|
* @returns
|
|
12
12
|
*/
|
|
13
13
|
export declare function initTelemetry(options: TelemetryInitOptions): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Adds shared attributes to all spans.
|
|
16
|
+
* No-op if telemetry is not initialized.
|
|
17
|
+
* @param attributes - key-value pair
|
|
18
|
+
*/
|
|
19
|
+
export declare function setSharedTelemetryAttributes(attributes: Record<string, string>): void;
|
|
14
20
|
/**
|
|
15
21
|
* Adds a shared attribute to all spans.
|
|
16
22
|
* No-op if telemetry is not initialized.
|
package/lib/initTelemetry.js
CHANGED
|
@@ -12,10 +12,6 @@ export let rootSpan;
|
|
|
12
12
|
*/
|
|
13
13
|
export async function initTelemetry(options) {
|
|
14
14
|
const instrumentationKey = (await readConfig()).telemetry?.instrumentationKey || process.env.CLOUDPACK_TELEMETRY_INSTRUMENTATION_KEY;
|
|
15
|
-
if (!instrumentationKey) {
|
|
16
|
-
console.warn('No connection string found. Telemetry will not be sent.');
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
15
|
const logLevel = options.useVerboseLogging ? 'verbose' : options.useDebugLogging ? 'debug' : undefined;
|
|
20
16
|
telemetryClient = await createTelemetryClient({
|
|
21
17
|
productVersion: getVersion(),
|
|
@@ -31,6 +27,16 @@ export async function initTelemetry(options) {
|
|
|
31
27
|
registerPerformanceObservers(rootSpan);
|
|
32
28
|
}
|
|
33
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Adds shared attributes to all spans.
|
|
32
|
+
* No-op if telemetry is not initialized.
|
|
33
|
+
* @param attributes - key-value pair
|
|
34
|
+
*/
|
|
35
|
+
export function setSharedTelemetryAttributes(attributes) {
|
|
36
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
37
|
+
telemetryClient?.setSharedSpanAttribute(key, value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
34
40
|
/**
|
|
35
41
|
* Adds a shared attribute to all spans.
|
|
36
42
|
* No-op if telemetry is not initialized.
|
package/lib/initTelemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initTelemetry.js","sourceRoot":"","sources":["../src/initTelemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAmC,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAO7F,IAAI,eAA4C,CAAC;AACjD,MAAM,CAAC,IAAI,QAA0B,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,kBAAkB,GACtB,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;IAE5G,
|
|
1
|
+
{"version":3,"file":"initTelemetry.js","sourceRoot":"","sources":["../src/initTelemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAmC,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAO7F,IAAI,eAA4C,CAAC;AACjD,MAAM,CAAC,IAAI,QAA0B,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,kBAAkB,GACtB,CAAC,MAAM,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;IAE5G,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvG,eAAe,GAAG,MAAM,qBAAqB,CAAC;QAC5C,cAAc,EAAE,UAAU,EAAE;QAC5B,kBAAkB;QAClB,QAAQ;QACR,gBAAgB,EAAE,WAAW;QAC7B,WAAW,EAAE,KAAK;KACnB,CAAC,CAAC;IAEH,iGAAiG;IACjG,QAAQ,GAAG,eAAe,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAEzD,IAAI,QAAQ,EAAE;QACZ,qFAAqF;QACrF,4BAA4B,CAAC,QAAQ,CAAC,CAAC;KACxC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,UAAkC;IAC7E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QACrD,eAAe,EAAE,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KACrD;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW,EAAE,KAAa;IACpE,eAAe,EAAE,sBAAsB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,OAAO,eAAe,EAAE,QAAQ,EAAE,CAAC;AACrC,CAAC","sourcesContent":["import { readConfig } from './common/config.js';\nimport { getVersion } from './getVersion.js';\nimport { type Span, type TelemetryClient, createTelemetryClient } from '@ms-cloudpack/telemetry';\nimport { registerPerformanceObservers } from './performance/registerPerformanceObservers.js';\n\nexport interface TelemetryInitOptions {\n useDebugLogging: boolean;\n useVerboseLogging: boolean;\n}\n\nlet telemetryClient: TelemetryClient | undefined;\nexport let rootSpan: Span | undefined;\n\n/**\n * Initialize the telemetry client, create the root span, register performance observers.\n * Telemetry will not be sent if no instrumentation key is found.\n * @param options - options to initialize telemetry\n * @returns\n */\nexport async function initTelemetry(options: TelemetryInitOptions) {\n const instrumentationKey =\n (await readConfig()).telemetry?.instrumentationKey || process.env.CLOUDPACK_TELEMETRY_INSTRUMENTATION_KEY;\n\n const logLevel = options.useVerboseLogging ? 'verbose' : options.useDebugLogging ? 'debug' : undefined;\n\n telemetryClient = await createTelemetryClient({\n productVersion: getVersion(),\n instrumentationKey,\n logLevel,\n serviceNamespace: 'cloudpack',\n serviceName: 'cli',\n });\n\n // This is the root span for the CLI. It will be used to track the duration of the CLI execution.\n rootSpan = telemetryClient.getTracer()?.startSpan('CLI');\n\n if (rootSpan) {\n // Register performance observers to track performance metrics as events of CLI span.\n registerPerformanceObservers(rootSpan);\n }\n}\n\n/**\n * Adds shared attributes to all spans.\n * No-op if telemetry is not initialized.\n * @param attributes - key-value pair\n */\nexport function setSharedTelemetryAttributes(attributes: Record<string, string>) {\n for (const [key, value] of Object.entries(attributes)) {\n telemetryClient?.setSharedSpanAttribute(key, value);\n }\n}\n\n/**\n * Adds a shared attribute to all spans.\n * No-op if telemetry is not initialized.\n * @param key - key of the attribute\n * @param value - value of the attribute\n */\nexport function setSharedTelemetryAttribute(key: string, value: string) {\n telemetryClient?.setSharedSpanAttribute(key, value);\n}\n\n/**\n * Ends rootSpan and flushes all telemetry.\n * No-op if telemetry is not initialized.\n * @returns a promise that resolves when telemetry is flushed and shutdown.\n */\nexport function stopTelemetry() {\n rootSpan?.end();\n return telemetryClient?.shutdown();\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ms-cloudpack/cli",
|
|
3
|
-
"version": "0.31.
|
|
3
|
+
"version": "0.31.7",
|
|
4
4
|
"description": "The Cloudpack command line interface - a tool for managing fast inner and outer looping in web apps.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -16,16 +16,16 @@
|
|
|
16
16
|
"cloudpack": "./bin/cloudpack.js"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@ms-cloudpack/bundler": "^0.11.
|
|
19
|
+
"@ms-cloudpack/bundler": "^0.11.17",
|
|
20
20
|
"@ms-cloudpack/create-express-app": "^1.3.0",
|
|
21
21
|
"@ms-cloudpack/data-bus": "^0.1.1",
|
|
22
22
|
"@ms-cloudpack/json-utilities": "^0.0.5",
|
|
23
|
-
"@ms-cloudpack/overlay": "^0.12.
|
|
23
|
+
"@ms-cloudpack/overlay": "^0.12.2",
|
|
24
24
|
"@ms-cloudpack/package-utilities": "^2.3.10",
|
|
25
25
|
"@ms-cloudpack/path-utilities": "^2.1.1",
|
|
26
26
|
"@ms-cloudpack/path-string-parsing": "^1.0.1",
|
|
27
27
|
"@ms-cloudpack/task-reporter": "^0.3.0",
|
|
28
|
-
"@ms-cloudpack/telemetry": "^0.2.
|
|
28
|
+
"@ms-cloudpack/telemetry": "^0.2.1",
|
|
29
29
|
"chokidar": "^3.5.3",
|
|
30
30
|
"commander": "^10.0.0",
|
|
31
31
|
"es-module-lexer": "^1.0.3",
|