Skip to content

Commit

Permalink
Merge pull request #325 from abdullah1308/unique-counts
Browse files Browse the repository at this point in the history
Added count for unique models and components
  • Loading branch information
leecalcote authored Jul 11, 2023
2 parents 70d87d1 + b911314 commit 4623108
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 10 deletions.
17 changes: 15 additions & 2 deletions models/meshmodel/core/v1alpha1/component.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,24 @@ func CreateComponent(db *database.Handler, c ComponentDefinition) (uuid.UUID, er
err = db.Create(&cdb).Error
return c.ID, err
}
func GetMeshModelComponents(db *database.Handler, f ComponentFilter) (c []ComponentDefinition, count int64) {
func GetMeshModelComponents(db *database.Handler, f ComponentFilter) (c []ComponentDefinition, count int64, unique int) {
type componentDefinitionWithModel struct {
ComponentDefinitionDB
ModelDB
CategoryDB
}

countUniqueComponents := func(components []componentDefinitionWithModel) int {
set := make(map[string]struct{})
for _, model := range components {
key := model.ComponentDefinitionDB.Kind + "@" + model.APIVersion + "@" + model.ModelDB.Name + "@" + model.ModelDB.Version
if _, ok := set[key]; !ok {
set[key] = struct{}{}
}
}
return len(set)
}

var componentDefinitionsWithModel []componentDefinitionWithModel
finder := db.Model(&ComponentDefinitionDB{}).
Select("component_definition_dbs.*, model_dbs.*,category_dbs.*").
Expand Down Expand Up @@ -146,7 +157,9 @@ func GetMeshModelComponents(db *database.Handler, f ComponentFilter) (c []Compon
c = append(c, cm.ComponentDefinitionDB.GetComponentDefinition(cm.ModelDB.GetModel(cm.CategoryDB.GetCategory(db))))
}

return c, count
unique = countUniqueComponents(componentDefinitionsWithModel)

return c, count, unique
}

type ComponentFilter struct {
Expand Down
27 changes: 19 additions & 8 deletions models/meshmodel/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,40 +157,51 @@ func (rm *RegistryManager) RegisterEntity(h Host, en Entity) error {
}
}

func (rm *RegistryManager) GetEntities(f types.Filter) ([]Entity, *int64) {
func (rm *RegistryManager) GetEntities(f types.Filter) ([]Entity, *int64, *int) {
switch filter := f.(type) {
case *v1alpha1.ComponentFilter:
en := make([]Entity, 0)
comps, count := v1alpha1.GetMeshModelComponents(rm.db, *filter)
comps, count, unique := v1alpha1.GetMeshModelComponents(rm.db, *filter)
for _, comp := range comps {
en = append(en, comp)
}
return en, &count
return en, &count, &unique
case *v1alpha1.RelationshipFilter:
en := make([]Entity, 0)
relationships, count := v1alpha1.GetMeshModelRelationship(rm.db, *filter)
for _, rel := range relationships {
en = append(en, rel)
}
return en, &count
return en, &count, nil
case *v1alpha1.PolicyFilter:
en := make([]Entity, 0)
policies := v1alpha1.GetMeshModelPolicy(rm.db, *filter)
for _, pol := range policies {
en = append(en, pol)
}
return en, nil
return en, nil, nil
default:
return nil, nil
return nil, nil, nil
}
}
func (rm *RegistryManager) GetModels(db *database.Handler, f types.Filter) ([]v1alpha1.Model, int64) {
func (rm *RegistryManager) GetModels(db *database.Handler, f types.Filter) ([]v1alpha1.Model, int64, int) {
var m []v1alpha1.Model
type modelWithCategories struct {
v1alpha1.ModelDB
v1alpha1.CategoryDB
}

countUniqueModels := func(models []modelWithCategories) int {
set := make(map[string]struct{})
for _, model := range models {
key := model.ModelDB.Name + "@" + model.ModelDB.Version
if _, ok := set[key]; !ok {
set[key] = struct{}{}
}
}
return len(set)
}

var modelWithCategoriess []modelWithCategories
finder := db.Model(&v1alpha1.ModelDB{}).
Select("model_dbs.*, category_dbs.*").
Expand Down Expand Up @@ -248,7 +259,7 @@ func (rm *RegistryManager) GetModels(db *database.Handler, f types.Filter) ([]v1
for _, modelDB := range modelWithCategoriess {
m = append(m, modelDB.ModelDB.GetModel(modelDB.GetCategory(db)))
}
return m, count
return m, count, countUniqueModels(modelWithCategoriess)
}
func (rm *RegistryManager) GetCategories(db *database.Handler, f types.Filter) ([]v1alpha1.Category, int64) {
var catdb []v1alpha1.CategoryDB
Expand Down

0 comments on commit 4623108

Please sign in to comment.