Przeglądaj źródła

Merge pull request #12075 from overleaf/bg-track-changes-debug-unmigrated

add option to check history of unmigrated projects

GitOrigin-RevId: c27a7b5227cb10603ae8e9d8136859a158caaf8a
Brian Gough 3 lat temu
rodzic
commit
61e8dba859
1 zmienionych plików z 43 dodań i 26 usunięć
  1. 43 26
      services/web/scripts/history/debug_history.js

+ 43 - 26
services/web/scripts/history/debug_history.js

@@ -1,6 +1,7 @@
 // Script to debug the track-changes history of the documents in a project.
 // Usage:
 //   node debug_history.js --project-id=<project_id>
+//   node debug_history.js --all   # to check all unmigrated projects
 //
 // Example output:
 //   $ node scripts/debug_history.js  --project-id=63ff3adc06177192f18a6b38
@@ -13,7 +14,11 @@
 //   truncating to content length","op":{"p":32,"d":6},"contentLength":24}]}],"status":"failed"}
 
 /* eslint-disable camelcase */
-const { waitForDb } = require('../../../track-changes/app/js/mongodb')
+const TrackChangesMongoDb = require('../../../track-changes/app/js/mongodb')
+const { waitForDb } = require('../../app/src/infrastructure/mongodb')
+const {
+  findProjects,
+} = require('../../modules/history-migration/app/src/HistoryUpgradeHelper')
 const PackManager = require('../../../track-changes/app/js/PackManager')
 const {
   packsAreDuplicated,
@@ -32,13 +37,14 @@ logger.initialize('debug-history')
 logger.logger.streams = []
 
 const options = {
-  boolean: ['verbose', 'raw', 'help'],
+  boolean: ['all', 'verbose', 'raw', 'help'],
   string: ['project-id'],
   alias: {
     'project-id': 'p',
     verbose: 'v',
     raw: 'r',
     help: 'h',
+    all: 'a',
   },
   default: {},
 }
@@ -46,7 +52,7 @@ const argv = minimist(process.argv.slice(2), options)
 
 function usage() {
   console.log(
-    `Usage: ${process.argv[1]} [--project-id=<project_id>] [--verbose] [--raw]`
+    `Usage: ${process.argv[1]} [--project-id=<project_id> | --all] [--verbose] [--raw]`
   )
   process.exit(1)
 }
@@ -270,40 +276,51 @@ async function rewindDoc(projectId, docId) {
 }
 
 async function main() {
-  const projectId = argv['project-id']
-  if (!projectId || argv.help) {
+  // Get a list of projects to migrate
+  let projectIds = []
+  if (argv.all) {
+    const projectsToMigrate = await findProjects(
+      { 'overleaf.history.display': { $ne: true } },
+      { _id: 1, overleaf: 1 }
+    )
+    projectIds = projectsToMigrate.map(p => p._id.toString())
+    console.log('Unmigrated projects', projectIds.length)
+  } else if (argv['project-id']) {
+    projectIds = [argv['project-id']]
+  } else {
     usage()
     process.exit(1)
   }
-  const docIds = await PackManager.promises.findAllDocsInProject(projectId)
-  if (!docIds.length) {
-    console.log('No docs found for project', projectId)
-    process.exit(0)
-  }
   let errorCount = 0
-  for (const docId of docIds) {
-    const result = await rewindDoc(projectId, docId)
-    const failed = result.filter(r => r.status === 'failed')
-    errorCount += failed.length
-    if (argv.verbose) {
-      console.log(JSON.stringify({ projectId, docId, result }, null, 2))
-    } else {
-      console.log(
-        'project',
-        projectId,
-        'docId',
-        docId,
-        failed.length === 0 ? 'OK' : 'FAILED'
-      )
-      for (const f of failed) {
-        console.log(JSON.stringify(f))
+  for (const projectId of projectIds) {
+    const docIds = await PackManager.promises.findAllDocsInProject(projectId)
+    if (!docIds.length) {
+      console.log('No docs found for project', projectId)
+    }
+    let projectErrorCount = 0
+    for (const docId of docIds) {
+      const result = await rewindDoc(projectId, docId)
+      const failed = result.filter(r => r.status === 'failed')
+      errorCount += failed.length
+      if (argv.verbose) {
+        console.log(JSON.stringify({ projectId, docId, result }, null, 2))
+      } else if (failed.length > 0) {
+        console.log('project', projectId, 'docId', docId, 'FAILED')
+        for (const f of failed) {
+          console.log(JSON.stringify(f))
+        }
+        projectErrorCount += failed.length
       }
     }
+    if (projectErrorCount === 0 && !argv.verbose) {
+      console.log('project', projectId, 'docs', docIds.length, 'OK')
+    }
   }
   process.exit(errorCount > 0 ? 1 : 0)
 }
 
 waitForDb()
+  .then(TrackChangesMongoDb.waitForDb)
   .then(main)
   .catch(err => {
     console.error(err)