func fetchStateAndBuildZones(logger lager.Logger, workPool *workpool.WorkPool, clients map[string]rep.Client, metricEmitter auctiontypes.AuctionMetricEmitterDelegate) map[string]Zone { wg := &sync.WaitGroup{} zones := map[string]Zone{} lock := &sync.Mutex{} wg.Add(len(clients)) for guid, client := range clients { guid, client := guid, client workPool.Submit(func() { defer wg.Done() state, err := client.State() if err != nil { metricEmitter.FailedCellStateRequest() logger.Error("failed-to-get-state", err, lager.Data{"cell-guid": guid}) return } if state.Evacuating { return } cell := NewCell(logger, guid, client, state) lock.Lock() zones[state.Zone] = append(zones[state.Zone], cell) lock.Unlock() }) } wg.Wait() return zones }
import ( "time" "github.com/cloudfoundry-incubator/auction/auctiontypes" "github.com/cloudfoundry-incubator/auctioneer/auctionmetricemitterdelegate" "github.com/cloudfoundry-incubator/bbs/models" "github.com/cloudfoundry-incubator/rep" "github.com/cloudfoundry/dropsonde/metric_sender/fake" "github.com/cloudfoundry/dropsonde/metrics" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Auction Metric Emitter Delegate", func() { var delegate auctiontypes.AuctionMetricEmitterDelegate var metricSender *fake.FakeMetricSender BeforeEach(func() { metricSender = fake.NewFakeMetricSender() metrics.Initialize(metricSender, nil) delegate = auctionmetricemitterdelegate.New() }) Describe("AuctionCompleted", func() { It("should adjust the metric counters", func() { resource := rep.NewResource(10, 10, "linux") delegate.AuctionCompleted(auctiontypes.AuctionResults{ SuccessfulLRPs: []auctiontypes.LRPAuction{ {