// Copyright 2016-2021, Pulumi Corporation. All rights reserved. // // Utilities for testing AppDash-based tracing files. package ints import ( "os" "github.com/pulumi/appdash" ) func ReadMemoryStoreFromFile(file string) (*appdash.MemoryStore, error) { store := appdash.NewMemoryStore() traceFile, err := os.Open(file) if err != nil { return nil, err } defer traceFile.Close() _, err = store.ReadFrom(traceFile) if err != nil { return nil, err } return store, nil } func WalkTracesWithDescendants(store *appdash.MemoryStore, visit func(t *appdash.Trace) error) error { traces, err := store.Traces(appdash.TracesOpts{}) if err != nil { return err } var recur func(t *appdash.Trace) error recur = func(t *appdash.Trace) error { err := visit(t) if err != nil { return err } for _, s := range t.Sub { err = recur(s) if err != nil { return err } } return nil } for _, t := range traces { err := recur(t) if err != nil { return err } } return nil } func FindTrace(store *appdash.MemoryStore, matching func(tr *appdash.Trace) bool) (*appdash.Trace, error) { var trace *appdash.Trace err := WalkTracesWithDescendants(store, func(tr *appdash.Trace) error { if matching(tr) { trace = tr } return nil }) if err != nil { return nil, err } return trace, nil }