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, &params, &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  }