Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change return format of ob parameters #750

Merged
merged 3 commits into from
Mar 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 79 additions & 3 deletions internal/dashboard/business/oceanbase/obcluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import (
"github.com/oceanbase/ob-operator/internal/dashboard/model/response"
"github.com/oceanbase/ob-operator/internal/dashboard/utils"
oberr "github.com/oceanbase/ob-operator/pkg/errors"
models "github.com/oceanbase/ob-operator/pkg/oceanbase-sdk/model"
"github.com/oceanbase/ob-operator/pkg/oceanbase-sdk/model"
)

const (
Expand Down Expand Up @@ -933,7 +933,7 @@ func DeleteOBServers(ctx context.Context, nn *param.K8sObjectIdentity, param *pa
return buildOBClusterResponse(ctx, obcluster)
}

func ListOBClusterParameters(ctx context.Context, nn *param.K8sObjectIdentity) ([]*models.Parameter, error) {
func ListOBClusterParameters(ctx context.Context, nn *param.K8sObjectIdentity) ([]response.AggregatedParameter, error) {
obcluster, err := clients.GetOBCluster(ctx, nn.Namespace, nn.Name)
if err != nil {
return nil, errors.Wrapf(err, "Get obcluster %s %s", nn.Namespace, nn.Name)
Expand All @@ -948,5 +948,81 @@ func ListOBClusterParameters(ctx context.Context, nn *param.K8sObjectIdentity) (
logger.WithError(err).Error("Failed to query parameters")
return nil, errors.New("Failed to list obcluster parameters")
}
return parameters, nil
// convert to response data structure
aggParameters := aggregrateParametersByName(parameters)
return aggParameters, nil
}

func generateMetaStr(metas []response.ParameterMeta) string {
metaStrs := make([]string, 0)
for _, meta := range metas {
if meta.TenantID != 0 {
metaStrs = append(metaStrs, fmt.Sprintf("observer: %s, tenantId: %d", meta.SvrIp, meta.TenantID))
} else {
metaStrs = append(metaStrs, fmt.Sprintf("observer: %s", meta.SvrIp))
}
}
return strings.Join(metaStrs, "; ")
}

func aggregrateParameterByName(parameters []*model.Parameter) response.AggregatedParameter {
if len(parameters) == 0 {
return response.AggregatedParameter{}
}
aggValues := make([]response.AggregratedParameterValue, 0)
for _, parameter := range parameters {
meta := response.ParameterMeta{
Zone: parameter.Zone,
SvrIp: parameter.SvrIp,
SvrPort: parameter.SvrPort,
TenantID: parameter.TenantID,
}
match := false
for idx, aggValue := range aggValues {
if parameter.Value == aggValue.Value {
match = true
metas := aggValue.Metas
metas = append(metas, meta)
aggValues[idx].Metas = metas
aggValues[idx].MetasStr = generateMetaStr(metas)
break
}
}
if !match {
metas := make([]response.ParameterMeta, 0)
metas = append(metas, meta)
aggValues = append(aggValues, response.AggregratedParameterValue{
Value: parameter.Value,
Metas: metas,
MetasStr: generateMetaStr(metas),
})
}
}
return response.AggregatedParameter{
Name: parameters[0].Name,
Values: aggValues,
Scope: parameters[0].Scope,
EditLevel: parameters[0].EditLevel,
DataType: parameters[0].DataType,
Info: parameters[0].Info,
Section: parameters[0].Section,
}
}

func aggregrateParametersByName(parameters []*model.Parameter) []response.AggregatedParameter {
aggMap := make(map[string][]*model.Parameter)
for _, parameter := range parameters {
parameterList, exists := aggMap[parameter.Name]
if !exists {
parameterList = make([]*model.Parameter, 0)
}
parameterList = append(parameterList, parameter)
aggMap[parameter.Name] = parameterList
}
aggParameters := make([]response.AggregatedParameter, 0)
for _, parameterList := range aggMap {
aggParameter := aggregrateParameterByName(parameterList)
aggParameters = append(aggParameters, aggParameter)
}
return aggParameters
}
3 changes: 1 addition & 2 deletions internal/dashboard/handler/obcluster_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import (
crypto "github.com/oceanbase/ob-operator/pkg/crypto"
httpErr "github.com/oceanbase/ob-operator/pkg/errors"
"github.com/oceanbase/ob-operator/pkg/k8s/client"
"github.com/oceanbase/ob-operator/pkg/oceanbase-sdk/model"
)

// @ID GetOBClusterStatistic
Expand Down Expand Up @@ -488,7 +487,7 @@ func DeleteOBServers(c *gin.Context) (*response.OBCluster, error) {
// @Failure 401 object response.APIResponse
// @Failure 500 object response.APIResponse
// @Router /api/v1/obclusters/namespace/{namespace}/name/{name}/parameters [GET]
func ListOBClusterParameters(c *gin.Context) ([]*model.Parameter, error) {
func ListOBClusterParameters(c *gin.Context) ([]response.AggregatedParameter, error) {
nn := &param.K8sObjectIdentity{}
err := c.BindUri(nn)
if err != nil {
Expand Down
23 changes: 23 additions & 0 deletions internal/dashboard/model/response/obcluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,3 +144,26 @@ type OBZoneAvailableResource struct {
AvailableMemory int64 `json:"availableMemory" example:"5368709120" binding:"required"`
AvailableCPU int64 `json:"availableCPU" example:"12" binding:"required"`
}

type ParameterMeta struct {
Zone string `json:"zone"`
SvrIp string `json:"svr_ip"`
SvrPort int64 `json:"svr_port"`
TenantID int64 `json:"tenant_id"`
}

type AggregratedParameterValue struct {
Value string `json:"value"`
Metas []ParameterMeta `json:"metas"`
MetasStr string `json:"metasStr"`
}

type AggregatedParameter struct {
Name string `json:"name"`
Values []AggregratedParameterValue `json:"values"`
Scope string `json:"scope"`
EditLevel string `json:"editLevel"`
DataType string `json:"dataType"`
Info string `json:"info"`
Section string `json:"section"`
}
1 change: 1 addition & 0 deletions pkg/oceanbase-sdk/const/sql/parameter.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@ const (
ListParametersWithTenantID = "select name, value, IFNULL(data_type, 'unknown') as data_type, info, section, edit_level, scope from GV$OB_PARAMETERS where tenant_id = ?"
SelectCompatibleOfTenants = "select name, value, tenant_id from GV$OB_PARAMETERS where name = 'compatible'"
ListParametersGroupByName = "select name, value, IFNULL(data_type, 'unknown') as data_type, info, section, edit_level, scope, svr_ip, zone, svr_port, IFNULL(tenant_id, 0) as tenant_id from GV$OB_PARAMETERS group by name"
ListAllParameters = "select name, value, IFNULL(data_type, 'unknown') as data_type, info, section, edit_level, scope, svr_ip, zone, svr_port, IFNULL(tenant_id, 0) as tenant_id from GV$OB_PARAMETERS"
)
12 changes: 6 additions & 6 deletions pkg/oceanbase-sdk/model/parameter.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ package model

type Parameter struct {
Zone string `json:"zone" db:"zone"`
SvrIp string `json:"svr_ip" db:"svr_ip"`
SvrPort int64 `json:"svr_port" db:"svr_port"`
SvrIp string `json:"svrIp" db:"svr_ip"`
SvrPort int64 `json:"svrPort" db:"svr_port"`
Name string `json:"name" db:"name"`
Value string `json:"value" db:"value"`
Scope string `json:"scope" db:"scope"`
EditLevel string `json:"edit_level" db:"edit_level"`
TenantID int64 `json:"tenant_id" db:"tenant_id"`
EditLevel string `json:"editLevel" db:"edit_level"`
TenantID int64 `json:"tenantId" db:"tenant_id"`

DataType string `json:"dataType" db:"data_type"`
Info string `json:"info"`
Section string `json:"section"`
Info string `json:"info" db:"info"`
Section string `json:"section" db:"section"`
}
2 changes: 1 addition & 1 deletion pkg/oceanbase-sdk/operation/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func (m *OceanbaseOperationManager) GetVersion(ctx context.Context) (*model.OBVe

func (m *OceanbaseOperationManager) ListClusterParameters(ctx context.Context) ([]*model.Parameter, error) {
params := make([]*model.Parameter, 0)
err := m.QueryList(ctx, &params, sql.ListParametersGroupByName)
err := m.QueryList(ctx, &params, sql.ListAllParameters)
if err != nil {
return nil, errors.Wrap(err, "List cluster parameters")
}
Expand Down