| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- import minimist from 'minimist'
- import {
- db,
- ObjectId,
- READ_PREFERENCE_SECONDARY,
- } from '../app/src/infrastructure/mongodb.js'
- import lodash from 'lodash'
- const args = minimist(process.argv.slice(2), {
- boolean: ['commit'],
- })
- const run = async () => {
- try {
- const projects = await db.projectAuditLogEntries
- .find(
- {
- operation: 'collaborator-limit-exceeded',
- timestamp: {
- $gte: new Date('2025-03-26'),
- $lt: new Date('2025-04-02'),
- },
- },
- {
- readPreference: READ_PREFERENCE_SECONDARY,
- projection: {
- _id: 1,
- projectId: 1,
- },
- }
- )
- .toArray()
- const uniqueProjectIds = lodash.uniq(
- projects.map(p => p.projectId.toString())
- )
- console.log(
- `Found ${uniqueProjectIds.length} projects where collaborator-limit-exceeded operation was logged in provided date range`
- )
- let readOnlyCount = 0
- let pendingReviewerCount = 0
- let reviewerCount = 0
- for (const projectId of uniqueProjectIds) {
- if (args.commit) {
- const readOnlyUpdate = await db.projects.updateOne(
- {
- _id: new ObjectId(projectId),
- readOnly_refs: null,
- },
- {
- $set: {
- readOnly_refs: [],
- },
- }
- )
- if (readOnlyUpdate.modifiedCount > 0) {
- console.log(`Updated readOnly_refs for project id ${projectId}`)
- }
- readOnlyCount += readOnlyUpdate.modifiedCount
- } else {
- const project = await db.projects.findOne(
- {
- _id: new ObjectId(projectId),
- readOnly_refs: null,
- },
- {
- projection: {
- _id: 1,
- readOnly_refs: 1,
- },
- }
- )
- if (project) {
- readOnlyCount++
- console.log(
- `Dry run: Would update readOnly_refs for project id ${projectId}`
- )
- }
- }
- if (args.commit) {
- const pendingReviewerUpdate = await db.projects.updateOne(
- {
- _id: new ObjectId(projectId),
- pendingReviewer_refs: null,
- },
- {
- $set: {
- pendingReviewer_refs: [],
- },
- }
- )
- if (pendingReviewerUpdate.modifiedCount > 0) {
- console.log(
- `Updated pendingReviewer_refs for project id ${projectId}`
- )
- }
- pendingReviewerCount += pendingReviewerUpdate.modifiedCount
- } else {
- const project = await db.projects.findOne(
- {
- _id: new ObjectId(projectId),
- pendingReviewer_refs: null,
- },
- {
- projection: {
- _id: 1,
- pendingReviewer_refs: 1,
- },
- }
- )
- if (project) {
- pendingReviewerCount++
- console.log(
- `Dry run: Would update pendingReviewer_refs for project id ${projectId}`
- )
- }
- }
- if (args.commit) {
- const reviewerUpdate = await db.projects.updateOne(
- {
- _id: new ObjectId(projectId),
- reviewer_refs: null,
- },
- {
- $set: {
- reviewer_refs: [],
- },
- }
- )
- reviewerCount += reviewerUpdate.modifiedCount
- } else {
- const project = await db.projects.findOne(
- {
- _id: new ObjectId(projectId),
- reviewer_refs: null,
- },
- {
- projection: {
- _id: 1,
- reviewer_refs: 1,
- },
- }
- )
- if (project) {
- reviewerCount++
- console.log(
- `Dry run: Would update reviewer_refs for project id ${projectId}`
- )
- }
- }
- }
- if (args.commit) {
- console.log(
- `Updated readOnly_refs for ${readOnlyCount} projects, pendingReviewer_refs for ${pendingReviewerCount} projects, and reviewer_refs for ${reviewerCount} projects.`
- )
- } else {
- console.log(
- `Dry run: Would update readOnly_refs for ${readOnlyCount} projects, pendingReviewer_refs for ${pendingReviewerCount} projects, and reviewer_refs for ${reviewerCount} projects.`
- )
- }
- process.exit(0)
- } catch (err) {
- console.error('Error while processing projects:', err)
- process.exit(1)
- }
- }
- run()
|