code.cloudfoundry.org/cli@v7.1.0+incompatible/actor/v2action/application_summary.go (about)

     1  package v2action
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
     6  )
     7  
     8  type ApplicationSummary struct {
     9  	Application
    10  	Stack            Stack
    11  	IsolationSegment string
    12  	RunningInstances []ApplicationInstanceWithStats
    13  	Routes           []Route
    14  }
    15  
    16  func (app ApplicationSummary) StartingOrRunningInstanceCount() int {
    17  	count := 0
    18  	for _, instance := range app.RunningInstances {
    19  		if instance.State == ApplicationInstanceState(constant.ApplicationInstanceStarting) ||
    20  			instance.State == ApplicationInstanceState(constant.ApplicationInstanceRunning) {
    21  			count++
    22  		}
    23  	}
    24  	return count
    25  }
    26  
    27  func (actor Actor) GetApplicationSummaryByNameAndSpace(name string, spaceGUID string) (ApplicationSummary, Warnings, error) {
    28  	var allWarnings Warnings
    29  
    30  	app, warnings, err := actor.GetApplicationByNameAndSpace(name, spaceGUID)
    31  	allWarnings = append(allWarnings, warnings...)
    32  	if err != nil {
    33  		return ApplicationSummary{}, allWarnings, err
    34  	}
    35  
    36  	applicationSummary := ApplicationSummary{Application: app}
    37  
    38  	// cloud controller calls the instance reporter only when the desired
    39  	// application state is STARTED
    40  	if app.State == constant.ApplicationStarted {
    41  		var instances []ApplicationInstanceWithStats
    42  		instances, warnings, err = actor.GetApplicationInstancesWithStatsByApplication(app.GUID)
    43  		allWarnings = append(allWarnings, warnings...)
    44  
    45  		switch err.(type) {
    46  		case nil:
    47  			applicationSummary.RunningInstances = instances
    48  
    49  			if len(instances) > 0 {
    50  				applicationSummary.IsolationSegment = instances[0].IsolationSegment
    51  			}
    52  		case actionerror.ApplicationInstancesNotFoundError:
    53  			// don't set instances in summary
    54  		default:
    55  			return ApplicationSummary{}, allWarnings, err
    56  		}
    57  	}
    58  
    59  	routes, warnings, err := actor.GetApplicationRoutes(app.GUID)
    60  	allWarnings = append(allWarnings, warnings...)
    61  	if err != nil {
    62  		return ApplicationSummary{}, allWarnings, err
    63  	}
    64  	applicationSummary.Routes = routes
    65  
    66  	stack, warnings, err := actor.GetStack(app.StackGUID)
    67  	allWarnings = append(allWarnings, warnings...)
    68  	if err != nil {
    69  		return ApplicationSummary{}, allWarnings, err
    70  	}
    71  	applicationSummary.Stack = stack
    72  
    73  	return applicationSummary, allWarnings, nil
    74  }