update telemetry

This commit is contained in:
miloschwartz
2026-04-22 15:06:37 -07:00
parent 4c000c1d49
commit 2a281ec002

View File

@@ -2,7 +2,7 @@ import { PostHog } from "posthog-node";
import config from "./config"; import config from "./config";
import { getHostMeta } from "./hostMeta"; import { getHostMeta } from "./hostMeta";
import logger from "@server/logger"; import logger from "@server/logger";
import { apiKeys, db, roles, siteResources } from "@server/db"; import { alertRules, apiKeys, blueprints, db, roles, siteResources } from "@server/db";
import { sites, users, orgs, resources, clients, idp } from "@server/db"; import { sites, users, orgs, resources, clients, idp } from "@server/db";
import { eq, count, notInArray, and, isNotNull, isNull } from "drizzle-orm"; import { eq, count, notInArray, and, isNotNull, isNull } from "drizzle-orm";
import { APP_VERSION } from "./consts"; import { APP_VERSION } from "./consts";
@@ -15,6 +15,7 @@ class TelemetryClient {
private client: PostHog | null = null; private client: PostHog | null = null;
private enabled: boolean; private enabled: boolean;
private intervalId: NodeJS.Timeout | null = null; private intervalId: NodeJS.Timeout | null = null;
private collectionIntervalDays = 14;
constructor() { constructor() {
const enabled = config.getRawConfig().app.telemetry.anonymous_usage; const enabled = config.getRawConfig().app.telemetry.anonymous_usage;
@@ -33,7 +34,7 @@ class TelemetryClient {
this.client = new PostHog( this.client = new PostHog(
"phc_QYuATSSZt6onzssWcYJbXLzQwnunIpdGGDTYhzK3VjX", "phc_QYuATSSZt6onzssWcYJbXLzQwnunIpdGGDTYhzK3VjX",
{ {
host: "https://pangolin.net/relay-O7yI" host: "https://telemetry.fossorial.io/relay-O7yI"
} }
); );
@@ -72,7 +73,7 @@ class TelemetryClient {
logger.debug("Successfully sent analytics data"); logger.debug("Successfully sent analytics data");
}); });
}, },
336 * 60 * 60 * 1000 this.collectionIntervalDays * 24 * 60 * 60 * 1000 // Convert days to milliseconds
); );
this.collectAndSendAnalytics().catch((err) => { this.collectAndSendAnalytics().catch((err) => {
@@ -157,6 +158,14 @@ class TelemetryClient {
}) })
.from(sites); .from(sites);
const [numAlertRules] = await db
.select({ count: count() })
.from(alertRules);
const [blueprintsCount] = await db
.select({ count: count() })
.from(blueprints);
const supporterKey = config.getSupporterData(); const supporterKey = config.getSupporterData();
const allPrivateResources = await db.select().from(siteResources); const allPrivateResources = await db.select().from(siteResources);
@@ -165,11 +174,14 @@ class TelemetryClient {
let numPrivResourceAliases = 0; let numPrivResourceAliases = 0;
let numPrivResourceHosts = 0; let numPrivResourceHosts = 0;
let numPrivResourceCidr = 0; let numPrivResourceCidr = 0;
let numPrivResourceHttp = 0;
for (const res of allPrivateResources) { for (const res of allPrivateResources) {
if (res.mode === "host") { if (res.mode === "host") {
numPrivResourceHosts += 1; numPrivResourceHosts += 1;
} else if (res.mode === "cidr") { } else if (res.mode === "cidr") {
numPrivResourceCidr += 1; numPrivResourceCidr += 1;
} else if (res.mode === "http") {
numPrivResourceHttp += 1;
} }
if (res.alias) { if (res.alias) {
@@ -187,6 +199,9 @@ class TelemetryClient {
numPrivateResources: numPrivResources, numPrivateResources: numPrivResources,
numPrivateResourceAliases: numPrivResourceAliases, numPrivateResourceAliases: numPrivResourceAliases,
numPrivateResourceHosts: numPrivResourceHosts, numPrivateResourceHosts: numPrivResourceHosts,
numPrivateResourceCidr: numPrivResourceCidr,
numPrivateResourceHttp: numPrivResourceHttp,
numAlertRules: numAlertRules.count,
numUserDevices: userDevicesCount.count, numUserDevices: userDevicesCount.count,
numMachineClients: machineClients.count, numMachineClients: machineClients.count,
numIdentityProviders: idpCount.count, numIdentityProviders: idpCount.count,
@@ -197,6 +212,7 @@ class TelemetryClient {
appVersion: APP_VERSION, appVersion: APP_VERSION,
numApiKeys: numApiKeys.count, numApiKeys: numApiKeys.count,
numCustomRoles: customRoles.count, numCustomRoles: customRoles.count,
numBlueprints: blueprintsCount.count,
supporterStatus: { supporterStatus: {
valid: supporterKey?.valid || false, valid: supporterKey?.valid || false,
tier: supporterKey?.tier || "None", tier: supporterKey?.tier || "None",
@@ -285,10 +301,12 @@ class TelemetryClient {
num_private_resource_aliases: num_private_resource_aliases:
stats.numPrivateResourceAliases, stats.numPrivateResourceAliases,
num_private_resource_hosts: stats.numPrivateResourceHosts, num_private_resource_hosts: stats.numPrivateResourceHosts,
num_private_resource_cidr: stats.numPrivateResourceCidr,
num_user_devices: stats.numUserDevices, num_user_devices: stats.numUserDevices,
num_machine_clients: stats.numMachineClients, num_machine_clients: stats.numMachineClients,
num_identity_providers: stats.numIdentityProviders, num_identity_providers: stats.numIdentityProviders,
num_sites_online: stats.numSitesOnline, num_sites_online: stats.numSitesOnline,
num_blueprint_runs: stats.numBlueprints,
num_resources_sso_enabled: stats.resources.filter( num_resources_sso_enabled: stats.resources.filter(
(r) => r.sso (r) => r.sso
).length, ).length,