Skip to content

Commit 55f9011

Browse files
committed
add machine_id support
1 parent 1f11a2d commit 55f9011

File tree

5 files changed

+32
-2
lines changed

5 files changed

+32
-2
lines changed

package-lock.json

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@
137137
"eslint-plugin-import": "^2.32.0",
138138
"fs-extra": "^11.3.1",
139139
"ms": "^2.1.3",
140+
"node-machine-id": "^1.1.12",
140141
"npm-run-all": "^4.1.5",
141142
"p-min-delay": "^4.1.0",
142143
"typescript": "^5.9.2",

src/extension.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import statusBar from "./plugins/status-bar.ts";
1111
import { PluginManager } from "./plugins.ts";
1212
import { createContainerStatusTracker } from "./utils/container-status.ts";
1313
import { createLocalStackStatusTracker } from "./utils/localstack-status.ts";
14-
import { getOrCreateExtensionSessionId } from "./utils/manage.ts";
14+
import {
15+
getOrCreateExtensionSessionId,
16+
getOrCreateMachineId,
17+
} from "./utils/manage.ts";
1518
import { createSetupStatusTracker } from "./utils/setup-status.ts";
1619
import { createTelemetry } from "./utils/telemetry.ts";
1720
import { createTimeTracker } from "./utils/time-tracker.ts";
@@ -80,7 +83,8 @@ export async function activate(context: ExtensionContext) {
8083
const startTelemetry = Date.now();
8184
outputChannel.trace(`[telemetry]: Starting...`);
8285
const sessionId = await getOrCreateExtensionSessionId(context);
83-
const telemetry = createTelemetry(outputChannel, sessionId);
86+
const machineId = await getOrCreateMachineId(context);
87+
const telemetry = createTelemetry(outputChannel, sessionId, machineId);
8488
const endTelemetry = Date.now();
8589
outputChannel.trace(
8690
`[telemetry]: Completed in ${ms(endTelemetry - startTelemetry, {

src/utils/manage.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import { machineId } from "node-machine-id";
12
import { v7 as uuidv7 } from "uuid";
23
import type { ExtensionContext, LogOutputChannel, MessageItem } from "vscode";
34
import { commands, env, Uri, window } from "vscode";
5+
import { tr } from "zod/v4/locales";
46

57
import { spawnLocalStack } from "./cli.ts";
68
import { exec } from "./exec.ts";
@@ -257,3 +259,15 @@ export async function getOrCreateExtensionSessionId(
257259
}
258260
return sessionId;
259261
}
262+
263+
// Checks for machine id in workspaceState, creates if missing (to avoid calling machineId multiple times)
264+
export async function getOrCreateMachineId(
265+
context: ExtensionContext,
266+
): Promise<string> {
267+
let machineIdValue = context.workspaceState.get<string>("machine_id");
268+
if (!machineIdValue) {
269+
machineIdValue = await machineId(true);
270+
await context.workspaceState.update("machine_id", machineIdValue);
271+
}
272+
return machineIdValue;
273+
}

src/utils/telemetry.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os from "node:os";
22

3+
import { machineId } from "node-machine-id";
34
import type { LogOutputChannel } from "vscode";
45
import { extensions, version as vscodeVersion, workspace } from "vscode";
56

@@ -127,6 +128,7 @@ async function postEvent(
127128
export function createTelemetry(
128129
outputChannel: LogOutputChannel,
129130
sessionId: string,
131+
machineId: string,
130132
): Telemetry {
131133
return {
132134
track(event) {
@@ -152,6 +154,7 @@ export function createTelemetry(
152154
schema_version: SCHEMA_VERSION,
153155
ide_version: vscodeVersion,
154156
extension_version: extensionVersion,
157+
machine_id: machineId,
155158
operating_system: os.platform(),
156159
// if anything inside payload include it
157160
...event.payload,

0 commit comments

Comments
 (0)