fix: workspace health (#3916)
* fix: workspace health applying migrations multiple times * fix: remove log * fix: use logger
This commit is contained in:
@ -1,3 +1,5 @@
|
||||
import { Logger } from '@nestjs/common';
|
||||
|
||||
import { Command, CommandRunner, Option } from 'nest-commander';
|
||||
import chalk from 'chalk';
|
||||
|
||||
@ -20,6 +22,7 @@ interface WorkspaceHealthCommandOptions {
|
||||
description: 'Check health of the given workspace.',
|
||||
})
|
||||
export class WorkspaceHealthCommand extends CommandRunner {
|
||||
private readonly logger = new Logger(WorkspaceHealthCommand.name);
|
||||
private readonly commandLogger = new CommandLogger(
|
||||
WorkspaceHealthCommand.name,
|
||||
);
|
||||
@ -40,21 +43,23 @@ export class WorkspaceHealthCommand extends CommandRunner {
|
||||
);
|
||||
|
||||
if (issues.length === 0) {
|
||||
console.log(chalk.green('Workspace is healthy'));
|
||||
this.logger.log(chalk.green('Workspace is healthy'));
|
||||
} else {
|
||||
console.log(chalk.red('Workspace is not healthy'));
|
||||
this.logger.log(
|
||||
chalk.red(`Workspace is not healthy, found ${issues.length} issues`),
|
||||
);
|
||||
|
||||
if (options.verbose) {
|
||||
console.group(chalk.red('Issues'));
|
||||
issues.forEach((issue) => {
|
||||
console.log(chalk.yellow(JSON.stringify(issue, null, 2)));
|
||||
});
|
||||
console.groupEnd();
|
||||
await this.commandLogger.writeLog(
|
||||
`workspace-health-issues-${options.workspaceId}`,
|
||||
issues,
|
||||
);
|
||||
this.logger.log(chalk.yellow('Issues written to log'));
|
||||
}
|
||||
}
|
||||
|
||||
if (options.fix) {
|
||||
console.log(chalk.yellow('Fixing issues'));
|
||||
this.logger.log(chalk.yellow('Fixing issues'));
|
||||
|
||||
const workspaceMigrations = await this.workspaceHealthService.fixIssues(
|
||||
options.workspaceId,
|
||||
@ -71,7 +76,7 @@ export class WorkspaceHealthCommand extends CommandRunner {
|
||||
workspaceMigrations,
|
||||
);
|
||||
} else {
|
||||
console.log(
|
||||
this.logger.log(
|
||||
chalk.green(
|
||||
`Fixed ${workspaceMigrations.length}/${issues.length} issues`,
|
||||
),
|
||||
|
||||
@ -28,24 +28,19 @@ export class WorkspaceFixDefaultValueService {
|
||||
issues: WorkspaceHealthDefaultValueIssue[],
|
||||
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
||||
const workspaceMigrations: Partial<WorkspaceMigrationEntity>[] = [];
|
||||
const defaultValueIssues = issues.filter(
|
||||
(issue) =>
|
||||
issue.type === WorkspaceHealthIssueType.COLUMN_DEFAULT_VALUE_CONFLICT,
|
||||
) as WorkspaceHealthColumnIssue<WorkspaceHealthIssueType.COLUMN_DEFAULT_VALUE_CONFLICT>[];
|
||||
|
||||
for (const issue of issues) {
|
||||
switch (issue.type) {
|
||||
case WorkspaceHealthIssueType.COLUMN_DEFAULT_VALUE_CONFLICT: {
|
||||
const columnNullabilityWorkspaceMigrations =
|
||||
await this.fixColumnDefaultValueIssues(
|
||||
objectMetadataCollection,
|
||||
issues.filter(
|
||||
(issue) =>
|
||||
issue.type ===
|
||||
WorkspaceHealthIssueType.COLUMN_DEFAULT_VALUE_CONFLICT,
|
||||
) as WorkspaceHealthColumnIssue<WorkspaceHealthIssueType.COLUMN_DEFAULT_VALUE_CONFLICT>[],
|
||||
);
|
||||
if (defaultValueIssues.length > 0) {
|
||||
const columnDefaultValueWorkspaceMigrations =
|
||||
await this.fixColumnDefaultValueIssues(
|
||||
objectMetadataCollection,
|
||||
defaultValueIssues,
|
||||
);
|
||||
|
||||
workspaceMigrations.push(...columnNullabilityWorkspaceMigrations);
|
||||
break;
|
||||
}
|
||||
}
|
||||
workspaceMigrations.push(...columnDefaultValueWorkspaceMigrations);
|
||||
}
|
||||
|
||||
return workspaceMigrations;
|
||||
|
||||
@ -27,24 +27,19 @@ export class WorkspaceFixNullableService {
|
||||
issues: WorkspaceHealthNullableIssue[],
|
||||
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
||||
const workspaceMigrations: Partial<WorkspaceMigrationEntity>[] = [];
|
||||
const nullabilityIssues = issues.filter(
|
||||
(issue) =>
|
||||
issue.type === WorkspaceHealthIssueType.COLUMN_NULLABILITY_CONFLICT,
|
||||
) as WorkspaceHealthColumnIssue<WorkspaceHealthIssueType.COLUMN_NULLABILITY_CONFLICT>[];
|
||||
|
||||
for (const issue of issues) {
|
||||
switch (issue.type) {
|
||||
case WorkspaceHealthIssueType.COLUMN_NULLABILITY_CONFLICT: {
|
||||
const columnNullabilityWorkspaceMigrations =
|
||||
await this.fixColumnNullabilityIssues(
|
||||
objectMetadataCollection,
|
||||
issues.filter(
|
||||
(issue) =>
|
||||
issue.type ===
|
||||
WorkspaceHealthIssueType.COLUMN_NULLABILITY_CONFLICT,
|
||||
) as WorkspaceHealthColumnIssue<WorkspaceHealthIssueType.COLUMN_NULLABILITY_CONFLICT>[],
|
||||
);
|
||||
if (nullabilityIssues.length > 0) {
|
||||
const columnNullabilityWorkspaceMigrations =
|
||||
await this.fixColumnNullabilityIssues(
|
||||
objectMetadataCollection,
|
||||
nullabilityIssues,
|
||||
);
|
||||
|
||||
workspaceMigrations.push(...columnNullabilityWorkspaceMigrations);
|
||||
break;
|
||||
}
|
||||
}
|
||||
workspaceMigrations.push(...columnNullabilityWorkspaceMigrations);
|
||||
}
|
||||
|
||||
return workspaceMigrations;
|
||||
|
||||
@ -30,24 +30,19 @@ export class WorkspaceFixTypeService {
|
||||
issues: WorkspaceHealthTypeIssue[],
|
||||
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
||||
const workspaceMigrations: Partial<WorkspaceMigrationEntity>[] = [];
|
||||
const columnTypeIssues = issues.filter(
|
||||
(issue) =>
|
||||
issue.type === WorkspaceHealthIssueType.COLUMN_DATA_TYPE_CONFLICT,
|
||||
) as WorkspaceHealthColumnIssue<WorkspaceHealthIssueType.COLUMN_DATA_TYPE_CONFLICT>[];
|
||||
|
||||
for (const issue of issues) {
|
||||
switch (issue.type) {
|
||||
case WorkspaceHealthIssueType.COLUMN_DATA_TYPE_CONFLICT: {
|
||||
const columnNullabilityWorkspaceMigrations =
|
||||
await this.fixColumnTypeIssues(
|
||||
objectMetadataCollection,
|
||||
issues.filter(
|
||||
(issue) =>
|
||||
issue.type ===
|
||||
WorkspaceHealthIssueType.COLUMN_DATA_TYPE_CONFLICT,
|
||||
) as WorkspaceHealthColumnIssue<WorkspaceHealthIssueType.COLUMN_DATA_TYPE_CONFLICT>[],
|
||||
);
|
||||
if (columnTypeIssues.length > 0) {
|
||||
const columnNullabilityWorkspaceMigrations =
|
||||
await this.fixColumnTypeIssues(
|
||||
objectMetadataCollection,
|
||||
columnTypeIssues,
|
||||
);
|
||||
|
||||
workspaceMigrations.push(...columnNullabilityWorkspaceMigrations);
|
||||
break;
|
||||
}
|
||||
}
|
||||
workspaceMigrations.push(...columnNullabilityWorkspaceMigrations);
|
||||
}
|
||||
|
||||
return workspaceMigrations;
|
||||
|
||||
Reference in New Issue
Block a user