| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- const {
- db,
- waitForDb,
- READ_PREFERENCE_SECONDARY,
- } = require('../app/src/infrastructure/mongodb')
- const { extname } = require('node:path')
- const FILE_TYPES = [
- '.jpg',
- '.jpeg',
- '.png',
- '.bmp',
- '.webp',
- '.svg',
- '.pdf',
- '.eps',
- '.gif',
- '.ico',
- '.tiff',
- ]
- const longestFileType = Math.max(...FILE_TYPES.map(fileType => fileType.length))
- async function main() {
- await waitForDb()
- const projects = db.projects.find(
- {},
- {
- projection: { rootFolder: 1 },
- readPreference: READ_PREFERENCE_SECONDARY,
- }
- )
- let projectsProcessed = 0
- const result = new Map(FILE_TYPES.map(fileType => [fileType, 0]))
- for await (const project of projects) {
- projectsProcessed += 1
- if (projectsProcessed % 100000 === 0) {
- console.log(projectsProcessed, 'projects processed')
- }
- countFiles(project.rootFolder[0], result)
- }
- const sortedResults = [...result.entries()].sort(
- ([, countA], [, countB]) => countB - countA
- )
- sortedResults.forEach(([fileType, count]) => {
- console.log(
- `${fileType.padStart(longestFileType, ' ')}: ${count
- .toString()
- .padStart(7, ' ')}`
- )
- })
- }
- function countFiles(folder, result) {
- if (folder.folders) {
- for (const subfolder of folder.folders) {
- countFiles(subfolder, result)
- }
- }
- if (folder.fileRefs) {
- for (const file of folder.fileRefs) {
- const fileType = extname(file.name).toLowerCase()
- const current = result.get(fileType)
- if (current !== undefined) {
- result.set(fileType, current + 1)
- }
- }
- }
- return result
- }
- main()
- .then(() => {
- process.exit(0)
- })
- .catch(err => {
- console.error(err)
- process.exit(1)
- })
|