fix bug of measurement api and add func of traverse attribute group table

This commit is contained in:
douxu 2025-12-16 16:34:19 +08:00
parent 0add3cf6db
commit 252699cb77
3 changed files with 76 additions and 7 deletions

View File

@ -0,0 +1,50 @@
// Package model define model struct of model runtime service
package model
import (
"context"
"fmt"
"modelRT/logger"
"modelRT/orm"
"gorm.io/gorm"
)
// TraverseAttributeGroupTables define func to traverse component attribute group tables
func TraverseAttributeGroupTables(ctx context.Context, db *gorm.DB) error {
var tableNames []string
result := db.Model(&orm.ProjectManager{}).Pluck("name", &tableNames)
fmt.Println(result)
if result.Error != nil && result.Error != gorm.ErrRecordNotFound {
logger.Error(ctx, "query name column data from postgres table failed", "err", result.Error)
}
if len(tableNames) == 0 {
logger.Info(ctx, "query from postgres successed, but no records found")
return nil
}
for _, tableName := range tableNames {
if tableName == "" {
continue
}
exists := db.Migrator().HasTable(tableName)
if !exists {
logger.Warn(ctx, fmt.Sprintf("table %s does not exist in the database", tableName))
}
// TODO 优化返回结构,尝试首先获取表的结构
var records []map[string]any
err := db.Table(tableName).Find(&records).Error
if err != nil && err != gorm.ErrRecordNotFound {
logger.Error(ctx, fmt.Sprintf("query table '%s' data failed", tableName), "table_name", tableName, "err", err)
continue
}
// TODO 将筛选后的属性值加入到缓存系统中
}
return nil
}

View File

@ -147,7 +147,7 @@ func RedisSearchRecommend(ctx context.Context, input string) map[string]SearchRe
for range 2 { for range 2 {
result := <-fanInChan result := <-fanInChan
if result.Err != nil { if result.Err != nil {
logger.Error(ctx, "exec redis fuzzy search by key :%s failed", "query_key", result.RecommendType, "error", result.Err) logger.Error(ctx, "exec redis fuzzy search by key failed", "recommend_type", result.RecommendType, "error", result.Err)
continue continue
} }
if result.RecommendType == constants.CompNSPathRecommendHierarchyType { if result.RecommendType == constants.CompNSPathRecommendHierarchyType {
@ -265,11 +265,11 @@ func queryMemberFromSpecificsLevel(ctx context.Context, rdb *redis.Client, hiera
} }
func getAllKeyByGridLevel(ctx context.Context, rdb *redis.Client, fanInChan chan SearchResult) { func getAllKeyByGridLevel(ctx context.Context, rdb *redis.Client, fanInChan chan SearchResult) {
queryKey := constants.RedisAllGridSetKey setKey := constants.RedisAllGridSetKey
hierarchy := constants.GridRecommendHierarchyType hierarchy := constants.GridRecommendHierarchyType
members, err := rdb.SMembers(ctx, queryKey).Result() members, err := rdb.SMembers(ctx, setKey).Result()
if err != nil { if err != nil && err != redigo.ErrNil {
logger.Error(ctx, "get all members by special key failed", "key", queryKey, "op", "SMembers", "error", err) logger.Error(ctx, "get all members from redis by special key failed", "key", setKey, "op", "SMembers", "error", err)
fanInChan <- SearchResult{ fanInChan <- SearchResult{
RecommendType: hierarchy, RecommendType: hierarchy,
@ -292,7 +292,7 @@ func getAllKeyByNSPathLevel(ctx context.Context, rdb *redis.Client, fanInChan ch
queryKey := constants.RedisAllCompNSPathSetKey queryKey := constants.RedisAllCompNSPathSetKey
hierarchy := constants.CompNSPathRecommendHierarchyType hierarchy := constants.CompNSPathRecommendHierarchyType
members, err := rdb.SMembers(ctx, queryKey).Result() members, err := rdb.SMembers(ctx, queryKey).Result()
if err != nil { if err != nil && err != redigo.ErrNil {
logger.Error(ctx, "get all members by special key failed", "key", queryKey, "op", "SMembers", "error", err) logger.Error(ctx, "get all members by special key failed", "key", queryKey, "op", "SMembers", "error", err)
fanInChan <- SearchResult{ fanInChan <- SearchResult{
@ -380,7 +380,7 @@ func handleLevelFuzzySearch(ctx context.Context, rdb *redis.Client, hierarchy co
} }
members, err := queryMemberFromSpecificsLevel(ctx, rdb, hierarchy, specificalKey) members, err := queryMemberFromSpecificsLevel(ctx, rdb, hierarchy, specificalKey)
if err != nil { if err != nil && err != redis.Nil {
logger.Error(ctx, "query members from redis by special key failed", "key", specificalKey, "member", searchInput, "op", "SMember", "error", err) logger.Error(ctx, "query members from redis by special key failed", "key", specificalKey, "member", searchInput, "op", "SMember", "error", err)
fanInChan <- SearchResult{ fanInChan <- SearchResult{
RecommendType: hierarchy, RecommendType: hierarchy,

19
orm/project_manager.go Normal file
View File

@ -0,0 +1,19 @@
// Package orm define database data struct
package orm
// ProjectManager define struct to manager component attribute tables
type ProjectManager struct {
ID int32 `gorm:"primaryKey;column:id"`
Name string `gorm:"column:name;type:varchar(64);not null"`
Tag string `gorm:"column:tag;type:varchar(64);not null"`
MetaModel string `gorm:"column:meta_model;type:varchar(64);not null"`
GroupName string `gorm:"column:group_name;type:varchar(64);not null"`
LinkType int32 `gorm:"column:link_type;type:integer;not null;default:0"`
CheckState JSONMap `gorm:"column:check_state;type:jsonb;not null;default:'{}'"`
IsPublic bool `gorm:"column:ispublic;type:boolean;not null;default:false"`
}
// TableName func respresent return table name of Page
func (p *ProjectManager) TableName() string {
return "project_manager"
}