@@ -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
162161type 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.
257256var 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.
269277func 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.
293330func 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
0 commit comments