func (cm *CheckManager) selectBroker() (*api.Broker, error) {
	var brokerList *[]api.Broker
	var err error
	enterpriseType := "enterprise"

	if len(cm.brokerSelectTag) > 0 {
		filter := api.SearchFilterType{
			"f__tags_has": cm.brokerSelectTag,
		}
		brokerList, err = cm.apih.SearchBrokers(nil, &filter)
		if err != nil {
			return nil, err
		}
	} else {
		brokerList, err = cm.apih.FetchBrokers()
		if err != nil {
			return nil, err
		}
	}

	if len(*brokerList) == 0 {
		return nil, fmt.Errorf("zero brokers found")
	}

	validBrokers := make(map[string]api.Broker)
	haveEnterprise := false

	for _, broker := range *brokerList {
		broker := broker
		if cm.isValidBroker(&broker) {
			validBrokers[broker.CID] = broker
			if broker.Type == enterpriseType {
				haveEnterprise = true
			}
		}
	}

	if haveEnterprise { // eliminate non-enterprise brokers from valid brokers
		for k, v := range validBrokers {
			if v.Type != enterpriseType {
				delete(validBrokers, k)
			}
		}
	}

	if len(validBrokers) == 0 {
		return nil, fmt.Errorf("found %d broker(s), zero are valid", len(*brokerList))
	}

	validBrokerKeys := reflect.ValueOf(validBrokers).MapKeys()
	selectedBroker := validBrokers[validBrokerKeys[rand.Intn(len(validBrokerKeys))].String()]

	if cm.Debug {
		cm.Log.Printf("[DEBUG] Selected broker '%s'\n", selectedBroker.Name)
	}

	return &selectedBroker, nil

}
func (cm *CheckManager) selectBroker() (*api.Broker, error) {
	var brokerList *[]api.Broker
	var err error
	enterpriseType := "enterprise"

	if len(cm.brokerSelectTag) > 0 {
		filter := api.SearchFilterType{
			"f__tags_has": cm.brokerSelectTag,
		}
		brokerList, err = cm.apih.SearchBrokers(nil, &filter)
		if err != nil {
			return nil, err
		}
	} else {
		brokerList, err = cm.apih.FetchBrokers()
		if err != nil {
			return nil, err
		}
	}

	if len(*brokerList) == 0 {
		return nil, fmt.Errorf("zero brokers found")
	}

	validBrokers := make(map[string]api.Broker)
	haveEnterprise := false

	for _, broker := range *brokerList {
		broker := broker
		if cm.isValidBroker(&broker) {
			validBrokers[broker.CID] = broker
			if broker.Type == enterpriseType {
				haveEnterprise = true
			}
		}
	}

	if haveEnterprise { 
		for k, v := range validBrokers {
			if v.Type != enterpriseType {
				delete(validBrokers, k)
			}
		}
	}

	if len(validBrokers) == 0 {
		return nil, fmt.Errorf("found %d broker(s), zero are valid", len(*brokerList))
	}

	validBrokerKeys := reflect.ValueOf(validBrokers).MapKeys()
	selectedBroker := validBrokers[validBrokerKeys[rand.Intn(len(validBrokerKeys))].String()]

	if cm.Debug {
		cm.Log.Printf("[DEBUG] Selected broker '%s'\n", selectedBroker.Name)
	}

	return &selectedBroker, nil

}
func ( cm * CheckManager ) selectBroker ( ) ( * api . Broker , error ) { var brokerList * [ ] api . Broker var err error enterpriseType := " " if len ( cm . brokerSelectTag ) > 0 { filter := api . SearchFilterType { " " : cm . brokerSelectTag , } brokerList , err = cm . apih . SearchBrokers ( nil , & filter ) if err != nil { return nil , err } } else { brokerList , err = cm . apih . FetchBrokers ( ) if err != nil { return nil , err } } if len ( * brokerList ) == 0 { return nil , fmt . Errorf ( " " ) } validBrokers := make ( map [ string ] api . Broker ) haveEnterprise := false for _ , broker := range * brokerList { broker := broker if cm . isValidBroker ( & broker ) { validBrokers [ broker . CID ] = broker if broker . Type == enterpriseType { haveEnterprise = true } } } if haveEnterprise { // eliminate non-enterprise brokers from valid brokers for k , v := range validBrokers { if v . Type != enterpriseType { delete ( validBrokers , k ) } } } if len ( validBrokers ) == 0 { return nil , fmt . Errorf ( " " , len ( * brokerList ) ) } validBrokerKeys := reflect . ValueOf ( validBrokers ) . MapKeys ( ) selectedBroker := validBrokers [ validBrokerKeys [ rand . Intn ( len ( validBrokerKeys ) ) ] . String ( ) ] if cm . Debug { cm . Log . Printf ( " \n " , selectedBroker . Name ) } return & selectedBroker , nil }
// Select a broker for use when creating a check, if a specific broker
// was not specified.
Select a broker for use when creating a check if a specific broker was not specified .