func Global()

in pkg/graphql/dashboard/global.go [216:270]


func Global(ctx *cli.Context, duration api.Duration) (*GlobalData, error) {
	// Load template to `globalTemplate`, so the subsequent three calls can ues it directly.
	_, err := LoadTemplate(ctx.String("template"))
	if err != nil {
		return nil, nil
	}

	errors := make(chan error)
	done := make(chan bool)

	// Use three goroutines to enable concurrent execution of three graphql queries.
	var wg sync.WaitGroup
	wg.Add(3)
	var m [][]*api.SelectedRecord
	go func() {
		m, err = Metrics(ctx, duration)
		if err != nil {
			errors <- err
		}
		wg.Done()
	}()
	var rl map[string]map[string]*displayable.MetricValue
	go func() {
		rl = responseLatency(ctx, duration)
		wg.Done()
	}()
	var hm api.HeatMap
	go func() {
		hm, err = heatMap(ctx, duration)
		if err != nil {
			errors <- err
		}
		wg.Done()
	}()

	go func() {
		wg.Wait()
		close(done)
	}()

	select {
	case <-done:
		break
	case err := <-errors:
		close(errors)
		return nil, err
	}

	var globalData GlobalData
	globalData.Metrics = m
	globalData.ResponseLatency = rl
	globalData.HeatMap = hm

	return &globalData, nil
}