Skip to content

Commit 0c8e378

Browse files
committed
[#23216]yugabyted: Adding required models for source db details and target 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
1 parent 1bc7a50 commit 0c8e378

21 files changed

+840
-121
lines changed

yugabyted-ui/apiserver/cmd/server/.docs/api/openapi.yaml

+263-44
Large diffs are not rendered by default.

yugabyted-ui/apiserver/cmd/server/.openapi-generator/FILES

+7
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,12 @@ models/model_api_error.go
88
models/model_api_error_error.go
99
models/model_api_for_migration_assessment_page.go
1010
models/model_api_for_plan_and_asses_page.go
11+
models/model_api_for_source_db_sql_objects_metadata_page.go
12+
models/model_api_for_target_schema_recommendations_page.go
1113
models/model_assesment_complexity_info.go
1214
models/model_assessment_report_summary.go
15+
models/model_assessment_source_db_object.go
16+
models/model_assessment_target_recommendation_object.go
1317
models/model_backup_details.go
1418
models/model_cloud_enum.go
1519
models/model_cloud_info.go
@@ -68,13 +72,16 @@ models/model_slow_query_response_ysql_data.go
6872
models/model_slow_query_response_ysql_query_item.go
6973
models/model_source_database_info.go
7074
models/model_source_environment_info.go
75+
models/model_sql_object_count.go
76+
models/model_sql_object_metadata.go
7177
models/model_sql_objects_details.go
7278
models/model_table_info.go
7379
models/model_table_info_table_replication_info.go
7480
models/model_table_replication_info.go
7581
models/model_tablet_info.go
7682
models/model_target_cluster_recommendation_details.go
7783
models/model_target_cluster_spec.go
84+
models/model_target_recommendation_item.go
7885
models/model_target_schema_recommendations.go
7986
models/model_unsupported_sql_info.go
8087
models/model_version_info.go

yugabyted-ui/apiserver/cmd/server/handlers/api_voyager.go

+119-35
Original file line numberDiff line numberDiff line change
@@ -600,47 +600,47 @@ func (c *Container) GetVoyagerAssessmentReport(ctx echo.Context) error {
600600
voyagerAssessmentReportResponse.SourceEnvironment.NoOfConnections = ""
601601

602602
voyagerAssessmentReportResponse.SourceDatabase.TableSize =
603-
int32(assessmentReportVisualisationData.Report.SourceSizeDetails.TotalTableSize)
603+
assessmentReportVisualisationData.Report.SourceSizeDetails.TotalTableSize
604604
voyagerAssessmentReportResponse.SourceDatabase.TableRowCount =
605-
int32(assessmentReportVisualisationData.Report.SourceSizeDetails.TotalTableRowCount)
605+
assessmentReportVisualisationData.Report.SourceSizeDetails.TotalTableRowCount
606606
voyagerAssessmentReportResponse.SourceDatabase.TotalTableSize =
607-
int32(assessmentReportVisualisationData.Report.SourceSizeDetails.TotalDBSize)
607+
assessmentReportVisualisationData.Report.SourceSizeDetails.TotalDBSize
608608
voyagerAssessmentReportResponse.SourceDatabase.TotalIndexSize =
609-
int32(assessmentReportVisualisationData.Report.SourceSizeDetails.TotalIndexSize)
609+
assessmentReportVisualisationData.Report.SourceSizeDetails.TotalIndexSize
610610

611611

612612
voyagerAssessmentReportResponse.TargetRecommendations.RecommendationSummary =
613613
assessmentReport.Sizing.SizingRecommendation.ColocatedReasoning
614614
voyagerAssessmentReportResponse.TargetRecommendations.
615615
TargetClusterRecommendation.NumNodes =
616-
int32(assessmentReport.Sizing.SizingRecommendation.NumNodes)
616+
int64(assessmentReport.Sizing.SizingRecommendation.NumNodes)
617617
voyagerAssessmentReportResponse.TargetRecommendations.
618618
TargetClusterRecommendation.VcpuPerNode =
619-
int32(assessmentReport.Sizing.SizingRecommendation.VCPUsPerInstance)
619+
int64(assessmentReport.Sizing.SizingRecommendation.VCPUsPerInstance)
620620
voyagerAssessmentReportResponse.TargetRecommendations.
621621
TargetClusterRecommendation.MemoryPerNode =
622-
int32(assessmentReport.Sizing.SizingRecommendation.MemoryPerInstance)
622+
int64(assessmentReport.Sizing.SizingRecommendation.MemoryPerInstance)
623623
voyagerAssessmentReportResponse.TargetRecommendations.
624624
TargetClusterRecommendation.InsertsPerNode =
625-
int32(assessmentReport.Sizing.SizingRecommendation.OptimalInsertConnectionsPerNode)
625+
assessmentReport.Sizing.SizingRecommendation.OptimalInsertConnectionsPerNode
626626
voyagerAssessmentReportResponse.TargetRecommendations.
627627
TargetClusterRecommendation.ConnectionsPerNode =
628-
int32(assessmentReport.Sizing.SizingRecommendation.OptimalSelectConnectionsPerNode)
628+
assessmentReport.Sizing.SizingRecommendation.OptimalSelectConnectionsPerNode
629629

630630
voyagerAssessmentReportResponse.TargetRecommendations.
631631
TargetSchemaRecommendation.NoOfColocatedTables =
632-
int32(len(assessmentReport.Sizing.SizingRecommendation.ColocatedTables))
632+
int64(len(assessmentReport.Sizing.SizingRecommendation.ColocatedTables))
633633
voyagerAssessmentReportResponse.TargetRecommendations.
634634
TargetSchemaRecommendation.NoOfShardedTables =
635-
int32(len(assessmentReport.Sizing.SizingRecommendation.ShardedTables))
635+
int64(len(assessmentReport.Sizing.SizingRecommendation.ShardedTables))
636636
voyagerAssessmentReportResponse.TargetRecommendations.
637637
TargetSchemaRecommendation.TotalSizeColocatedTables =
638-
int32(assessmentReportVisualisationData.Report.
639-
TargetSizingRecommendations.TotalColocatedSize)
638+
assessmentReportVisualisationData.Report.
639+
TargetSizingRecommendations.TotalColocatedSize
640640
voyagerAssessmentReportResponse.TargetRecommendations.
641641
TargetSchemaRecommendation.TotalSizeShardedTables =
642-
int32(assessmentReportVisualisationData.Report.
643-
TargetSizingRecommendations.TotalShardedSize)
642+
assessmentReportVisualisationData.Report.
643+
TargetSizingRecommendations.TotalShardedSize
644644

645645
dbObjectsMap := map[string]int{}
646646
for _, dbObject := range assessmentReport.SchemaSummary.DBObjects {
@@ -662,29 +662,47 @@ func (c *Container) GetVoyagerAssessmentReport(ctx echo.Context) error {
662662
_, ok := dbObjectsMap[dbObjectType]
663663
if ok {
664664
dbObjectsMap[dbObjectType] = dbObjectsMap[dbObjectType] - count
665+
665666
}
666667
}
667668

668-
voyagerAssessmentReportResponse.RecommendedRefactoring.Function.Automatic =
669-
int32(dbObjectsMap["FUNCTION"])
670-
voyagerAssessmentReportResponse.RecommendedRefactoring.Function.Manual =
671-
int32(dbObjectConversionIssuesMap["FUNCTION"])
672-
voyagerAssessmentReportResponse.RecommendedRefactoring.SqlType.Automatic =
673-
int32(dbObjectsMap["TYPE"])
674-
voyagerAssessmentReportResponse.RecommendedRefactoring.SqlType.Manual =
675-
int32(dbObjectConversionIssuesMap["TYPE"])
676-
voyagerAssessmentReportResponse.RecommendedRefactoring.Table.Automatic =
677-
int32(dbObjectsMap["TABLE"])
678-
voyagerAssessmentReportResponse.RecommendedRefactoring.Table.Manual =
679-
int32(dbObjectConversionIssuesMap["TABLE"])
680-
voyagerAssessmentReportResponse.RecommendedRefactoring.Triggers.Automatic =
681-
int32(dbObjectsMap["TRIGGER"])
682-
voyagerAssessmentReportResponse.RecommendedRefactoring.Triggers.Manual =
683-
int32(dbObjectConversionIssuesMap["TRIGGER"])
684-
voyagerAssessmentReportResponse.RecommendedRefactoring.View.Automatic =
685-
int32(dbObjectsMap["VIEW"])
686-
voyagerAssessmentReportResponse.RecommendedRefactoring.View.Manual =
687-
int32(dbObjectConversionIssuesMap["VIEW"])
669+
recommendedRefactoringList := []models.RefactoringCount{}
670+
for sqlObjectType, sqlObjectcount := range dbObjectsMap {
671+
var refactorCount models.RefactoringCount
672+
refactorCount.SqlObjectType = sqlObjectType
673+
issueCount, ok := dbObjectConversionIssuesMap[sqlObjectType]
674+
if ok {
675+
refactorCount.Automatic = int32(sqlObjectcount - issueCount)
676+
refactorCount.Manual = int32(issueCount)
677+
} else {
678+
refactorCount.Automatic = int32(sqlObjectcount)
679+
refactorCount.Manual = 0
680+
}
681+
recommendedRefactoringList = append(recommendedRefactoringList, refactorCount)
682+
}
683+
684+
voyagerAssessmentReportResponse.RecommendedRefactoring.RefactorDetails =
685+
recommendedRefactoringList
686+
// voyagerAssessmentReportResponse.RecommendedRefactoring.Function.Automatic =
687+
// int32(dbObjectsMap["FUNCTION"])
688+
// voyagerAssessmentReportResponse.RecommendedRefactoring.Function.Manual =
689+
// int32(dbObjectConversionIssuesMap["FUNCTION"])
690+
// voyagerAssessmentReportResponse.RecommendedRefactoring.SqlType.Automatic =
691+
// int32(dbObjectsMap["TYPE"])
692+
// voyagerAssessmentReportResponse.RecommendedRefactoring.SqlType.Manual =
693+
// int32(dbObjectConversionIssuesMap["TYPE"])
694+
// voyagerAssessmentReportResponse.RecommendedRefactoring.Table.Automatic =
695+
// int32(dbObjectsMap["TABLE"])
696+
// voyagerAssessmentReportResponse.RecommendedRefactoring.Table.Manual =
697+
// int32(dbObjectConversionIssuesMap["TABLE"])
698+
// voyagerAssessmentReportResponse.RecommendedRefactoring.Triggers.Automatic =
699+
// int32(dbObjectsMap["TRIGGER"])
700+
// voyagerAssessmentReportResponse.RecommendedRefactoring.Triggers.Manual =
701+
// int32(dbObjectConversionIssuesMap["TRIGGER"])
702+
// voyagerAssessmentReportResponse.RecommendedRefactoring.View.Automatic =
703+
// int32(dbObjectsMap["VIEW"])
704+
// voyagerAssessmentReportResponse.RecommendedRefactoring.View.Manual =
705+
// int32(dbObjectConversionIssuesMap["VIEW"])
688706

689707
// Convert the backend model []UnsupportedDataTypes into UX model []UnsupportedSqlInfo
690708
unsupportedDataTypeMap := make(map[string]models.UnsupportedSqlInfo)
@@ -756,3 +774,69 @@ func getMigrationAssessmentReportFuture(log logger.Logger, migrationUuid string,
756774
MigrationAsessmentReportResponse.Report = assessmentVisualisationData
757775
future <- MigrationAsessmentReportResponse
758776
}
777+
778+
func (c *Container) GetAssessmentSourceDBDetails(ctx echo.Context) error {
779+
780+
assessmentSourceDBDetails := models.AssessmentSourceDbObject {
781+
SqlObjectsCount: []models.SqlObjectCount{},
782+
SqlObjectsMetadata: []models.SqlObjectMetadata{},
783+
}
784+
785+
sqlObjectsList := []models.SqlObjectCount{}
786+
var sqlObject1 models.SqlObjectCount
787+
sqlObject1.SqlType = "Table"
788+
sqlObject1.Count = 10
789+
sqlObjectsList = append(sqlObjectsList, sqlObject1)
790+
var sqlObject2 models.SqlObjectCount
791+
sqlObject2.SqlType = "Index"
792+
sqlObject2.Count = 5
793+
sqlObjectsList = append(sqlObjectsList, sqlObject2)
794+
var sqlObject3 models.SqlObjectCount
795+
sqlObject3.SqlType = "Sequence"
796+
sqlObject3.Count = 5
797+
sqlObjectsList = append(sqlObjectsList, sqlObject3)
798+
assessmentSourceDBDetails.SqlObjectsCount = sqlObjectsList
799+
800+
sqlMetadataList := []models.SqlObjectMetadata{}
801+
var sqlMetadata1 models.SqlObjectMetadata
802+
sqlMetadata1.SqlType = "Table"
803+
sqlMetadata1.RowCount = 1000000
804+
sqlMetadata1.Iops = 1000
805+
sqlMetadata1.Size = 12321312312
806+
sqlMetadataList = append(sqlMetadataList, sqlMetadata1)
807+
assessmentSourceDBDetails.SqlObjectsMetadata = sqlMetadataList
808+
809+
return ctx.JSON(http.StatusOK, assessmentSourceDBDetails)
810+
}
811+
812+
func (c *Container) GetTargetRecommendations(ctx echo.Context) error {
813+
814+
targetRecommendationDetails := models.AssessmentTargetRecommendationObject {
815+
NumOfColocatedTables: 0,
816+
TotalSizeColocatedTables: 0,
817+
NumOfShardedTable: 0,
818+
TotalSizeShardedTables: 0,
819+
RecommendationDetails: []models.TargetRecommendationItem{},
820+
}
821+
822+
targetRecommendationDetails.NumOfColocatedTables = 10
823+
targetRecommendationDetails.TotalSizeColocatedTables = 123455
824+
targetRecommendationDetails.NumOfShardedTable = 5
825+
targetRecommendationDetails.TotalSizeShardedTables = 321413241
826+
827+
var recommendation1 models.TargetRecommendationItem
828+
recommendation1.TableName = "Table1"
829+
recommendation1.SchemaRecommendation = "Colocated"
830+
recommendation1.DiskSize = 123124
831+
targetRecommendationDetails.RecommendationDetails =
832+
append(targetRecommendationDetails.RecommendationDetails, recommendation1)
833+
834+
var recommendation2 models.TargetRecommendationItem
835+
recommendation2.TableName = "Table2"
836+
recommendation2.SchemaRecommendation = "Sharded"
837+
recommendation2.DiskSize = 123124
838+
targetRecommendationDetails.RecommendationDetails =
839+
append(targetRecommendationDetails.RecommendationDetails, recommendation2)
840+
841+
return ctx.JSON(http.StatusOK, targetRecommendationDetails)
842+
}

yugabyted-ui/apiserver/cmd/server/main.go

+6
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,12 @@ func main() {
260260
// Get Voyager assessment report
261261
e.GET("/api/migration_assessment_v2", c.GetVoyagerAssessmentReport)
262262

263+
// Get assessment source db details
264+
e.GET("/api/assessment_source_db_details", c.GetAssessmentSourceDBDetails)
265+
266+
// Get assessment target recommendations details
267+
e.GET("/api/assessment_target_recommendations", c.GetTargetRecommendations)
268+
263269
// Get Migrate schema task details
264270
e.GET("/api/migrate_schema", c.GetMigrateSchemaInfo)
265271

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package models
2+
3+
type ApiForSourceDbSqlObjectsMetadataPage struct {
4+
5+
Data AssessmentSourceDbObject `json:"data"`
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package models
2+
3+
type ApiForTargetSchemaRecommendationsPage struct {
4+
5+
Data AssessmentTargetRecommendationObject `json:"data"`
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package models
2+
3+
// AssessmentSourceDbObject - Details about Source DB's SQL Objects
4+
type AssessmentSourceDbObject struct {
5+
6+
SqlObjectsCount []SqlObjectCount `json:"sql_objects_count"`
7+
8+
SqlObjectsMetadata []SqlObjectMetadata `json:"sql_objects_metadata"`
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package models
2+
3+
// AssessmentTargetRecommendationObject - Details about Target table recommendations
4+
type AssessmentTargetRecommendationObject struct {
5+
6+
NumOfColocatedTables int32 `json:"num_of_colocated_tables"`
7+
8+
TotalSizeColocatedTables int64 `json:"total_size_colocated_tables"`
9+
10+
NumOfShardedTable int32 `json:"num_of_sharded_table"`
11+
12+
TotalSizeShardedTables int64 `json:"total_size_sharded_tables"`
13+
14+
RecommendationDetails []TargetRecommendationItem `json:"recommendation_details"`
15+
}

yugabyted-ui/apiserver/cmd/server/models/model_recommended_refactoring_graph.go

+1-9
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,5 @@ package models
33
// RecommendedRefactoringGraph - Refectoring recommendations for migrating SQL objects
44
type RecommendedRefactoringGraph struct {
55

6-
SqlType RefactoringCount `json:"sql_type"`
7-
8-
Table RefactoringCount `json:"table"`
9-
10-
View RefactoringCount `json:"view"`
11-
12-
Function RefactoringCount `json:"function"`
13-
14-
Triggers RefactoringCount `json:"triggers"`
6+
RefactorDetails []RefactoringCount `json:"refactor_details"`
157
}

yugabyted-ui/apiserver/cmd/server/models/model_refactoring_count.go

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package models
33
// RefactoringCount - count for automatic and manual refactoring
44
type RefactoringCount struct {
55

6+
SqlObjectType string `json:"sql_object_type"`
7+
68
Manual int32 `json:"manual"`
79

810
Automatic int32 `json:"automatic"`

yugabyted-ui/apiserver/cmd/server/models/model_source_database_info.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package models
33
// SourceDatabaseInfo - Source Database details
44
type SourceDatabaseInfo struct {
55

6-
TableSize int32 `json:"table_size"`
6+
TableSize int64 `json:"table_size"`
77

8-
TableRowCount int32 `json:"table_row_count"`
8+
TableRowCount int64 `json:"table_row_count"`
99

10-
TotalTableSize int32 `json:"total_table_size"`
10+
TotalTableSize int64 `json:"total_table_size"`
1111

12-
TotalIndexSize int32 `json:"total_index_size"`
12+
TotalIndexSize int64 `json:"total_index_size"`
1313
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package models
2+
3+
// SqlObjectCount - Count of specific Sql Object type in the source DB
4+
type SqlObjectCount struct {
5+
6+
SqlType string `json:"sql_type"`
7+
8+
Count int32 `json:"count"`
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package models
2+
3+
// SqlObjectMetadata - size, count, iops details of tables and indexes
4+
type SqlObjectMetadata struct {
5+
6+
SqlType string `json:"sql_type"`
7+
8+
RowCount int64 `json:"row_count"`
9+
10+
Size int64 `json:"size"`
11+
12+
Iops int64 `json:"iops"`
13+
}

yugabyted-ui/apiserver/cmd/server/models/model_target_cluster_spec.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ package models
33
// TargetClusterSpec - schema for target cluster cpu, memory
44
type TargetClusterSpec struct {
55

6-
NumNodes int32 `json:"num_nodes"`
6+
NumNodes int64 `json:"num_nodes"`
77

8-
VcpuPerNode int32 `json:"vcpu_per_node"`
8+
VcpuPerNode int64 `json:"vcpu_per_node"`
99

10-
MemoryPerNode int32 `json:"memory_per_node"`
10+
MemoryPerNode int64 `json:"memory_per_node"`
1111

12-
ConnectionsPerNode int32 `json:"connections_per_node"`
12+
ConnectionsPerNode int64 `json:"connections_per_node"`
1313

14-
InsertsPerNode int32 `json:"inserts_per_node"`
14+
InsertsPerNode int64 `json:"inserts_per_node"`
1515
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package models
2+
3+
// TargetRecommendationItem - Target recommendation table metadata information
4+
type TargetRecommendationItem struct {
5+
6+
TableName string `json:"table_name"`
7+
8+
DiskSize int64 `json:"disk_size"`
9+
10+
SchemaRecommendation string `json:"schema_recommendation"`
11+
}

yugabyted-ui/apiserver/cmd/server/models/model_target_schema_recommendations.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package models
33
// TargetSchemaRecommendations - Target YugabyteDB cluster schema recommendations
44
type TargetSchemaRecommendations struct {
55

6-
NoOfColocatedTables int32 `json:"no_of_colocated_tables"`
6+
NoOfColocatedTables int64 `json:"no_of_colocated_tables"`
77

8-
TotalSizeColocatedTables int32 `json:"total_size_colocated_tables"`
8+
TotalSizeColocatedTables int64 `json:"total_size_colocated_tables"`
99

10-
NoOfShardedTables int32 `json:"no_of_sharded_tables"`
10+
NoOfShardedTables int64 `json:"no_of_sharded_tables"`
1111

12-
TotalSizeShardedTables int32 `json:"total_size_sharded_tables"`
12+
TotalSizeShardedTables int64 `json:"total_size_sharded_tables"`
1313
}

0 commit comments

Comments
 (0)