UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

76 lines (74 loc) 2.68 kB
import { getHelpers } from "../../database/helpers/index.js"; import { getDatabase, getDatabaseClient } from "../../database/index.js"; import { fetchUserCount } from "../../utils/fetch-user-count/fetch-user-count.js"; import { useBufferedCounter } from "../counter/use-buffered-counter.js"; import { TRACKED_KEYS, formatApiRequestCounts } from "../utils/format-api-request-counts.js"; import { getExtensionCount } from "../utils/get-extension-count.js"; import { getFieldCount } from "../utils/get-field-count.js"; import { getFilesizeSum } from "../utils/get-filesize-sum.js"; import { getItemCount } from "../utils/get-item-count.js"; import { getSettings } from "../utils/get-settings.js"; import { getUserItemCount } from "../utils/get-user-item-count.js"; import { useEnv } from "@directus/env"; import { toBoolean } from "@directus/utils"; import { version } from "directus/version"; //#region src/telemetry/lib/get-report.ts const basicCountTasks = [ { collection: "directus_dashboards" }, { collection: "directus_files" }, { collection: "directus_flows", where: [ "status", "=", "active" ] }, { collection: "directus_roles" }, { collection: "directus_shares" } ]; /** * Create a telemetry report about the anonymous usage of the current installation */ const getReport = async () => { const db = getDatabase(); const env = useEnv(); const requestCounter = useBufferedCounter("api-requests"); const helpers = getHelpers(db); const [basicCounts, userCounts, userItemCount, fieldsCounts, extensionsCounts, databaseSize, filesizes, settings, requestCounts] = await Promise.all([ getItemCount(db, basicCountTasks), fetchUserCount({ knex: db }), getUserItemCount(db), getFieldCount(db), getExtensionCount(db), helpers.schema.getDatabaseSize(), getFilesizeSum(db), getSettings(db), requestCounter.getAndResetAll([...TRACKED_KEYS]) ]); return { url: env["PUBLIC_URL"], version, database: getDatabaseClient(), dashboards: basicCounts.directus_dashboards, files: basicCounts.directus_files, flows: basicCounts.directus_flows, roles: basicCounts.directus_roles, shares: basicCounts.directus_shares, admin_users: userCounts.admin, app_users: userCounts.app, api_users: userCounts.api, collections: userItemCount.collections, items: userItemCount.items, fields_max: fieldsCounts.max, fields_total: fieldsCounts.total, extensions: extensionsCounts.totalEnabled, database_size: databaseSize ?? 0, files_size_total: filesizes.total, websockets_enabled: toBoolean(env["WEBSOCKETS_ENABLED"] ?? false), ...settings, ...formatApiRequestCounts(requestCounts) }; }; //#endregion export { getReport };