mirror of
https://github.com/directus/directus.git
synced 2026-04-25 03:00:53 -04:00
Add telemetry
This commit is contained in:
25470
api/package-lock.json
generated
25470
api/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -103,6 +103,7 @@
|
||||
"macos-release": "^2.4.1",
|
||||
"ms": "^2.1.2",
|
||||
"nanoid": "^3.1.12",
|
||||
"node-machine-id": "^1.1.12",
|
||||
"nodemailer": "^6.4.11",
|
||||
"ora": "^4.1.1",
|
||||
"otplib": "^12.0.1",
|
||||
|
||||
@@ -6,6 +6,7 @@ import path from 'path';
|
||||
|
||||
import { validateEnv } from './utils/validate-env';
|
||||
import env from './env';
|
||||
import { track } from './utils/track';
|
||||
|
||||
import errorHandler from './middleware/error-handler';
|
||||
import cors from './middleware/cors';
|
||||
@@ -106,4 +107,6 @@ app.use(errorHandler);
|
||||
const webhooksService = new WebhooksService();
|
||||
webhooksService.register();
|
||||
|
||||
track('serverStarted');
|
||||
|
||||
export default app;
|
||||
|
||||
@@ -30,7 +30,7 @@ const defaults: Record<string, any> = {
|
||||
CORS_ENABLED: false,
|
||||
|
||||
CACHE_ENABLED: false,
|
||||
CACHE_STORE: false,
|
||||
CACHE_STORE: 'memory',
|
||||
CACHE_TTL: '30m',
|
||||
CACHE_NAMESPACE: 'system-cache',
|
||||
|
||||
|
||||
74
api/src/utils/track.ts
Normal file
74
api/src/utils/track.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import axios from 'axios';
|
||||
import os from 'os';
|
||||
import { machineId } from 'node-machine-id';
|
||||
import ms from 'ms';
|
||||
|
||||
import logger from '../logger';
|
||||
|
||||
import env from '../env';
|
||||
// @ts-ignore
|
||||
import { version } from '../../package.json';
|
||||
|
||||
export async function track(event: string) {
|
||||
const info = await getEnvInfo(event);
|
||||
|
||||
try {
|
||||
await axios.post('https://telemetry.directus.io/', info);
|
||||
} catch (err) {
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
logger.error(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function getEnvInfo(event: string) {
|
||||
return {
|
||||
version: version,
|
||||
event: event,
|
||||
project_id: env.KEY,
|
||||
machine_id: await machineId(),
|
||||
environment: process.env.NODE_ENV,
|
||||
stack: 'node',
|
||||
os: {
|
||||
arch: os.arch(),
|
||||
platform: os.platform(),
|
||||
release: os.release(),
|
||||
},
|
||||
rate_limiter: {
|
||||
enabled: env.RATE_LIMITER_ENABLED,
|
||||
points: +env.RATE_LIMITER_POINTS,
|
||||
duration: +env.RATE_LIMITER_DURATION,
|
||||
store: env.RATE_LIMITER_STORE,
|
||||
},
|
||||
cache: {
|
||||
enabled: env.CACHE_ENABLED,
|
||||
ttl: ms(env.CACHE_TTL),
|
||||
store: env.CACHE_STORE,
|
||||
},
|
||||
storage: {
|
||||
drivers: getStorageDrivers()
|
||||
},
|
||||
cors: {
|
||||
enabled: env.CORS_ENABLED,
|
||||
},
|
||||
email: {
|
||||
transport: env.EMAIL_TRANSPORT,
|
||||
},
|
||||
oauth: {
|
||||
providers: env.OAUTH_PROVIDERS.split(',').filter((p?: string) => p).map((p: string) => p.trim()),
|
||||
},
|
||||
db_client: env.DB_CLIENT
|
||||
}
|
||||
}
|
||||
|
||||
function getStorageDrivers() {
|
||||
const drivers: string[] = [];
|
||||
const locations = env.STORAGE_LOCATIONS.split(',').filter((l?: string) => l).map((l: string) => l.trim());
|
||||
|
||||
for (const location of locations) {
|
||||
const driver = env[`STORAGE_${location.toUpperCase()}_DRIVER`];
|
||||
drivers.push(driver);
|
||||
}
|
||||
|
||||
return drivers;
|
||||
}
|
||||
Reference in New Issue
Block a user