From a919b04cf013728c55dba5e8d798a524d5dbdcb5 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sat, 30 Aug 2025 22:24:08 +0100 Subject: [PATCH] Add telemetry --- frontend/obsidian-plugin/package.json | 2 + .../obsidian-plugin/src/vault-link-plugin.ts | 45 ++++++++++ frontend/package-lock.json | 90 +++++++++++++++++++ 3 files changed, 137 insertions(+) diff --git a/frontend/obsidian-plugin/package.json b/frontend/obsidian-plugin/package.json index ea86ab84..42d2bec8 100644 --- a/frontend/obsidian-plugin/package.json +++ b/frontend/obsidian-plugin/package.json @@ -13,6 +13,8 @@ "author": "", "license": "MIT", "devDependencies": { + "@plausible-analytics/tracker": "^0.4.0", + "@sentry/browser": "^10.8.0", "@types/node": "^22.15.30", "css-loader": "^7.1.2", "date-fns": "^4.1.0", diff --git a/frontend/obsidian-plugin/src/vault-link-plugin.ts b/frontend/obsidian-plugin/src/vault-link-plugin.ts index b791ffb7..ce3f23ac 100644 --- a/frontend/obsidian-plugin/src/vault-link-plugin.ts +++ b/frontend/obsidian-plugin/src/vault-link-plugin.ts @@ -11,6 +11,8 @@ import { HistoryView } from "./views/history/history-view"; import { StatusBar } from "./views/status-bar/status-bar"; import { LogsView } from "./views/logs/logs-view"; import { StatusDescription } from "./views/status-description/status-description"; +import * as Sentry from "@sentry/browser"; +import { init as plausibleInit } from "@plausible-analytics/tracker"; import { SyncClient, rateLimit, @@ -50,6 +52,49 @@ export default class VaultLinkPlugin extends Plugin { const isDebugBuild = process.env.NODE_ENV === "development"; + if (!isDebugBuild) { + plausibleInit({ + domain: "vault-link", + endpoint: "https://stats.schmelczer.dev/status", + autoCapturePageviews: true, + captureOnLocalhost: true, + logging: true + }); + + Sentry.init({ + dsn: "https://56accd39d92442e788a457a04623cf57@bugs.schmelczer.dev/1", + skipBrowserExtensionCheck: false + }); + + const onError = (event: ErrorEvent): void => { + Sentry.captureException(event.error, { + extra: { + message: event.message, + filename: event.filename, + lineno: event.lineno, + colno: event.colno + } + }); + }; + window.addEventListener("error", onError); + this.disposables.push(() => { + window.removeEventListener("error", onError); + }); + + const onUnhandledRejection = ( + event: PromiseRejectionEvent + ): void => { + Sentry.captureException(event.reason); + }; + window.addEventListener("unhandledrejection", onUnhandledRejection); + this.disposables.push(() => { + window.removeEventListener( + "unhandledrejection", + onUnhandledRejection + ); + }); + } + const debugOptions = isDebugBuild ? { fetch: debugging.slowFetchFactory(1), diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 39fa503d..4415f1da 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -842,6 +842,94 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/@plausible-analytics/tracker": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@plausible-analytics/tracker/-/tracker-0.4.0.tgz", + "integrity": "sha512-KXwttotIZymo3yGzargrsxl9hjXJo5N+Kips3ZMamYqJxJqv1Zx+POC6WOFxYwDe1iJW7T91ItQYD8mZsznpXQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sentry-internal/browser-utils": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.8.0.tgz", + "integrity": "sha512-FaQX9eefc8sh3h3ZQy16U73KiH0xgDldXnrFiWK6OeWg8X4bJpnYbLqEi96LgHiQhjnnz+UQP1GDzH5oFuu5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "10.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry-internal/feedback": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.8.0.tgz", + "integrity": "sha512-n7SqgFQItq4QSPG7bCjcZcIwK6AatKnnmSDJ/i6e8jXNIyLwkEuY2NyvTXACxVdO/kafGD5VmrwnTo3Ekc1AMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "10.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry-internal/replay": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.8.0.tgz", + "integrity": "sha512-9+qDEoEjv4VopLuOzK1zM4LcvcUsvB5N0iJ+FRCM3XzzOCbebJOniXTQbt5HflJc3XLnQNKFdKfTfgj8M/0RKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry-internal/browser-utils": "10.8.0", + "@sentry/core": "10.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.8.0.tgz", + "integrity": "sha512-jC4OOwiNgrlIPeXIPMLkaW53BSS1do+toYHoWzzO5AXGpN6jRhanoSj36FpVuH2N3kFnxKVfVxrwh8L+/3vFWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry-internal/replay": "10.8.0", + "@sentry/core": "10.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry/browser": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.8.0.tgz", + "integrity": "sha512-2J7HST8/ixCaboq17yFn/j/OEokXSXoCBMXRrFx4FKJggKWZ90e2Iau5mP/IPPhrW+W9zCptCgNMY0167wS4qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sentry-internal/browser-utils": "10.8.0", + "@sentry-internal/feedback": "10.8.0", + "@sentry-internal/replay": "10.8.0", + "@sentry-internal/replay-canvas": "10.8.0", + "@sentry/core": "10.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@sentry/core": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.8.0.tgz", + "integrity": "sha512-scYzM/UOItu4PjEq6CpHLdArpXjIS0laHYxE4YjkIbYIH6VMcXGQbD/FSBClsnCr1wXRnlXfXBzj0hrQAFyw+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@types/codemirror": { "version": "5.60.8", "dev": true, @@ -4497,6 +4585,8 @@ "version": "0.6.4", "license": "MIT", "devDependencies": { + "@plausible-analytics/tracker": "^0.4.0", + "@sentry/browser": "^10.8.0", "@types/node": "^22.15.30", "css-loader": "^7.1.2", "date-fns": "^4.1.0",