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  }