@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
61 lines (60 loc) • 2.37 kB
JavaScript
import { useEnv } from '@directus/env';
import { version } from 'directus/version';
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 { 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';
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
*/
export const getReport = async () => {
const db = getDatabase();
const env = useEnv();
const helpers = getHelpers(db);
const [basicCounts, userCounts, userItemCount, fieldsCounts, extensionsCounts, databaseSize, filesizes, settings] = await Promise.all([
getItemCount(db, basicCountTasks),
fetchUserCount({ knex: db }),
getUserItemCount(db),
getFieldCount(db),
getExtensionCount(db),
helpers.schema.getDatabaseSize(),
getFilesizeSum(db),
getSettings(db),
]);
return {
url: env['PUBLIC_URL'],
version: 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,
...settings,
};
};