github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/actor/v7action/application_summary.go (about)

     1  package v7action
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     6  )
     7  
     8  type ApplicationSummary struct {
     9  	Application
    10  	ProcessSummaries ProcessSummaries
    11  	Routes           []Route
    12  }
    13  
    14  // v7action.DetailedApplicationSummary represents an application with its processes and droplet.
    15  type DetailedApplicationSummary struct {
    16  	ApplicationSummary
    17  	CurrentDroplet Droplet
    18  }
    19  
    20  func (a ApplicationSummary) GetIsolationSegmentName() (string, bool) {
    21  	if a.hasIsolationSegment() {
    22  		return a.ProcessSummaries[0].InstanceDetails[0].IsolationSegment, true
    23  	}
    24  	return "", false
    25  }
    26  
    27  func (a ApplicationSummary) hasIsolationSegment() bool {
    28  	return len(a.ProcessSummaries) > 0 &&
    29  		len(a.ProcessSummaries[0].InstanceDetails) > 0 &&
    30  		len(a.ProcessSummaries[0].InstanceDetails[0].IsolationSegment) > 0
    31  }
    32  
    33  func (actor Actor) GetAppSummariesForSpace(spaceGUID string, labelSelector string) ([]ApplicationSummary, Warnings, error) {
    34  	var allWarnings Warnings
    35  	var allSummaries []ApplicationSummary
    36  
    37  	keys := []ccv3.Query{
    38  		ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}},
    39  		ccv3.Query{Key: ccv3.OrderBy, Values: []string{ccv3.NameOrder}},
    40  	}
    41  	if len(labelSelector) > 0 {
    42  		keys = append(keys, ccv3.Query{Key: ccv3.LabelSelectorFilter, Values: []string{labelSelector}})
    43  	}
    44  	apps, warnings, err := actor.CloudControllerClient.GetApplications(keys...)
    45  	allWarnings = append(allWarnings, warnings...)
    46  	if err != nil {
    47  		return nil, allWarnings, err
    48  	}
    49  
    50  	for _, app := range apps {
    51  		summary, summaryWarnings, err := actor.createSummary(actor.convertCCToActorApplication(app), false)
    52  		allWarnings = append(allWarnings, summaryWarnings...)
    53  		if err != nil {
    54  			return nil, allWarnings, err
    55  		}
    56  		allSummaries = append(allSummaries, summary)
    57  
    58  	}
    59  
    60  	return allSummaries, allWarnings, nil
    61  }
    62  
    63  func (actor Actor) GetDetailedAppSummary(appName, spaceGUID string, withObfuscatedValues bool) (DetailedApplicationSummary, Warnings, error) {
    64  	var allWarnings Warnings
    65  
    66  	app, actorWarnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID)
    67  	allWarnings = append(allWarnings, actorWarnings...)
    68  	if err != nil {
    69  		return DetailedApplicationSummary{}, actorWarnings, err
    70  	}
    71  
    72  	summary, warnings, err := actor.createSummary(app, withObfuscatedValues)
    73  	allWarnings = append(allWarnings, warnings...)
    74  	if err != nil {
    75  		return DetailedApplicationSummary{}, allWarnings, err
    76  	}
    77  
    78  	detailedSummary, warnings, err := actor.addDroplet(summary)
    79  	allWarnings = append(allWarnings, warnings...)
    80  	if err != nil {
    81  		return DetailedApplicationSummary{}, allWarnings, err
    82  	}
    83  
    84  	return detailedSummary, allWarnings, err
    85  }
    86  
    87  func (actor Actor) createSummary(app Application, withObfuscatedValues bool) (ApplicationSummary, Warnings, error) {
    88  	var allWarnings Warnings
    89  
    90  	processSummaries, processWarnings, err := actor.getProcessSummariesForApp(app.GUID, withObfuscatedValues)
    91  	allWarnings = append(allWarnings, processWarnings...)
    92  	if err != nil {
    93  		return ApplicationSummary{}, allWarnings, err
    94  	}
    95  
    96  	var appRoutes []Route
    97  	routes, warnings, err := actor.GetApplicationRoutes(app.GUID)
    98  	allWarnings = append(allWarnings, warnings...)
    99  	if err != nil {
   100  		return ApplicationSummary{}, allWarnings, err
   101  	}
   102  	appRoutes = routes
   103  
   104  	return ApplicationSummary{
   105  		Application: Application{
   106  			Name:                app.Name,
   107  			GUID:                app.GUID,
   108  			State:               app.State,
   109  			LifecycleType:       app.LifecycleType,
   110  			LifecycleBuildpacks: app.LifecycleBuildpacks,
   111  		},
   112  		ProcessSummaries: processSummaries,
   113  		Routes:           appRoutes,
   114  	}, allWarnings, nil
   115  
   116  }
   117  
   118  func (actor Actor) addDroplet(summary ApplicationSummary) (DetailedApplicationSummary, Warnings, error) {
   119  	var allWarnings Warnings
   120  
   121  	droplet, warnings, err := actor.GetCurrentDropletByApplication(summary.GUID)
   122  	allWarnings = append(allWarnings, warnings...)
   123  	if err != nil {
   124  		if _, ok := err.(actionerror.DropletNotFoundError); !ok {
   125  			return DetailedApplicationSummary{}, allWarnings, err
   126  		}
   127  	}
   128  	return DetailedApplicationSummary{
   129  		ApplicationSummary: summary,
   130  		CurrentDroplet:     droplet,
   131  	}, allWarnings, nil
   132  }