func List(filter *Filter) ([]App, error) {
	apps := []App{}
	query := filter.Query()
	conn, err := db.Conn()
	if err != nil {
		return nil, err
	}
	err = conn.Apps().Find(query).All(&apps)
	conn.Close()
	if err != nil {
		return nil, err
	}
	if filter != nil && len(filter.Statuses) > 0 {
		appsProvisionerMap := make(map[string][]provision.App)
		var prov provision.Provisioner
		for i := range apps {
			a := &apps[i]
			prov, err = a.getProvisioner()
			if err != nil {
				return nil, err
			}
			appsProvisionerMap[prov.GetName()] = append(appsProvisionerMap[prov.GetName()], a)
		}
		var provisionApps []provision.App
		for provName, apps := range appsProvisionerMap {
			prov, err = provision.Get(provName)
			if err != nil {
				return nil, err
			}
			if filterProv, ok := prov.(provision.AppFilterProvisioner); ok {
				apps, err = filterProv.FilterAppsByUnitStatus(apps, filter.Statuses)
				if err != nil {
					return nil, err
				}
			}
			provisionApps = append(provisionApps, apps...)
		}
		for i := range provisionApps {
			apps[i] = *(provisionApps[i].(*App))
		}
		apps = apps[:len(provisionApps)]
	}
	err = loadCachedAddrsInApps(apps)
	if err != nil {
		return nil, err
	}
	return apps, nil
}
func List(filter *Filter) ([]App, error) {
	apps := []App{}
	query := filter.Query()
	conn, err := db.Conn()
	if err != nil {
		return nil, err
	}
	err = conn.Apps().Find(query).All(&apps)
	conn.Close()
	if err != nil {
		return nil, err
	}
	if filter != nil && len(filter.Statuses) > 0 {
		appsProvisionerMap := make(map[string][]provision.App)
		var prov provision.Provisioner
		for i := range apps {
			a := &apps[i]
			prov, err = a.getProvisioner()
			if err != nil {
				return nil, err
			}
			appsProvisionerMap[prov.GetName()] = append(appsProvisionerMap[prov.GetName()], a)
		}
		var provisionApps []provision.App
		for provName, apps := range appsProvisionerMap {
			prov, err = provision.Get(provName)
			if err != nil {
				return nil, err
			}
			if filterProv, ok := prov.(provision.AppFilterProvisioner); ok {
				apps, err = filterProv.FilterAppsByUnitStatus(apps, filter.Statuses)
				if err != nil {
					return nil, err
				}
			}
			provisionApps = append(provisionApps, apps...)
		}
		for i := range provisionApps {
			apps[i] = *(provisionApps[i].(*App))
		}
		apps = apps[:len(provisionApps)]
	}
	err = loadCachedAddrsInApps(apps)
	if err != nil {
		return nil, err
	}
	return apps, nil
}
func List ( filter * Filter ) ( [ ] App , error ) { apps := [ ] App { } query := filter . Query ( ) conn , err := db . Conn ( ) if err != nil { return nil , err } err = conn . Apps ( ) . Find ( query ) . All ( & apps ) conn . Close ( ) if err != nil { return nil , err } if filter != nil && len ( filter . Statuses ) > 0 { appsProvisionerMap := make ( map [ string ] [ ] provision . App ) var prov provision . Provisioner for i := range apps { a := & apps [ i ] prov , err = a . getProvisioner ( ) if err != nil { return nil , err } appsProvisionerMap [ prov . GetName ( ) ] = append ( appsProvisionerMap [ prov . GetName ( ) ] , a ) } var provisionApps [ ] provision . App for provName , apps := range appsProvisionerMap { prov , err = provision . Get ( provName ) if err != nil { return nil , err } if filterProv , ok := prov . ( provision . AppFilterProvisioner ) ; ok { apps , err = filterProv . FilterAppsByUnitStatus ( apps , filter . Statuses ) if err != nil { return nil , err } } provisionApps = append ( provisionApps , apps ... ) } for i := range provisionApps { apps [ i ] = * ( provisionApps [ i ] . ( * App ) ) } apps = apps [ : len ( provisionApps ) ] } err = loadCachedAddrsInApps ( apps ) if err != nil { return nil , err } return apps , nil }
// List returns the list of apps filtered through the filter parameter.
List returns the list of apps filtered through the filter parameter .