SplitTestUserGetter.mjs 818 B

123456789101112131415161718192021222324252627282930313233
  1. import { callbackify } from 'node:util'
  2. import Metrics from '@overleaf/metrics'
  3. import UserGetter from '../User/UserGetter.mjs'
  4. async function getUser(id, splitTestName, path) {
  5. Metrics.inc('split_test_get_user', 1, { path })
  6. const projection = {
  7. analyticsId: 1,
  8. alphaProgram: 1,
  9. betaProgram: 1,
  10. labsProgram: 1,
  11. labsExperiments: 1,
  12. }
  13. if (splitTestName) {
  14. projection[`splitTests.${splitTestName}`] = 1
  15. } else {
  16. projection.splitTests = 1
  17. }
  18. const user = await UserGetter.promises.getUser(id, projection)
  19. Metrics.histogram(
  20. 'split_test_get_user_from_mongo_size',
  21. JSON.stringify(user).length,
  22. [0, 100, 500, 1000, 2000, 5000, 10000, 15000, 20000, 50000, 100000]
  23. )
  24. return user
  25. }
  26. export default {
  27. getUser: callbackify(getUser),
  28. promises: {
  29. getUser,
  30. },
  31. }