| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- const { db, waitForDb } = require('../../app/src/infrastructure/mongodb')
- const minimist = require('minimist')
- const argv = minimist(process.argv.slice(2))
- const commit = argv.commit !== undefined
- if (!commit) {
- console.log('DOING DRY RUN. TO SAVE CHANGES PASS --commit')
- }
- async function getDupes(commit) {
- await waitForDb()
- const entries = await db.splittests.aggregate([
- {
- $match: {
- archived: { $eq: true },
- },
- },
- { $unwind: '$versions' },
- {
- $group: {
- // Group by fields to match on (a,b)
- _id: {
- _id: '$_id',
- name: '$name',
- creationDate: '$version.creationDate',
- },
- // Count number of matching docs for the group
- count: { $sum: 1 },
- // Save the _id for matching docs
- docs: { $push: '$_id' },
- },
- },
- // Limit results to duplicates (more than 1 match)
- {
- $match: {
- count: { $gt: 1 },
- },
- },
- ])
- let entry
- const removed = []
- while ((entry = await entries.next())) {
- const name = entry._id.name
- const test = await db.splittests.findOne({ name })
- if (hasArchiveDupe(test.versions)) {
- removed.push(test.name)
- removeLastVersion(test, commit)
- }
- }
- const message = commit
- ? `removed dupes from ${removed.length} feature flags`
- : `planning to remove dupes from ${removed.length} feature flags`
- console.info(message, removed)
- console.log('DONE')
- process.exit()
- }
- function hasArchiveDupe(versions) {
- const last = versions.length - 1
- // guard in case we somehow get smthn with only one version here flagged as having a dupe
- if (last < 2) return false
- // need to string compare dates, as otherwise will compare the isoDate objects (diff objs so not equal)
- return (
- versions[last].createdAt.toString() ===
- versions[last - 1].createdAt.toString()
- )
- }
- function removeLastVersion(test, commit) {
- const name = test.name
- const numVersions = test.versions.length
- if (name && numVersions > 1) {
- const lastVersion = test.versions[numVersions - 1].versionNumber
- console.log(`removing test ${test.name} version ${lastVersion}`)
- if (commit) {
- db.splittests.updateOne(
- { name },
- { $pull: { versions: { versionNumber: lastVersion } } }
- )
- }
- }
- }
- getDupes(commit)
|