aboutsummaryrefslogtreecommitdiff
path: root/packages/telemetry/src/system-info.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/telemetry/src/system-info.ts')
-rw-r--r--packages/telemetry/src/system-info.ts78
1 files changed, 78 insertions, 0 deletions
diff --git a/packages/telemetry/src/system-info.ts b/packages/telemetry/src/system-info.ts
new file mode 100644
index 000000000..2913b6941
--- /dev/null
+++ b/packages/telemetry/src/system-info.ts
@@ -0,0 +1,78 @@
+import os from 'node:os';
+import { name as ciName, isCI } from 'ci-info';
+import isDocker from 'is-docker';
+import isWSL from 'is-wsl';
+
+/**
+ * Astro Telemetry -- System Info
+ *
+ * To better understand our telemetry insights, Astro collects the following anonymous information
+ * about the system that it runs on. This helps us prioritize fixes and new features based on a
+ * better understanding of our real-world system requirements.
+ *
+ * ~~~
+ *
+ * Q: Can this system info be traced back to me?
+ *
+ * A: No personally identifiable information is contained in the system info that we collect. It could
+ * be possible for someone with direct access to your machine to collect this information themselves
+ * and then attempt to match it all together with our collected telemetry data, however most users'
+ * systems are probably not uniquely identifiable via their system info alone.
+ *
+ * ~~~
+ *
+ * Q: I don't want Astro to collect system info. How can I disable it?
+ *
+ * A: You can disable telemetry completely at any time by running `astro telemetry disable`. There is
+ * currently no way to disable this otherwise while keeping the rest of telemetry enabled.
+ */
+
+export type SystemInfo = {
+ systemPlatform: NodeJS.Platform;
+ systemRelease: string;
+ systemArchitecture: string;
+ astroVersion: string;
+ nodeVersion: string;
+ viteVersion: string;
+ cpuCount: number;
+ cpuModel: string | null;
+ cpuSpeed: number | null;
+ memoryInMb: number;
+ isDocker: boolean;
+ isTTY: boolean;
+ isWSL: boolean;
+ isCI: boolean;
+ ciName: string | null;
+};
+
+let meta: SystemInfo | undefined;
+
+export function getSystemInfo(versions: { viteVersion: string; astroVersion: string }): SystemInfo {
+ if (meta) {
+ return meta;
+ }
+
+ const cpus = os.cpus() || [];
+
+ return {
+ // Version information
+ nodeVersion: process.version.replace(/^v?/, ''),
+ viteVersion: versions.viteVersion,
+ astroVersion: versions.astroVersion,
+ // Software information
+ systemPlatform: os.platform(),
+ systemRelease: os.release(),
+ systemArchitecture: os.arch(),
+ // Machine information
+ cpuCount: cpus.length,
+ cpuModel: cpus.length ? cpus[0].model : null,
+ cpuSpeed: cpus.length ? cpus[0].speed : null,
+ memoryInMb: Math.trunc(os.totalmem() / Math.pow(1024, 2)),
+ // Environment information
+ isDocker: isDocker(),
+ isTTY: process.stdout.isTTY,
+ isWSL,
+ isCI,
+ ciName,
+ };
+}