From c0c8570c3604ef22594c5d47d4c74ce16a9216ab Mon Sep 17 00:00:00 2001 From: Christian Capeans Date: Wed, 16 Nov 2022 17:08:51 +0100 Subject: [PATCH] Track content types, dzs, and components per user --- packages/core/admin/server/controllers/admin.js | 14 ++++++++++++++ .../core/strapi/lib/services/metrics/sender.js | 12 ++++++++++++ packages/generators/app/lib/utils/usage.js | 12 ++++++++++++ 3 files changed, 38 insertions(+) diff --git a/packages/core/admin/server/controllers/admin.js b/packages/core/admin/server/controllers/admin.js index 165ee80535..d5dfb3b3b6 100644 --- a/packages/core/admin/server/controllers/admin.js +++ b/packages/core/admin/server/controllers/admin.js @@ -1,6 +1,8 @@ 'use strict'; const path = require('path'); + +const { map, get, values, isEqual, sumBy, sum } = require('lodash/fp'); const execa = require('execa'); const _ = require('lodash'); const { exists } = require('fs-extra'); @@ -96,11 +98,23 @@ module.exports = { ); const isHostedOnStrapiCloud = env('STRAPI_HOSTING', null) === 'strapi.cloud'; + const numberOfContentTypes = _.size(strapi.contentTypes); + const numberOfComponents = _.size(strapi.components); + const numberOfDynamicZones = sum( + map( + (ct) => sumBy(isEqual('dynamiczone'), map(get('type'), values(get('attributes', ct)))), + strapi.contentTypes + ) + ); + return { data: { useTypescriptOnServer, useTypescriptOnAdmin, isHostedOnStrapiCloud, + numberOfContentTypes, + numberOfComponents, + numberOfDynamicZones, }, }; }, diff --git a/packages/core/strapi/lib/services/metrics/sender.js b/packages/core/strapi/lib/services/metrics/sender.js index d1314207e7..810a517678 100644 --- a/packages/core/strapi/lib/services/metrics/sender.js +++ b/packages/core/strapi/lib/services/metrics/sender.js @@ -3,6 +3,7 @@ const os = require('os'); const path = require('path'); const _ = require('lodash'); +const { map, get, values, isEqual, sumBy, sum } = require('lodash/fp'); const isDocker = require('is-docker'); const fetch = require('node-fetch'); const ciEnv = require('ci-info'); @@ -42,6 +43,14 @@ module.exports = (strapi) => { const serverRootPath = strapi.dirs.app.root; const adminRootPath = path.join(strapi.dirs.app.root, 'src', 'admin'); + const getNumberOfDynamicZones = () => + sum( + map( + (ct) => sumBy(isEqual('dynamiczone'), map(get('type'), values(get('attributes', ct)))), + strapi.contentTypes + ) + ); + const anonymousMetadata = { environment: strapi.config.environment, os: os.type(), @@ -56,6 +65,9 @@ module.exports = (strapi) => { useTypescriptOnServer: isUsingTypeScriptSync(serverRootPath), useTypescriptOnAdmin: isUsingTypeScriptSync(adminRootPath), isHostedOnStrapiCloud: env('STRAPI_HOSTING', null) === 'strapi.cloud', + numberOfContentTypes: _.size(strapi.contentTypes), + numberOfComponents: _.size(strapi.components), + numberOfDynamicZones: getNumberOfDynamicZones(), }; addPackageJsonStrapiMetadata(anonymousMetadata, strapi); diff --git a/packages/generators/app/lib/utils/usage.js b/packages/generators/app/lib/utils/usage.js index 27266b8db1..9d51e5276b 100644 --- a/packages/generators/app/lib/utils/usage.js +++ b/packages/generators/app/lib/utils/usage.js @@ -2,6 +2,7 @@ const os = require('os'); const _ = require('lodash'); +const { map, get, values, isEqual, sumBy, sum } = require('lodash/fp'); const fetch = require('node-fetch'); const sentry = require('@sentry/node'); @@ -53,6 +54,14 @@ function captureStderr(name, error) { return captureError(name); } +const getNumberOfDynamicZones = () => + sum( + map( + (ct) => sumBy(isEqual('dynamiczone'), map(get('type'), values(get('attributes', ct)))), + strapi.contentTypes + ) + ); + const getProperties = (scope, error) => ({ error: typeof error === 'string' ? error : error && error.message, os: os.type(), @@ -67,6 +76,9 @@ const getProperties = (scope, error) => ({ useTypescriptOnAdmin: scope.useTypescript, isHostedOnStrapiCloud: process.env.STRAPI_HOSTING === 'strapi.cloud', noRun: (scope.runQuickstartApp !== true).toString(), + numberOfContentTypes: _.size(strapi.contentTypes), + numberOfComponents: _.size(strapi.components), + numberOfDynamicZones: getNumberOfDynamicZones(), }); function trackEvent(event, body) {