1
1
package registry
2
2
3
3
import (
4
+ "encoding/json"
4
5
"fmt"
5
6
"strings"
6
7
"time"
@@ -11,6 +12,7 @@ import (
11
12
"github.com/layer5io/meshkit/models/meshmodel/core/v1alpha1"
12
13
"golang.org/x/text/cases"
13
14
"golang.org/x/text/language"
15
+ "gorm.io/gorm"
14
16
"gorm.io/gorm/clause"
15
17
)
16
18
@@ -47,6 +49,37 @@ type RegistryManager struct {
47
49
db * database.Handler //This database handler will be used to perform queries inside the database
48
50
}
49
51
52
+ // Registers models into registries table.
53
+ func registerModel (db * database.Handler , regID , modelID uuid.UUID ) error {
54
+ entity := Registry {
55
+ RegistrantID : regID ,
56
+ Entity : modelID ,
57
+ Type : types .Model ,
58
+ }
59
+
60
+ byt , err := json .Marshal (entity )
61
+ if err != nil {
62
+ return err
63
+ }
64
+
65
+ entityID := uuid .NewSHA1 (uuid.UUID {}, byt )
66
+ var reg Registry
67
+ err = db .First (& reg , "id = ?" , entityID ).Error
68
+ if err != nil && err != gorm .ErrRecordNotFound {
69
+ return err
70
+ }
71
+
72
+ if err == gorm .ErrRecordNotFound {
73
+ entity .ID = entityID
74
+ err = db .Create (& entity ).Error
75
+ if err != nil {
76
+ return err
77
+ }
78
+ }
79
+
80
+ return nil
81
+ }
82
+
50
83
// NewRegistryManager initializes the registry manager by creating appropriate tables.
51
84
// Any new entities that are added to the registry should be migrated here into the database
52
85
func NewRegistryManager (db * database.Handler ) (* RegistryManager , error ) {
@@ -86,14 +119,22 @@ func (rm *RegistryManager) RegisterEntity(h Host, en Entity) error {
86
119
if entity .Schema == "" { //For components with an empty schema, exit quietly
87
120
return nil
88
121
}
89
- componentID , err := v1alpha1 .CreateComponent (rm .db , entity )
122
+
123
+ registrantID , err := createHost (rm .db , h )
90
124
if err != nil {
91
125
return err
92
126
}
93
- registrantID , err := createHost (rm .db , h )
127
+
128
+ componentID , modelID , err := v1alpha1 .CreateComponent (rm .db , entity )
94
129
if err != nil {
95
130
return err
96
131
}
132
+
133
+ err = registerModel (rm .db , registrantID , modelID )
134
+ if err != nil {
135
+ return err
136
+ }
137
+
97
138
entry := Registry {
98
139
ID : uuid .New (),
99
140
RegistrantID : registrantID ,
@@ -104,14 +145,22 @@ func (rm *RegistryManager) RegisterEntity(h Host, en Entity) error {
104
145
}
105
146
return rm .db .Create (& entry ).Error
106
147
case v1alpha1.RelationshipDefinition :
107
- relationshipID , err := v1alpha1 .CreateRelationship (rm .db , entity )
148
+
149
+ registrantID , err := createHost (rm .db , h )
108
150
if err != nil {
109
151
return err
110
152
}
111
- registrantID , err := createHost (rm .db , h )
153
+
154
+ relationshipID , modelID , err := v1alpha1 .CreateRelationship (rm .db , entity )
155
+ if err != nil {
156
+ return err
157
+ }
158
+
159
+ err = registerModel (rm .db , registrantID , modelID )
112
160
if err != nil {
113
161
return err
114
162
}
163
+
115
164
entry := Registry {
116
165
ID : uuid .New (),
117
166
RegistrantID : registrantID ,
@@ -123,14 +172,21 @@ func (rm *RegistryManager) RegisterEntity(h Host, en Entity) error {
123
172
return rm .db .Create (& entry ).Error
124
173
//Add logic for Policies and other entities below
125
174
case v1alpha1.PolicyDefinition :
126
- policyID , err := v1alpha1 . CreatePolicy (rm .db , entity )
175
+ registrantID , err := createHost (rm .db , h )
127
176
if err != nil {
128
177
return err
129
178
}
130
- registrantID , err := createHost (rm .db , h )
179
+
180
+ policyID , modelID , err := v1alpha1 .CreatePolicy (rm .db , entity )
131
181
if err != nil {
132
182
return err
133
183
}
184
+
185
+ err = registerModel (rm .db , registrantID , modelID )
186
+ if err != nil {
187
+ return err
188
+ }
189
+
134
190
entry := Registry {
135
191
ID : uuid .New (),
136
192
RegistrantID : registrantID ,
@@ -194,7 +250,7 @@ func (rm *RegistryManager) GetModels(db *database.Handler, f types.Filter) ([]v1
194
250
var modelWithCategoriess []modelWithCategories
195
251
finder := db .Model (& v1alpha1.ModelDB {}).
196
252
Select ("model_dbs.*, category_dbs.*" ).
197
- Joins ("JOIN category_dbs ON model_dbs.category_id = category_dbs.id" ) //
253
+ Joins ("JOIN category_dbs ON model_dbs.category_id = category_dbs.id" )
198
254
199
255
// total count before pagination
200
256
var count int64
@@ -247,7 +303,12 @@ func (rm *RegistryManager) GetModels(db *database.Handler, f types.Filter) ([]v1
247
303
}
248
304
249
305
for _ , modelDB := range modelWithCategoriess {
250
- m = append (m , modelDB .ModelDB .GetModel (modelDB .GetCategory (db )))
306
+ model := modelDB .ModelDB .GetModel (modelDB .GetCategory (db ))
307
+ host := rm .GetRegistrant (model )
308
+ model .HostID = host .ID
309
+ model .HostName = host .Hostname
310
+ model .DisplayHostName = host .Hostname
311
+ m = append (m , model )
251
312
}
252
313
return m , count , countUniqueModels (modelWithCategoriess )
253
314
}
0 commit comments