feat: move telemetry out of core into a usage statistics plugin

This commit is contained in:
LukeGus committed 2026-09-30 23:54:38 -05:00
1 parent f8edb5f299
commit 6217b91ae2
56 files changed
+2064 -564

No files matched your search

@@ -11,7 +11,6 @@ import {
AUDIT_FORWARD_URL_ENV,
AUDIT_FORWARD_URL_SETTING,
} from "../../utils/audit-forwarder.js";
import { getTelemetryEnvOverride } from "../../utils/analytics.js";
import {
NOTIFICATION_PRIVATE_ALLOWLIST_KEY,
parseNotificationAllowlist,
@@ -193,117 +192,6 @@ export function registerUserSettingsRoutes(
}
});
/**
* @openapi
* /users/analytics-enabled:
* get:
* summary: Get analytics enabled setting
* description: Returns whether anonymous usage telemetry is enabled, and whether the value is locked by the ENABLE_TELEMETRY environment variable.
* tags:
* - Users
* responses:
* 200:
* description: Analytics enabled status.
* content:
* application/json:
* schema:
* type: object
* properties:
* enabled:
* type: boolean
* locked:
* type: boolean
*/
router.get("/analytics-enabled", authenticateJWT, async (_req, res) => {
try {
const override = getTelemetryEnvOverride();
if (override !== null) {
return res.json({ enabled: override, locked: true });
}
res.json({
enabled: await createCurrentSettingsRepository().getBoolean(
"analytics_enabled",
true,
),
locked: false,
});
} catch (err) {
authLogger.error("Failed to get analytics enabled setting", err);
res
.status(500)
.json({ error: "Failed to get analytics enabled setting" });
}
});
/**
* @openapi
* /users/analytics-enabled:
* patch:
* summary: Update analytics enabled setting (admin only)
* description: Enables or disables the daily anonymous usage telemetry heartbeat.
* tags:
* - Users
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* enabled:
* type: boolean
* responses:
* 200:
* description: Setting updated.
* 403:
* description: Not authorized.
* 409:
* description: Setting is locked by the ENABLE_TELEMETRY environment variable.
* 500:
* description: Failed to update setting.
*/
router.patch("/analytics-enabled", authenticateJWT, async (req, res) => {
const userId = (req as AuthenticatedRequest).userId;
try {
const actor = await getAdminActor(userId);
if (!actor) {
return res.status(403).json({ error: "Not authorized" });
}
if (getTelemetryEnvOverride() !== null) {
return res.status(409).json({
error: "Telemetry is locked by the ENABLE_TELEMETRY env variable",
});
}
const { enabled } = req.body;
if (typeof enabled !== "boolean") {
return res.status(400).json({ error: "enabled must be a boolean" });
}
await createCurrentSettingsRepository().set(
"analytics_enabled",
enabled ? "true" : "false",
);
const { ipAddress, userAgent } = getRequestMeta(req);
await logAudit({
userId,
username: actor.username ?? userId,
action: "update_analytics_enabled",
resourceType: "setting",
details: JSON.stringify({ enabled }),
ipAddress,
userAgent,
success: true,
});
res.json({ enabled });
} catch (err) {
authLogger.error("Failed to update analytics enabled setting", err);
res
.status(500)
.json({ error: "Failed to update analytics enabled setting" });
}
});
/**
* @openapi
* /users/audit-forwarding: