Skip to content

Commit 6095aa7

Browse files
committed
STAC-24504: remove _type property from snapshot request
1 parent cf1f716 commit 6095aa7

146 files changed

Lines changed: 20244 additions & 2044 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmd/topology/topology_inspect.go

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ func RunInspectCommand(
8787
)
8888

8989
request := stackstate_api.NewViewSnapshotRequest(
90-
"SnapshotRequest",
9190
query,
9291
"0.0.1",
9392
*metadata,
@@ -160,7 +159,7 @@ type Component struct {
160159
}
161160

162161
type ComponentMetadata struct {
163-
ComponentTypes map[int64]string
162+
ComponentTypes map[string]string
164163
Layers map[int64]string
165164
Domains map[int64]string
166165
Environments map[int64]string
@@ -256,19 +255,28 @@ func parseSnapshotResponse(
256255
// all metadata categories in a single loop.
257256
var metadataFieldMapping = []struct {
258257
field string
259-
setter func(*ComponentMetadata) *map[int64]string
258+
setter func(*ComponentMetadata, interface{}) error
260259
}{
261-
{"componentTypes", func(m *ComponentMetadata) *map[int64]string { return &m.ComponentTypes }},
262-
{"layers", func(m *ComponentMetadata) *map[int64]string { return &m.Layers }},
263-
{"domains", func(m *ComponentMetadata) *map[int64]string { return &m.Domains }},
264-
{"environments", func(m *ComponentMetadata) *map[int64]string { return &m.Environments }},
260+
{"componentTypes", parseComponentTypesField},
261+
{"layers", func(m *ComponentMetadata, val interface{}) error {
262+
m.Layers = parseMetadataField(val)
263+
return nil
264+
}},
265+
{"domains", func(m *ComponentMetadata, val interface{}) error {
266+
m.Domains = parseMetadataField(val)
267+
return nil
268+
}},
269+
{"environments", func(m *ComponentMetadata, val interface{}) error {
270+
m.Environments = parseMetadataField(val)
271+
return nil
272+
}},
265273
}
266274

267275
// parseMetadata extracts component type, layer, domain, and environment metadata
268276
// from the opaque Snapshot response using a table-driven approach.
269277
func parseMetadata(respMap map[string]interface{}) ComponentMetadata {
270278
metadata := ComponentMetadata{
271-
ComponentTypes: make(map[int64]string),
279+
ComponentTypes: make(map[string]string),
272280
Layers: make(map[int64]string),
273281
Domains: make(map[int64]string),
274282
Environments: make(map[int64]string),
@@ -281,13 +289,42 @@ func parseMetadata(respMap map[string]interface{}) ComponentMetadata {
281289

282290
for _, mapping := range metadataFieldMapping {
283291
if fieldValue, ok := metadataMap[mapping.field]; ok {
284-
*mapping.setter(&metadata) = parseMetadataField(fieldValue)
292+
mapping.setter(&metadata, fieldValue) //nolint:errcheck
285293
}
286294
}
287295

288296
return metadata
289297
}
290298

299+
// parseComponentTypesField extracts component types from metadata, using identifier as key
300+
func parseComponentTypesField(m *ComponentMetadata, metadataValue interface{}) error {
301+
if metadataValue == nil {
302+
return nil
303+
}
304+
305+
items, ok := metadataValue.([]interface{})
306+
if !ok {
307+
return nil
308+
}
309+
310+
for _, item := range items {
311+
if itemMap, ok := item.(map[string]interface{}); ok {
312+
var key string
313+
if identifier, ok := itemMap["identifier"].(string); ok {
314+
key = identifier
315+
} else {
316+
continue
317+
}
318+
319+
if name, ok := itemMap["name"].(string); ok {
320+
m.ComponentTypes[key] = name
321+
}
322+
}
323+
}
324+
325+
return nil
326+
}
327+
291328
// parseMetadataField extracts id/name pairs from a metadata field.
292329
// Each item in the slice should have "id" and "name" fields.
293330
func parseMetadataField(metadataValue interface{}) map[int64]string {
@@ -331,12 +368,12 @@ func parseComponentFromMap(compMap map[string]interface{}, metadata ComponentMet
331368
comp.Name = name
332369
}
333370

334-
// Parse type (first id and then lookup from component type metadata)
335-
if typeID, ok := compMap["type"].(float64); ok {
336-
if typeName, found := metadata.ComponentTypes[int64(typeID)]; found {
371+
// Parse type from typeIdentifier and lookup from component type metadata
372+
if typeIdentifier, ok := compMap["typeIdentifier"].(string); ok {
373+
if typeName, found := metadata.ComponentTypes[typeIdentifier]; found {
337374
comp.Type = typeName
338375
} else {
339-
comp.Type = fmt.Sprintf("Unknown (%d)", int64(typeID))
376+
comp.Type = "Unknown" //nolint:goconst
340377
}
341378
}
342379

cmd/topology/topology_state.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ func RunStateCommand(
8484
)
8585

8686
request := stackstate_api.NewViewSnapshotRequest(
87-
"SnapshotRequest",
8887
query,
8988
"0.0.1",
9089
*metadata,
@@ -174,12 +173,12 @@ func parseComponentStateFromMap(compMap map[string]interface{}, metadata Compone
174173
cs.Name = name
175174
}
176175

177-
// Parse type
178-
if typeID, ok := compMap["type"].(float64); ok {
179-
if typeName, found := metadata.ComponentTypes[int64(typeID)]; found {
176+
// Parse type from typeIdentifier and lookup from component type metadata
177+
if typeIdentifier, ok := compMap["typeIdentifier"].(string); ok {
178+
if typeName, found := metadata.ComponentTypes[typeIdentifier]; found {
180179
cs.Type = typeName
181180
} else {
182-
cs.Type = fmt.Sprintf("Unknown (%d)", int64(typeID))
181+
cs.Type = "Unknown"
183182
}
184183
}
185184

cmd/topology/topology_test_helper.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ func mockSnapshotResponse() sts.QuerySnapshotResult {
1212
"_type": "ViewSnapshot",
1313
"components": []interface{}{
1414
map[string]interface{}{
15-
"id": float64(229404307680647),
16-
"name": "test-component",
17-
"type": float64(239975151751041),
18-
"layer": float64(186771622698247),
19-
"domain": float64(209616858431909),
20-
"identifiers": []interface{}{"urn:test:component:1"},
21-
"tags": []interface{}{"service.namespace:test"},
15+
"id": float64(229404307680647),
16+
"name": "test-component",
17+
"typeIdentifier": "urn:test:component-type:test",
18+
"layer": float64(186771622698247),
19+
"domain": float64(209616858431909),
20+
"identifiers": []interface{}{"urn:test:component:1"},
21+
"tags": []interface{}{"service.namespace:test"},
2222
"state": map[string]interface{}{
2323
"healthState": "CRITICAL",
2424
},
@@ -27,8 +27,8 @@ func mockSnapshotResponse() sts.QuerySnapshotResult {
2727
"metadata": map[string]interface{}{
2828
"componentTypes": []interface{}{
2929
map[string]interface{}{
30-
"id": float64(239975151751041),
31-
"name": "test type",
30+
"identifier": "urn:test:component-type:test",
31+
"name": "test type",
3232
},
3333
},
3434
"layers": []interface{}{

0 commit comments

Comments
 (0)