code: func (h *Handler) clusterSearchSessionEvents(w http.ResponseWriter, r *http.Request, p httprouter.Params, ctx *SessionContext, site reversetunnel.RemoteSite) (interface{}, error) {
  	query := r.URL.Query()
  
  	clt, err := ctx.GetUserClient(site)
  	if err != nil {
  		log.Error(err)
  		return nil, trace.Wrap(err)
  	}
  
  	// default values
  	to := time.Now().In(time.UTC)
  	from := to.AddDate(0, -1, 0) // one month ago
  
  	// parse 'to' and 'from' params:
  	fromStr := query.Get("from")
  	if fromStr != "" {
  		from, err = time.Parse(time.RFC3339, fromStr)
  		if err != nil {
  			return nil, trace.BadParameter("from")
  		}
  	}
  	toStr := query.Get("to")
  	if toStr != "" {
  		to, err = time.Parse(time.RFC3339, toStr)
  		if err != nil {
  			return nil, trace.BadParameter("to")
  		}
  	}
  
  	el, err := clt.SearchSessionEvents(from, to, defaults.EventsIterationLimit)
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  	return eventsListGetResponse{Events: el}, nil
  }
docs: // clusterSearchSessionEvents allows to search for session events on a cluster
  //
  // GET /v1/webapi/sites/:site/events
  //
  // Query parameters:
  //   "from"  : date range from, encoded as RFC3339
  //   "to"    : date range to, encoded as RFC3339
  //   ...     : the rest of the query string is passed to the search back-end as-is,
  //             the default backend performs exact search: ?key=value means "event
  //             with a field 'key' with value 'value'
  //