Fix delete incomplete workspaces (#3893)
* Fix delete incomplete workspaces * Add multiple workspace filtering option
This commit is contained in:
@ -2,15 +2,16 @@ import { InjectRepository } from '@nestjs/typeorm';
|
|||||||
import { Logger } from '@nestjs/common';
|
import { Logger } from '@nestjs/common';
|
||||||
|
|
||||||
import { Command, CommandRunner, Option } from 'nest-commander';
|
import { Command, CommandRunner, Option } from 'nest-commander';
|
||||||
import { FindOptionsWhere, Repository } from 'typeorm';
|
import { FindOptionsWhere, In, Repository } from 'typeorm';
|
||||||
|
|
||||||
import { WorkspaceService } from 'src/core/workspace/services/workspace.service';
|
import { WorkspaceService } from 'src/core/workspace/services/workspace.service';
|
||||||
import { Workspace } from 'src/core/workspace/workspace.entity';
|
import { Workspace } from 'src/core/workspace/workspace.entity';
|
||||||
import { getDryRunLogHeader } from 'src/utils/get-dry-run-log-header';
|
import { getDryRunLogHeader } from 'src/utils/get-dry-run-log-header';
|
||||||
|
import { DataSourceService } from 'src/metadata/data-source/data-source.service';
|
||||||
|
|
||||||
type DeleteIncompleteWorkspacesCommandOptions = {
|
type DeleteIncompleteWorkspacesCommandOptions = {
|
||||||
dryRun?: boolean;
|
dryRun?: boolean;
|
||||||
workspaceId?: string;
|
workspaceIds?: string[];
|
||||||
};
|
};
|
||||||
|
|
||||||
@Command({
|
@Command({
|
||||||
@ -23,6 +24,7 @@ export class DeleteIncompleteWorkspacesCommand extends CommandRunner {
|
|||||||
private readonly workspaceService: WorkspaceService,
|
private readonly workspaceService: WorkspaceService,
|
||||||
@InjectRepository(Workspace, 'core')
|
@InjectRepository(Workspace, 'core')
|
||||||
private readonly workspaceRepository: Repository<Workspace>,
|
private readonly workspaceRepository: Repository<Workspace>,
|
||||||
|
private readonly dataSourceService: DataSourceService,
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
@ -37,12 +39,12 @@ export class DeleteIncompleteWorkspacesCommand extends CommandRunner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Option({
|
@Option({
|
||||||
flags: '-w, --workspace-id [workspace_id]',
|
flags: '-w, --workspace-ids [workspace_ids]',
|
||||||
description: 'workspace id',
|
description: 'comma separated workspace ids',
|
||||||
required: false,
|
required: false,
|
||||||
})
|
})
|
||||||
parseWorkspaceId(value: string): string {
|
parseWorkspaceIds(value: string): string[] {
|
||||||
return value;
|
return value.split(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
async run(
|
async run(
|
||||||
@ -53,12 +55,28 @@ export class DeleteIncompleteWorkspacesCommand extends CommandRunner {
|
|||||||
subscriptionStatus: 'incomplete',
|
subscriptionStatus: 'incomplete',
|
||||||
};
|
};
|
||||||
|
|
||||||
if (options.workspaceId) {
|
if (options.workspaceIds) {
|
||||||
where.id = options.workspaceId;
|
where.id = In(options.workspaceIds);
|
||||||
}
|
}
|
||||||
const incompleteWorkspaces = await this.workspaceRepository.findBy(where);
|
|
||||||
|
|
||||||
for (const incompleteWorkspace of incompleteWorkspaces) {
|
const incompleteWorkspaces = await this.workspaceRepository.findBy(where);
|
||||||
|
const dataSources =
|
||||||
|
await this.dataSourceService.getManyDataSourceMetadata();
|
||||||
|
const workspaceIdsWithSchema = dataSources.map(
|
||||||
|
(dataSource) => dataSource.workspaceId,
|
||||||
|
);
|
||||||
|
const incompleteWorkspacesToDelete = incompleteWorkspaces.filter(
|
||||||
|
(incompleteWorkspace) =>
|
||||||
|
workspaceIdsWithSchema.includes(incompleteWorkspace.id),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (incompleteWorkspacesToDelete.length) {
|
||||||
|
this.logger.log(
|
||||||
|
`Running Deleting incomplete workspaces on ${incompleteWorkspacesToDelete.length} workspaces`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const incompleteWorkspace of incompleteWorkspacesToDelete) {
|
||||||
this.logger.log(
|
this.logger.log(
|
||||||
`${getDryRunLogHeader(options.dryRun)}Deleting workspace ${
|
`${getDryRunLogHeader(options.dryRun)}Deleting workspace ${
|
||||||
incompleteWorkspace.id
|
incompleteWorkspace.id
|
||||||
|
|||||||
@ -7,9 +7,14 @@ import { Workspace } from 'src/core/workspace/workspace.entity';
|
|||||||
import { CleanInactiveWorkspacesCommand } from 'src/workspace/workspace-cleaner/commands/clean-inactive-workspaces.command';
|
import { CleanInactiveWorkspacesCommand } from 'src/workspace/workspace-cleaner/commands/clean-inactive-workspaces.command';
|
||||||
import { StartCleanInactiveWorkspacesCronCommand } from 'src/workspace/workspace-cleaner/commands/start-clean-inactive-workspaces.cron.command';
|
import { StartCleanInactiveWorkspacesCronCommand } from 'src/workspace/workspace-cleaner/commands/start-clean-inactive-workspaces.cron.command';
|
||||||
import { StopCleanInactiveWorkspacesCronCommand } from 'src/workspace/workspace-cleaner/commands/stop-clean-inactive-workspaces.cron.command';
|
import { StopCleanInactiveWorkspacesCronCommand } from 'src/workspace/workspace-cleaner/commands/stop-clean-inactive-workspaces.cron.command';
|
||||||
|
import { DataSourceModule } from 'src/metadata/data-source/data-source.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [TypeOrmModule.forFeature([Workspace], 'core'), WorkspaceModule],
|
imports: [
|
||||||
|
TypeOrmModule.forFeature([Workspace], 'core'),
|
||||||
|
WorkspaceModule,
|
||||||
|
DataSourceModule,
|
||||||
|
],
|
||||||
providers: [
|
providers: [
|
||||||
DeleteIncompleteWorkspacesCommand,
|
DeleteIncompleteWorkspacesCommand,
|
||||||
CleanInactiveWorkspacesCommand,
|
CleanInactiveWorkspacesCommand,
|
||||||
|
|||||||
Reference in New Issue
Block a user