SplitTestUserGetter.mjs 762 B

1234567891011121314151617181920212223242526272829303132
  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) {
  5. const projection = {
  6. analyticsId: 1,
  7. alphaProgram: 1,
  8. betaProgram: 1,
  9. labsProgram: 1,
  10. labsExperiments: 1,
  11. }
  12. if (splitTestName) {
  13. projection[`splitTests.${splitTestName}`] = 1
  14. } else {
  15. projection.splitTests = 1
  16. }
  17. const user = await UserGetter.promises.getUser(id, projection)
  18. Metrics.histogram(
  19. 'split_test_get_user_from_mongo_size',
  20. JSON.stringify(user).length,
  21. [0, 100, 500, 1000, 2000, 5000, 10000, 15000, 20000, 50000, 100000]
  22. )
  23. return user
  24. }
  25. export default {
  26. getUser: callbackify(getUser),
  27. promises: {
  28. getUser,
  29. },
  30. }