extract_onboardingdatacollection_never_used_latex.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const csv = require('csv')
  2. const fs = require('fs')
  3. const {
  4. OnboardingDataCollection,
  5. } = require('../app/src/models/OnboardingDataCollection')
  6. const { User } = require('../app/src/models/User')
  7. /**
  8. * This script extracts ODC data with some extra fields, and filters on registration date and LaTeX experience
  9. *
  10. * It will:
  11. * — filter for used_latex=never
  12. * — augment rows with user registered date and email addresses
  13. * — filter on users registered after a certain date
  14. * — export updated CSV
  15. *
  16. * Usage:
  17. * - Locally:
  18. * - docker compose exec web bash
  19. * - node scripts/extract_onboardingdatacollection_never_used_latex.js
  20. * - On the server:
  21. * - rake connect:app[staging,web]
  22. * - node scripts/extract_onboardingdatacollection_never_used_latex.js
  23. * - exit
  24. * - kubectl cp web-standalone-prod-XXXXX:/tmp/odc_neverUsedLatex.csv ~/odc_neverUsedLatex.csv
  25. */
  26. const getEmails = async userIds => {
  27. const userEmails = await User.find(
  28. { _id: { $in: userIds }, signUpDate: { $gte: new Date(2024, 1, 18) } },
  29. { email: 1, signUpDate: 1 }
  30. ).exec()
  31. return userEmails.map(({ email, signUpDate }) => ({
  32. email,
  33. signUpDate: new Date(signUpDate).toISOString(),
  34. }))
  35. }
  36. const getUsers = async () => {
  37. const cursor = OnboardingDataCollection.find({ usedLatex: 'never' }).cursor()
  38. const userIds = []
  39. for (let doc = await cursor.next(); doc != null; doc = await cursor.next()) {
  40. userIds.push(doc._id.toString())
  41. }
  42. return userIds
  43. }
  44. const runScript = async () => {
  45. const users = await getUsers()
  46. const userEmails = await getEmails(users)
  47. console.log('Starting to write to csv file...')
  48. csv.stringify(
  49. userEmails,
  50. {
  51. header: true,
  52. columns: ['email', 'signUpDate'],
  53. },
  54. function (err, output) {
  55. fs.writeFileSync('/tmp/odc_neverUsedLatex.csv', output)
  56. if (err) {
  57. console.log('error writing csv output: ', err)
  58. process.exit(1)
  59. }
  60. process.exit()
  61. }
  62. )
  63. }
  64. runScript().catch(err => {
  65. console.error(err)
  66. process.exit(1)
  67. })