From 97b756777082a77702b973566789db055a68caf3 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 4 May 2018 17:20:40 +0900 Subject: [PATCH] :v: --- cli/clean-cached-remote-files.js | 82 +++++++++++++++++++ ...n-drive.js => clean-unused-drive-files.js} | 6 +- 2 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 cli/clean-cached-remote-files.js rename cli/{clean-drive.js => clean-unused-drive-files.js} (94%) diff --git a/cli/clean-cached-remote-files.js b/cli/clean-cached-remote-files.js new file mode 100644 index 000000000..a266f0d98 --- /dev/null +++ b/cli/clean-cached-remote-files.js @@ -0,0 +1,82 @@ +const chalk = require('chalk'); +const log = require('single-line-log').stdout; +const sequential = require('promise-sequential'); +const { default: DriveFile, DriveFileChunk } = require('../built/models/drive-file'); +const { default: DriveFileThumbnail, DriveFileThumbnailChunk } = require('../built/models/drive-file-thumbnail'); +const { default: Note } = require('../built/models/note'); +const { default: MessagingMessage } = require('../built/models/messaging-message'); +const { default: User } = require('../built/models/user'); + +const q = { + 'metadata._user.host': { + $ne: null + } +}; + +async function main() { + const promiseGens = []; + + const count = await DriveFile.count(q); + + let prev; + + for (let i = 0; i < count; i++) { + promiseGens.push(() => { + const promise = new Promise(async (res, rej) => { + const file = await DriveFile.findOne(prev ? Object.assign({ + _id: { $lt: prev._id } + }, q) : q, { + sort: { + _id: -1 + } + }); + + prev = file; + + if (file == null) return res([i, null]); + + // チャンクをすべて削除 + await DriveFileChunk.remove({ + files_id: file._id + }); + + await DriveFile.update({ _id: file._id }, { + $set: { + 'metadata.deletedAt': new Date(), + 'metadata.isExpired': true + } + }); + + res([i, file]); + + //#region サムネイルもあれば削除 + const thumbnail = await DriveFileThumbnail.findOne({ + 'metadata.originalId': file._id + }); + + if (thumbnail) { + DriveFileThumbnailChunk.remove({ + files_id: thumbnail._id + }); + + DriveFileThumbnail.remove({ _id: thumbnail._id }); + } + //#endregion + }); + + promise.then(([i, file]) => { + if (file) { + console.log(chalk`{gray ${i}} {green done: {bold ${file._id}} ${file.filename}}`); + } + }); + + return promise; + }); + } + + return await sequential(promiseGens); +} + +main().then(() => { + console.log('ALL DONE'); +}).catch(console.error); diff --git a/cli/clean-drive.js b/cli/clean-unused-drive-files.js similarity index 94% rename from cli/clean-drive.js rename to cli/clean-unused-drive-files.js index 68d849fa4..1d61c5ccc 100644 --- a/cli/clean-drive.js +++ b/cli/clean-unused-drive-files.js @@ -6,10 +6,6 @@ const { default: Note } = require('../built/models/note'); const { default: MessagingMessage } = require('../built/models/messaging-message'); const { default: User } = require('../built/models/user'); -const args = process.argv.slice(2); - -const skip = parseInt(args[0] || '0', 10); - async function main() { const promiseGens = []; @@ -17,7 +13,7 @@ async function main() { let prev; - for (let i = skip; i < count; i++) { + for (let i = 0; i < count; i++) { promiseGens.push(() => { const promise = new Promise(async (res, rej) => { function skip() {