code: func (s *HTTPServer) preparedQueryExplain(id string, resp http.ResponseWriter, req *http.Request) (interface{}, error) {
  	args := structs.PreparedQueryExecuteRequest{
  		QueryIDOrName: id,
  		Agent: structs.QuerySource{
  			Node:       s.agent.config.NodeName,
  			Datacenter: s.agent.config.Datacenter,
  			Segment:    s.agent.config.SegmentName,
  		},
  	}
  	s.parseSource(req, &args.Source)
  	if done := s.parse(resp, req, &args.Datacenter, &args.QueryOptions); done {
  		return nil, nil
  	}
  	if err := parseLimit(req, &args.Limit); err != nil {
  		return nil, fmt.Errorf("Bad limit: %s", err)
  	}
  
  	var reply structs.PreparedQueryExplainResponse
  	defer setMeta(resp, &reply.QueryMeta)
  RETRY_ONCE:
  	if err := s.agent.RPC("PreparedQuery.Explain", &args, &reply); err != nil {
  		// We have to check the string since the RPC sheds
  		// the specific error type.
  		if err.Error() == consul.ErrQueryNotFound.Error() {
  			resp.WriteHeader(http.StatusNotFound)
  			fmt.Fprint(resp, err.Error())
  			return nil, nil
  		}
  		return nil, err
  	}
  	if args.QueryOptions.AllowStale && args.MaxStaleDuration > 0 && args.MaxStaleDuration < reply.LastContact {
  		args.AllowStale = false
  		args.MaxStaleDuration = 0
  		goto RETRY_ONCE
  	}
  	reply.ConsistencyLevel = args.QueryOptions.ConsistencyLevel()
  	return reply, nil
  }
docs: // preparedQueryExplain shows which query a name resolves to, the fully
  // interpolated template (if it's a template), as well as additional info
  // about the execution of a query.