mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-29 21:11:38 +01:00
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
|
|
import { join, dirname, basename } from 'path';
|
|
import { readdir, rimraf } from 'vs/base/node/pfs';
|
|
import { onUnexpectedError } from 'vs/base/common/errors';
|
|
import { Disposable, toDisposable } from 'vs/base/common/lifecycle';
|
|
|
|
export class LogsDataCleaner extends Disposable {
|
|
|
|
constructor(
|
|
@IEnvironmentService private environmentService: IEnvironmentService
|
|
) {
|
|
super();
|
|
|
|
this.cleanUpOldLogsSoon();
|
|
}
|
|
|
|
private cleanUpOldLogsSoon(): void {
|
|
let handle: any = setTimeout(() => {
|
|
handle = undefined;
|
|
|
|
const currentLog = basename(this.environmentService.logsPath);
|
|
const logsRoot = dirname(this.environmentService.logsPath);
|
|
|
|
readdir(logsRoot).then(children => {
|
|
const allSessions = children.filter(name => /^\d{8}T\d{6}$/.test(name));
|
|
const oldSessions = allSessions.sort().filter((d, i) => d !== currentLog);
|
|
const toDelete = oldSessions.slice(0, Math.max(0, oldSessions.length - 9));
|
|
|
|
return Promise.all(toDelete.map(name => rimraf(join(logsRoot, name))));
|
|
}).then(null, onUnexpectedError);
|
|
}, 10 * 1000);
|
|
|
|
this._register(toDisposable(() => clearTimeout(handle)));
|
|
}
|
|
}
|