github.com/newrelic/newrelic-client-go@v1.1.0/pkg/edge/trace_observers.go (about) 1 package edge 2 3 import ( 4 "context" 5 "fmt" 6 ) 7 8 // ListTraceObservers lists the trace observers for an account. 9 func (e *Edge) ListTraceObservers(accountID int) ([]EdgeTraceObserver, error) { 10 return e.ListTraceObserversWithContext(context.Background(), accountID) 11 } 12 13 // ListTraceObserversWithContext lists the trace observers for an account. 14 func (e *Edge) ListTraceObserversWithContext(ctx context.Context, accountID int) ([]EdgeTraceObserver, error) { 15 resp := traceObserverResponse{} 16 vars := map[string]interface{}{ 17 "accountId": accountID, 18 } 19 20 if err := e.client.NerdGraphQueryWithContext(ctx, listTraceObserversQuery, vars, &resp); err != nil { 21 return nil, err 22 } 23 24 return resp.Actor.Account.Edge.Tracing.TraceObservers, nil 25 } 26 27 // CreateTraceObserver creates a trace observer for an account. 28 func (e *Edge) CreateTraceObserver(accountID int, name string, providerRegion EdgeProviderRegion) (*EdgeTraceObserver, error) { 29 return e.CreateTraceObserverWithContext(context.Background(), accountID, name, providerRegion) 30 } 31 32 // CreateTraceObserverWithContext creates a trace observer for an account. 33 func (e *Edge) CreateTraceObserverWithContext(ctx context.Context, accountID int, name string, providerRegion EdgeProviderRegion) (*EdgeTraceObserver, error) { 34 resp := createTraceObserverResponse{} 35 vars := map[string]interface{}{ 36 "accountId": accountID, 37 "traceObserverConfigs": []EdgeCreateTraceObserverInput{{true, name, providerRegion}}, 38 } 39 40 if err := e.client.NerdGraphQueryWithContext(ctx, createTraceObserverMutation, vars, &resp); err != nil { 41 return nil, err 42 } 43 44 errors := resp.EdgeCreateTraceObserver.Responses[0].Errors 45 if len(errors) > 0 { 46 return nil, fmt.Errorf("error creating trace observer: %s", errors[0].Message) 47 } 48 49 return &resp.EdgeCreateTraceObserver.Responses[0].TraceObserver, nil 50 } 51 52 // DeleteTraceObserver deletes a trace observer for an account. 53 func (e *Edge) DeleteTraceObserver(accountID int, id int) (*EdgeTraceObserver, error) { 54 return e.DeleteTraceObserverWithContext(context.Background(), accountID, id) 55 } 56 57 // DeleteTraceObserverWithContext deletes a trace observer for an account. 58 func (e *Edge) DeleteTraceObserverWithContext(ctx context.Context, accountID int, id int) (*EdgeTraceObserver, error) { 59 resp := deleteTraceObserversResponse{} 60 61 vars := map[string]interface{}{ 62 "accountId": accountID, 63 "traceObserverConfigs": []EdgeDeleteTraceObserverInput{{id}}, 64 } 65 66 if err := e.client.NerdGraphQueryWithContext(ctx, deleteTraceObserverMutation, vars, &resp); err != nil { 67 return nil, err 68 } 69 70 errors := resp.EdgeDeleteTraceObservers.Responses[0].Errors 71 if len(errors) > 0 { 72 return nil, fmt.Errorf("error deleting trace observer: %s", errors[0].Message) 73 } 74 75 return &resp.EdgeDeleteTraceObservers.Responses[0].TraceObserver, nil 76 } 77 78 type traceObserverResponse struct { 79 Actor struct { 80 Account struct { 81 Edge struct { 82 Tracing EdgeTracing 83 } 84 } 85 } 86 } 87 88 const ( 89 traceObserverSchemaFields = ` 90 status 91 providerRegion 92 name 93 id 94 endpoints { 95 https { 96 url 97 port 98 host 99 } 100 endpointType 101 agent { 102 port 103 host 104 } 105 status 106 }` 107 108 traceObserverErrorSchema = ` 109 errors { 110 type 111 message 112 }` 113 114 listTraceObserversQuery = `query($accountId: Int!) { actor { account(id: $accountId) { edge { tracing { 115 traceObservers { ` + 116 traceObserverSchemaFields + ` 117 } } } } } }` 118 119 createTraceObserverMutation = ` 120 mutation($traceObserverConfigs: [EdgeCreateTraceObserverInput!]!, $accountId: Int!) { 121 edgeCreateTraceObserver(traceObserverConfigs: $traceObserverConfigs, accountId: $accountId) { 122 responses { 123 traceObserver { ` + 124 traceObserverSchemaFields + ` 125 } ` + 126 traceObserverErrorSchema + ` 127 } } }` 128 129 deleteTraceObserverMutation = ` 130 mutation($traceObserverConfigs: [EdgeDeleteTraceObserverInput!]!, $accountId: Int!) { 131 edgeDeleteTraceObservers(traceObserverConfigs: $traceObserverConfigs, accountId: $accountId) { 132 responses { 133 traceObserver { ` + 134 traceObserverSchemaFields + ` 135 } ` + 136 traceObserverErrorSchema + ` 137 } } }` 138 ) 139 140 type createTraceObserverResponse struct { 141 EdgeCreateTraceObserver struct { 142 Responses []EdgeCreateTraceObserverResponse 143 } 144 } 145 146 type deleteTraceObserversResponse struct { 147 EdgeDeleteTraceObservers struct { 148 Responses []EdgeDeleteTraceObserverResponse 149 } 150 }