github.com/newrelic/newrelic-client-go@v1.1.0/pkg/apm/application_instances.go (about) 1 package apm 2 3 import ( 4 "context" 5 "fmt" 6 ) 7 8 // ApplicationInstanceLinks represents all the links for a New Relic application instance. 9 type ApplicationInstanceLinks struct { 10 Application int `json:"application,omitempty"` 11 ApplicationHost int `json:"application_host,omitempty"` 12 } 13 14 // ApplicationInstance represents information about a New Relic application instance. 15 type ApplicationInstance struct { 16 ID int `json:"id,omitempty"` 17 ApplicationName string `json:"application_name,omitempty"` 18 Host string `json:"host,omitempty"` 19 Port int `json:"port,omitempty"` 20 Language string `json:"language,omitempty"` 21 HealthStatus string `json:"health_status,omitempty"` 22 Summary ApplicationSummary `json:"application_summary,omitempty"` 23 EndUserSummary ApplicationEndUserSummary `json:"end_user_summary,omitempty"` 24 Links ApplicationInstanceLinks `json:"links,omitempty"` 25 } 26 27 // ListApplicationInstancesParams represents a set of filters to be 28 // used when querying New Relic application instances. 29 type ListApplicationInstancesParams struct { 30 Hostname string `url:"filter[hostname],omitempty"` 31 IDs []int `url:"filter[ids],omitempty,comma"` 32 } 33 34 // ListApplicationInstances is used to retrieve New Relic application instances. 35 func (a *APM) ListApplicationInstances(applicationID int, params *ListApplicationInstancesParams) ([]*ApplicationInstance, error) { 36 return a.ListApplicationInstancesWithContext(context.Background(), applicationID, params) 37 } 38 39 // ListApplicationInstancesWithContext is used to retrieve New Relic application instances. 40 func (a *APM) ListApplicationInstancesWithContext(ctx context.Context, applicationID int, params *ListApplicationInstancesParams) ([]*ApplicationInstance, error) { 41 instances := []*ApplicationInstance{} 42 url := fmt.Sprintf("/applications/%d/instances.json", applicationID) 43 nextURL := a.config.Region().RestURL(url) 44 45 for nextURL != "" { 46 response := applicationInstancesResponse{} 47 resp, err := a.client.GetWithContext(ctx, nextURL, ¶ms, &response) 48 49 if err != nil { 50 return nil, err 51 } 52 53 instances = append(instances, response.ApplicationInstances...) 54 55 paging := a.pager.Parse(resp) 56 nextURL = paging.Next 57 } 58 59 return instances, nil 60 } 61 62 // GetApplicationInstance is used to retrieve a specific New Relic application instance. 63 func (a *APM) GetApplicationInstance(applicationID int, instanceID int) (*ApplicationInstance, error) { 64 return a.GetApplicationInstanceWithContext(context.Background(), applicationID, instanceID) 65 } 66 67 // GetApplicationInstanceWithContext is used to retrieve a specific New Relic application instance. 68 func (a *APM) GetApplicationInstanceWithContext(ctx context.Context, applicationID int, instanceID int) (*ApplicationInstance, error) { 69 response := applicationInstanceResponse{} 70 url := fmt.Sprintf("/applications/%d/instances/%d.json", applicationID, instanceID) 71 72 _, err := a.client.GetWithContext(ctx, a.config.Region().RestURL(url), nil, &response) 73 74 if err != nil { 75 return nil, err 76 } 77 78 return response.ApplicationInstance, nil 79 } 80 81 type applicationInstancesResponse struct { 82 ApplicationInstances []*ApplicationInstance `json:"application_instances,omitempty"` 83 } 84 85 type applicationInstanceResponse struct { 86 ApplicationInstance *ApplicationInstance `json:"application_instance,omitempty"` 87 }