diff --git a/src/Repository.ts b/src/Repository.ts index 642ac0d..37d6f53 100644 --- a/src/Repository.ts +++ b/src/Repository.ts @@ -318,6 +318,8 @@ export default class Repository { * @returns */ async removeCache() { + this.model.isReseted = true; + await this.model.save(); if (await storage.exists(this._model.repoId + "/")) { return storage.rm(this._model.repoId + "/"); } diff --git a/src/database/anonymizedRepositories/anonymizedRepositories.schema.ts b/src/database/anonymizedRepositories/anonymizedRepositories.schema.ts index 7caa836..9756bfe 100644 --- a/src/database/anonymizedRepositories/anonymizedRepositories.schema.ts +++ b/src/database/anonymizedRepositories/anonymizedRepositories.schema.ts @@ -63,6 +63,10 @@ const AnonymizedRepositorySchema = new Schema({ default: 0, }, }, + isReseted: { + type: Boolean, + default: false, + }, }); export default AnonymizedRepositorySchema; diff --git a/src/database/anonymizedRepositories/anonymizedRepositories.types.ts b/src/database/anonymizedRepositories/anonymizedRepositories.types.ts index 5e4f999..b01600e 100644 --- a/src/database/anonymizedRepositories/anonymizedRepositories.types.ts +++ b/src/database/anonymizedRepositories/anonymizedRepositories.types.ts @@ -40,6 +40,7 @@ export interface IAnonymizedRepository { storage: number; file: number; }; + isReseted: boolean; } export interface IAnonymizedRepositoryDocument diff --git a/src/schedule.ts b/src/schedule.ts index 595e8bb..a58e916 100644 --- a/src/schedule.ts +++ b/src/schedule.ts @@ -27,7 +27,10 @@ export function repositoryStatusCheck() { const job = schedule.scheduleJob("0 */6 * * *", async () => { console.log("[schedule] Check repository status and unused repositories"); ( - await AnonymizedRepositoryModel.find({ status: { $eq: "ready" } }) + await AnonymizedRepositoryModel.find({ + status: { $eq: "ready" }, + isReseted: { $eq: false }, + }) ).forEach((data) => { const repo = new Repository(data); try { @@ -35,13 +38,13 @@ export function repositoryStatusCheck() { } catch (error) { console.log(`Repository ${repo.repoId} is expired`); } - const sixMonthAgo = new Date(); - sixMonthAgo.setMonth(sixMonthAgo.getMonth() - 6); + const fourMonthAgo = new Date(); + fourMonthAgo.setMonth(fourMonthAgo.getMonth() - 4); - if (repo.model.lastView < sixMonthAgo) { + if (repo.model.lastView < fourMonthAgo) { repo.removeCache().then(() => { console.log( - `Repository ${repo.repoId} not visited for 6 months remove the cached files` + `Repository ${repo.repoId} not visited for 4 months remove the cached files` ); }); } diff --git a/src/source/GitHubDownload.ts b/src/source/GitHubDownload.ts index 3d179c2..6c33620 100644 --- a/src/source/GitHubDownload.ts +++ b/src/source/GitHubDownload.ts @@ -122,6 +122,7 @@ export default class GitHubDownload extends GitHubBase implements SourceBase { clearTimeout(progressTimeout); } + this.repository.model.isReseted = false; await this.repository.updateStatus(RepositoryStatus.READY); } diff --git a/src/source/GitHubStream.ts b/src/source/GitHubStream.ts index ac8b454..110dc0a 100644 --- a/src/source/GitHubStream.ts +++ b/src/source/GitHubStream.ts @@ -59,9 +59,11 @@ export default class GitHubStream extends GitHubBase implements SourceBase { } else { content = Buffer.from(""); } + await storage.write(file.originalCachePath, content, file, this); + this.repository.model.isReseted = false; + await this.repository.model.save(); if (this.repository.status !== RepositoryStatus.READY) await this.repository.updateStatus(RepositoryStatus.READY); - await storage.write(file.originalCachePath, content, file, this); return stream.Readable.from(content); } catch (error) { if ((error as any).status === 404 || (error as any).httpStatus === 404) {