Skip to content

Commit

Permalink
fix: workspace health (#3916)
Browse files Browse the repository at this point in the history
* fix: workspace health applying migrations multiple times

* fix: remove log

* fix: use logger
  • Loading branch information
magrinj authored Feb 12, 2024
1 parent c13e55a commit b0b033a
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 58 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { Logger } from '@nestjs/common';

import { Command, CommandRunner, Option } from 'nest-commander';
import chalk from 'chalk';

Expand All @@ -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,
);
Expand All @@ -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,
Expand All @@ -71,7 +76,7 @@ export class WorkspaceHealthCommand extends CommandRunner {
workspaceMigrations,
);
} else {
console.log(
this.logger.log(
chalk.green(
`Fixed ${workspaceMigrations.length}/${issues.length} issues`,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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>[];

if (defaultValueIssues.length > 0) {
const columnDefaultValueWorkspaceMigrations =
await this.fixColumnDefaultValueIssues(
objectMetadataCollection,
defaultValueIssues,
);

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>[],
);

workspaceMigrations.push(...columnNullabilityWorkspaceMigrations);
break;
}
}
workspaceMigrations.push(...columnDefaultValueWorkspaceMigrations);
}

return workspaceMigrations;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit b0b033a

Please sign in to comment.