code: func (h *Helper) FetchHotRegion(rw string) (map[uint64]RegionMetric, error) {
  	etcd, ok := h.Store.(tikv.EtcdBackend)
  	if !ok {
  		return nil, errors.WithStack(errors.New("not implemented"))
  	}
  	pdHosts := etcd.EtcdAddrs()
  	if len(pdHosts) == 0 {
  		return nil, errors.New("pd unavailable")
  	}
  	req, err := http.NewRequest("GET", protocol+pdHosts[0]+rw, nil)
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  	timeout, cancelFunc := context.WithTimeout(context.Background(), 50*time.Millisecond)
  	resp, err := http.DefaultClient.Do(req.WithContext(timeout))
  	cancelFunc()
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  	defer func() {
  		err = resp.Body.Close()
  		if err != nil {
  			logutil.Logger(context.Background()).Error("close body failed", zap.Error(err))
  		}
  	}()
  	var regionResp StoreHotRegionInfos
  	err = json.NewDecoder(resp.Body).Decode(&regionResp)
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  	metric := make(map[uint64]RegionMetric)
  	for _, hotRegions := range regionResp.AsLeader {
  		for _, region := range hotRegions.RegionsStat {
  			metric[region.RegionID] = RegionMetric{FlowBytes: region.FlowBytes, MaxHotDegree: region.HotDegree}
  		}
  	}
  	return metric, nil
  }
docs: // FetchHotRegion fetches the hot region information from PD's http api.