Skip to content

Commit

Permalink
[#23216]yugabyted: Adding required models for source db details and t…
Browse files Browse the repository at this point in the history
…arget recommendation details sub pages.

Summary:
Adding required openapi models for source db details and target recommendation details sub pages of Assessment page.
Jira: DB-12159

Test Plan: Manual Tests

Reviewers: djiang

Reviewed By: djiang

Subscribers: yugabyted-dev

Differential Revision: https://phorge.dev.yugabyte.com/D36597
  • Loading branch information
nchandrappa committed Jul 16, 2024
1 parent 1bc7a50 commit 0c8e378
Show file tree
Hide file tree
Showing 21 changed files with 840 additions and 121 deletions.
307 changes: 263 additions & 44 deletions yugabyted-ui/apiserver/cmd/server/.docs/api/openapi.yaml

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions yugabyted-ui/apiserver/cmd/server/.openapi-generator/FILES
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ models/model_api_error.go
models/model_api_error_error.go
models/model_api_for_migration_assessment_page.go
models/model_api_for_plan_and_asses_page.go
models/model_api_for_source_db_sql_objects_metadata_page.go
models/model_api_for_target_schema_recommendations_page.go
models/model_assesment_complexity_info.go
models/model_assessment_report_summary.go
models/model_assessment_source_db_object.go
models/model_assessment_target_recommendation_object.go
models/model_backup_details.go
models/model_cloud_enum.go
models/model_cloud_info.go
Expand Down Expand Up @@ -68,13 +72,16 @@ models/model_slow_query_response_ysql_data.go
models/model_slow_query_response_ysql_query_item.go
models/model_source_database_info.go
models/model_source_environment_info.go
models/model_sql_object_count.go
models/model_sql_object_metadata.go
models/model_sql_objects_details.go
models/model_table_info.go
models/model_table_info_table_replication_info.go
models/model_table_replication_info.go
models/model_tablet_info.go
models/model_target_cluster_recommendation_details.go
models/model_target_cluster_spec.go
models/model_target_recommendation_item.go
models/model_target_schema_recommendations.go
models/model_unsupported_sql_info.go
models/model_version_info.go
Expand Down
154 changes: 119 additions & 35 deletions yugabyted-ui/apiserver/cmd/server/handlers/api_voyager.go
Original file line number Diff line number Diff line change
Expand Up @@ -600,47 +600,47 @@ func (c *Container) GetVoyagerAssessmentReport(ctx echo.Context) error {
voyagerAssessmentReportResponse.SourceEnvironment.NoOfConnections = ""

voyagerAssessmentReportResponse.SourceDatabase.TableSize =
int32(assessmentReportVisualisationData.Report.SourceSizeDetails.TotalTableSize)
assessmentReportVisualisationData.Report.SourceSizeDetails.TotalTableSize
voyagerAssessmentReportResponse.SourceDatabase.TableRowCount =
int32(assessmentReportVisualisationData.Report.SourceSizeDetails.TotalTableRowCount)
assessmentReportVisualisationData.Report.SourceSizeDetails.TotalTableRowCount
voyagerAssessmentReportResponse.SourceDatabase.TotalTableSize =
int32(assessmentReportVisualisationData.Report.SourceSizeDetails.TotalDBSize)
assessmentReportVisualisationData.Report.SourceSizeDetails.TotalDBSize
voyagerAssessmentReportResponse.SourceDatabase.TotalIndexSize =
int32(assessmentReportVisualisationData.Report.SourceSizeDetails.TotalIndexSize)
assessmentReportVisualisationData.Report.SourceSizeDetails.TotalIndexSize


voyagerAssessmentReportResponse.TargetRecommendations.RecommendationSummary =
assessmentReport.Sizing.SizingRecommendation.ColocatedReasoning
voyagerAssessmentReportResponse.TargetRecommendations.
TargetClusterRecommendation.NumNodes =
int32(assessmentReport.Sizing.SizingRecommendation.NumNodes)
int64(assessmentReport.Sizing.SizingRecommendation.NumNodes)
voyagerAssessmentReportResponse.TargetRecommendations.
TargetClusterRecommendation.VcpuPerNode =
int32(assessmentReport.Sizing.SizingRecommendation.VCPUsPerInstance)
int64(assessmentReport.Sizing.SizingRecommendation.VCPUsPerInstance)
voyagerAssessmentReportResponse.TargetRecommendations.
TargetClusterRecommendation.MemoryPerNode =
int32(assessmentReport.Sizing.SizingRecommendation.MemoryPerInstance)
int64(assessmentReport.Sizing.SizingRecommendation.MemoryPerInstance)
voyagerAssessmentReportResponse.TargetRecommendations.
TargetClusterRecommendation.InsertsPerNode =
int32(assessmentReport.Sizing.SizingRecommendation.OptimalInsertConnectionsPerNode)
assessmentReport.Sizing.SizingRecommendation.OptimalInsertConnectionsPerNode
voyagerAssessmentReportResponse.TargetRecommendations.
TargetClusterRecommendation.ConnectionsPerNode =
int32(assessmentReport.Sizing.SizingRecommendation.OptimalSelectConnectionsPerNode)
assessmentReport.Sizing.SizingRecommendation.OptimalSelectConnectionsPerNode

voyagerAssessmentReportResponse.TargetRecommendations.
TargetSchemaRecommendation.NoOfColocatedTables =
int32(len(assessmentReport.Sizing.SizingRecommendation.ColocatedTables))
int64(len(assessmentReport.Sizing.SizingRecommendation.ColocatedTables))
voyagerAssessmentReportResponse.TargetRecommendations.
TargetSchemaRecommendation.NoOfShardedTables =
int32(len(assessmentReport.Sizing.SizingRecommendation.ShardedTables))
int64(len(assessmentReport.Sizing.SizingRecommendation.ShardedTables))
voyagerAssessmentReportResponse.TargetRecommendations.
TargetSchemaRecommendation.TotalSizeColocatedTables =
int32(assessmentReportVisualisationData.Report.
TargetSizingRecommendations.TotalColocatedSize)
assessmentReportVisualisationData.Report.
TargetSizingRecommendations.TotalColocatedSize
voyagerAssessmentReportResponse.TargetRecommendations.
TargetSchemaRecommendation.TotalSizeShardedTables =
int32(assessmentReportVisualisationData.Report.
TargetSizingRecommendations.TotalShardedSize)
assessmentReportVisualisationData.Report.
TargetSizingRecommendations.TotalShardedSize

dbObjectsMap := map[string]int{}
for _, dbObject := range assessmentReport.SchemaSummary.DBObjects {
Expand All @@ -662,29 +662,47 @@ func (c *Container) GetVoyagerAssessmentReport(ctx echo.Context) error {
_, ok := dbObjectsMap[dbObjectType]
if ok {
dbObjectsMap[dbObjectType] = dbObjectsMap[dbObjectType] - count

}
}

voyagerAssessmentReportResponse.RecommendedRefactoring.Function.Automatic =
int32(dbObjectsMap["FUNCTION"])
voyagerAssessmentReportResponse.RecommendedRefactoring.Function.Manual =
int32(dbObjectConversionIssuesMap["FUNCTION"])
voyagerAssessmentReportResponse.RecommendedRefactoring.SqlType.Automatic =
int32(dbObjectsMap["TYPE"])
voyagerAssessmentReportResponse.RecommendedRefactoring.SqlType.Manual =
int32(dbObjectConversionIssuesMap["TYPE"])
voyagerAssessmentReportResponse.RecommendedRefactoring.Table.Automatic =
int32(dbObjectsMap["TABLE"])
voyagerAssessmentReportResponse.RecommendedRefactoring.Table.Manual =
int32(dbObjectConversionIssuesMap["TABLE"])
voyagerAssessmentReportResponse.RecommendedRefactoring.Triggers.Automatic =
int32(dbObjectsMap["TRIGGER"])
voyagerAssessmentReportResponse.RecommendedRefactoring.Triggers.Manual =
int32(dbObjectConversionIssuesMap["TRIGGER"])
voyagerAssessmentReportResponse.RecommendedRefactoring.View.Automatic =
int32(dbObjectsMap["VIEW"])
voyagerAssessmentReportResponse.RecommendedRefactoring.View.Manual =
int32(dbObjectConversionIssuesMap["VIEW"])
recommendedRefactoringList := []models.RefactoringCount{}
for sqlObjectType, sqlObjectcount := range dbObjectsMap {
var refactorCount models.RefactoringCount
refactorCount.SqlObjectType = sqlObjectType
issueCount, ok := dbObjectConversionIssuesMap[sqlObjectType]
if ok {
refactorCount.Automatic = int32(sqlObjectcount - issueCount)
refactorCount.Manual = int32(issueCount)
} else {
refactorCount.Automatic = int32(sqlObjectcount)
refactorCount.Manual = 0
}
recommendedRefactoringList = append(recommendedRefactoringList, refactorCount)
}

voyagerAssessmentReportResponse.RecommendedRefactoring.RefactorDetails =
recommendedRefactoringList
// voyagerAssessmentReportResponse.RecommendedRefactoring.Function.Automatic =
// int32(dbObjectsMap["FUNCTION"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.Function.Manual =
// int32(dbObjectConversionIssuesMap["FUNCTION"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.SqlType.Automatic =
// int32(dbObjectsMap["TYPE"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.SqlType.Manual =
// int32(dbObjectConversionIssuesMap["TYPE"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.Table.Automatic =
// int32(dbObjectsMap["TABLE"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.Table.Manual =
// int32(dbObjectConversionIssuesMap["TABLE"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.Triggers.Automatic =
// int32(dbObjectsMap["TRIGGER"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.Triggers.Manual =
// int32(dbObjectConversionIssuesMap["TRIGGER"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.View.Automatic =
// int32(dbObjectsMap["VIEW"])
// voyagerAssessmentReportResponse.RecommendedRefactoring.View.Manual =
// int32(dbObjectConversionIssuesMap["VIEW"])

// Convert the backend model []UnsupportedDataTypes into UX model []UnsupportedSqlInfo
unsupportedDataTypeMap := make(map[string]models.UnsupportedSqlInfo)
Expand Down Expand Up @@ -756,3 +774,69 @@ func getMigrationAssessmentReportFuture(log logger.Logger, migrationUuid string,
MigrationAsessmentReportResponse.Report = assessmentVisualisationData
future <- MigrationAsessmentReportResponse
}

func (c *Container) GetAssessmentSourceDBDetails(ctx echo.Context) error {

assessmentSourceDBDetails := models.AssessmentSourceDbObject {
SqlObjectsCount: []models.SqlObjectCount{},
SqlObjectsMetadata: []models.SqlObjectMetadata{},
}

sqlObjectsList := []models.SqlObjectCount{}
var sqlObject1 models.SqlObjectCount
sqlObject1.SqlType = "Table"
sqlObject1.Count = 10
sqlObjectsList = append(sqlObjectsList, sqlObject1)
var sqlObject2 models.SqlObjectCount
sqlObject2.SqlType = "Index"
sqlObject2.Count = 5
sqlObjectsList = append(sqlObjectsList, sqlObject2)
var sqlObject3 models.SqlObjectCount
sqlObject3.SqlType = "Sequence"
sqlObject3.Count = 5
sqlObjectsList = append(sqlObjectsList, sqlObject3)
assessmentSourceDBDetails.SqlObjectsCount = sqlObjectsList

sqlMetadataList := []models.SqlObjectMetadata{}
var sqlMetadata1 models.SqlObjectMetadata
sqlMetadata1.SqlType = "Table"
sqlMetadata1.RowCount = 1000000
sqlMetadata1.Iops = 1000
sqlMetadata1.Size = 12321312312
sqlMetadataList = append(sqlMetadataList, sqlMetadata1)
assessmentSourceDBDetails.SqlObjectsMetadata = sqlMetadataList

return ctx.JSON(http.StatusOK, assessmentSourceDBDetails)
}

func (c *Container) GetTargetRecommendations(ctx echo.Context) error {

targetRecommendationDetails := models.AssessmentTargetRecommendationObject {
NumOfColocatedTables: 0,
TotalSizeColocatedTables: 0,
NumOfShardedTable: 0,
TotalSizeShardedTables: 0,
RecommendationDetails: []models.TargetRecommendationItem{},
}

targetRecommendationDetails.NumOfColocatedTables = 10
targetRecommendationDetails.TotalSizeColocatedTables = 123455
targetRecommendationDetails.NumOfShardedTable = 5
targetRecommendationDetails.TotalSizeShardedTables = 321413241

var recommendation1 models.TargetRecommendationItem
recommendation1.TableName = "Table1"
recommendation1.SchemaRecommendation = "Colocated"
recommendation1.DiskSize = 123124
targetRecommendationDetails.RecommendationDetails =
append(targetRecommendationDetails.RecommendationDetails, recommendation1)

var recommendation2 models.TargetRecommendationItem
recommendation2.TableName = "Table2"
recommendation2.SchemaRecommendation = "Sharded"
recommendation2.DiskSize = 123124
targetRecommendationDetails.RecommendationDetails =
append(targetRecommendationDetails.RecommendationDetails, recommendation2)

return ctx.JSON(http.StatusOK, targetRecommendationDetails)
}
6 changes: 6 additions & 0 deletions yugabyted-ui/apiserver/cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,12 @@ func main() {
// Get Voyager assessment report
e.GET("/api/migration_assessment_v2", c.GetVoyagerAssessmentReport)

// Get assessment source db details
e.GET("/api/assessment_source_db_details", c.GetAssessmentSourceDBDetails)

// Get assessment target recommendations details
e.GET("/api/assessment_target_recommendations", c.GetTargetRecommendations)

// Get Migrate schema task details
e.GET("/api/migrate_schema", c.GetMigrateSchemaInfo)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package models

type ApiForSourceDbSqlObjectsMetadataPage struct {

Data AssessmentSourceDbObject `json:"data"`
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package models

type ApiForTargetSchemaRecommendationsPage struct {

Data AssessmentTargetRecommendationObject `json:"data"`
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package models

// AssessmentSourceDbObject - Details about Source DB's SQL Objects
type AssessmentSourceDbObject struct {

SqlObjectsCount []SqlObjectCount `json:"sql_objects_count"`

SqlObjectsMetadata []SqlObjectMetadata `json:"sql_objects_metadata"`
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package models

// AssessmentTargetRecommendationObject - Details about Target table recommendations
type AssessmentTargetRecommendationObject struct {

NumOfColocatedTables int32 `json:"num_of_colocated_tables"`

TotalSizeColocatedTables int64 `json:"total_size_colocated_tables"`

NumOfShardedTable int32 `json:"num_of_sharded_table"`

TotalSizeShardedTables int64 `json:"total_size_sharded_tables"`

RecommendationDetails []TargetRecommendationItem `json:"recommendation_details"`
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,5 @@ package models
// RecommendedRefactoringGraph - Refectoring recommendations for migrating SQL objects
type RecommendedRefactoringGraph struct {

SqlType RefactoringCount `json:"sql_type"`

Table RefactoringCount `json:"table"`

View RefactoringCount `json:"view"`

Function RefactoringCount `json:"function"`

Triggers RefactoringCount `json:"triggers"`
RefactorDetails []RefactoringCount `json:"refactor_details"`
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package models
// RefactoringCount - count for automatic and manual refactoring
type RefactoringCount struct {

SqlObjectType string `json:"sql_object_type"`

Manual int32 `json:"manual"`

Automatic int32 `json:"automatic"`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ package models
// SourceDatabaseInfo - Source Database details
type SourceDatabaseInfo struct {

TableSize int32 `json:"table_size"`
TableSize int64 `json:"table_size"`

TableRowCount int32 `json:"table_row_count"`
TableRowCount int64 `json:"table_row_count"`

TotalTableSize int32 `json:"total_table_size"`
TotalTableSize int64 `json:"total_table_size"`

TotalIndexSize int32 `json:"total_index_size"`
TotalIndexSize int64 `json:"total_index_size"`
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package models

// SqlObjectCount - Count of specific Sql Object type in the source DB
type SqlObjectCount struct {

SqlType string `json:"sql_type"`

Count int32 `json:"count"`
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package models

// SqlObjectMetadata - size, count, iops details of tables and indexes
type SqlObjectMetadata struct {

SqlType string `json:"sql_type"`

RowCount int64 `json:"row_count"`

Size int64 `json:"size"`

Iops int64 `json:"iops"`
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package models
// TargetClusterSpec - schema for target cluster cpu, memory
type TargetClusterSpec struct {

NumNodes int32 `json:"num_nodes"`
NumNodes int64 `json:"num_nodes"`

VcpuPerNode int32 `json:"vcpu_per_node"`
VcpuPerNode int64 `json:"vcpu_per_node"`

MemoryPerNode int32 `json:"memory_per_node"`
MemoryPerNode int64 `json:"memory_per_node"`

ConnectionsPerNode int32 `json:"connections_per_node"`
ConnectionsPerNode int64 `json:"connections_per_node"`

InsertsPerNode int32 `json:"inserts_per_node"`
InsertsPerNode int64 `json:"inserts_per_node"`
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package models

// TargetRecommendationItem - Target recommendation table metadata information
type TargetRecommendationItem struct {

TableName string `json:"table_name"`

DiskSize int64 `json:"disk_size"`

SchemaRecommendation string `json:"schema_recommendation"`
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ package models
// TargetSchemaRecommendations - Target YugabyteDB cluster schema recommendations
type TargetSchemaRecommendations struct {

NoOfColocatedTables int32 `json:"no_of_colocated_tables"`
NoOfColocatedTables int64 `json:"no_of_colocated_tables"`

TotalSizeColocatedTables int32 `json:"total_size_colocated_tables"`
TotalSizeColocatedTables int64 `json:"total_size_colocated_tables"`

NoOfShardedTables int32 `json:"no_of_sharded_tables"`
NoOfShardedTables int64 `json:"no_of_sharded_tables"`

TotalSizeShardedTables int32 `json:"total_size_sharded_tables"`
TotalSizeShardedTables int64 `json:"total_size_sharded_tables"`
}
Loading

0 comments on commit 0c8e378

Please sign in to comment.