count_image_files.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. const { ReadPreference } = require('mongodb')
  2. const { db, waitForDb } = require('../app/src/infrastructure/mongodb')
  3. const { extname } = require('node:path')
  4. const FILE_TYPES = [
  5. '.jpg',
  6. '.jpeg',
  7. '.png',
  8. '.bmp',
  9. '.webp',
  10. '.svg',
  11. '.pdf',
  12. '.eps',
  13. '.gif',
  14. '.ico',
  15. '.tiff',
  16. ]
  17. const longestFileType = Math.max(...FILE_TYPES.map(fileType => fileType.length))
  18. async function main() {
  19. await waitForDb()
  20. const projects = db.projects.find(
  21. {},
  22. { projection: { rootFolder: 1 }, readPreference: ReadPreference.SECONDARY }
  23. )
  24. let projectsProcessed = 0
  25. const result = new Map(FILE_TYPES.map(fileType => [fileType, 0]))
  26. for await (const project of projects) {
  27. projectsProcessed += 1
  28. if (projectsProcessed % 100000 === 0) {
  29. console.log(projectsProcessed, 'projects processed')
  30. }
  31. countFiles(project.rootFolder[0], result)
  32. }
  33. const sortedResults = [...result.entries()].sort(
  34. ([, countA], [, countB]) => countB - countA
  35. )
  36. sortedResults.forEach(([fileType, count]) => {
  37. console.log(
  38. `${fileType.padStart(longestFileType, ' ')}: ${count
  39. .toString()
  40. .padStart(7, ' ')}`
  41. )
  42. })
  43. }
  44. function countFiles(folder, result) {
  45. if (folder.folders) {
  46. for (const subfolder of folder.folders) {
  47. countFiles(subfolder, result)
  48. }
  49. }
  50. if (folder.fileRefs) {
  51. for (const file of folder.fileRefs) {
  52. const fileType = extname(file.name).toLowerCase()
  53. const current = result.get(fileType)
  54. if (current !== undefined) {
  55. result.set(fileType, current + 1)
  56. }
  57. }
  58. }
  59. return result
  60. }
  61. main()
  62. .then(() => {
  63. process.exit(0)
  64. })
  65. .catch(err => {
  66. console.error(err)
  67. process.exit(1)
  68. })