func (c *ProxyController) AddLocationConnLimit(w http.ResponseWriter, r *http.Request, params map[string]string) (interface{}, error) { hostname := params["hostname"] locationId := params["location"] id, err := api.GetStringField(r, "id") if err != nil { return nil, err } connections, err := api.GetIntField(r, "connections") if err != nil { return nil, err } variable, err := api.GetStringField(r, "variable") if err != nil { return nil, err } connLimit, err := backend.NewConnLimit(connections, variable) if err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } if err := c.backend.AddLocationConnLimit(hostname, locationId, id, connLimit); err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } return api.Response{"message": "Rate added"}, nil }
func (c *ProxyController) AddEndpoint(w http.ResponseWriter, r *http.Request, params map[string]string) (interface{}, error) { url, err := api.GetStringField(r, "url") if err != nil { return nil, err } id, err := api.GetStringField(r, "id") if err != nil { return nil, err } upstreamId := params["upstream"] log.Infof("Add Endpoint %s to %s", url, upstreamId) if err := c.backend.AddEndpoint(upstreamId, id, url); err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } return api.Response{"message": "Endpoint added"}, nil }
func (c *ProxyController) AddUpstream(w http.ResponseWriter, r *http.Request, params map[string]string) (interface{}, error) { id, err := api.GetStringField(r, "id") if err != nil { return nil, err } log.Infof("Add Upstream: %s", id) if err := c.backend.AddUpstream(id); err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } return api.Response{"message": "Upstream added"}, nil }
func (c *ProxyController) AddHost(w http.ResponseWriter, r *http.Request, params map[string]string) (interface{}, error) { name, err := api.GetStringField(r, "name") if err != nil { return nil, err } log.Infof("Add host: %s", name) if err := c.backend.AddHost(name); err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } return api.Response{"message": "Host added"}, nil }
func (c *ProxyController) AddLocation(w http.ResponseWriter, r *http.Request, params map[string]string) (interface{}, error) { hostname := params["hostname"] id, err := api.GetStringField(r, "id") if err != nil { return nil, err } path, err := api.GetStringField(r, "path") if err != nil { return nil, err } upstream, err := api.GetStringField(r, "upstream") if err != nil { return nil, err } log.Infof("Add Location: %s %s", hostname, path) if err := c.backend.AddLocation(id, hostname, path, upstream); err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } return api.Response{"message": "Location added"}, nil }
func (c *ProxyController) UpdateLocation(w http.ResponseWriter, r *http.Request, params map[string]string) (interface{}, error) { hostname := params["hostname"] locationId := params["id"] upstream, err := api.GetStringField(r, "upstream") if err != nil { return nil, err } log.Infof("Update Location: %s %s set upstream", hostname, locationId, upstream) if err := c.backend.UpdateLocationUpstream(hostname, locationId, upstream); err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } return api.Response{"message": "Location upstream updated"}, nil }
func (c *ProxyController) DrainUpstreamConnections(w http.ResponseWriter, r *http.Request, params map[string]string) (interface{}, error) { upstream, err := c.backend.GetUpstream(params["id"]) if err != nil { return nil, err } if upstream == nil { return nil, api.NotFoundError{Description: "Upstream not found"} } timeoutS, err := api.GetStringField(r, "timeout") if err != nil { return nil, err } timeout, err := strconv.Atoi(timeoutS) if err != nil { return nil, err } endpoints := make([]*url.URL, len(upstream.Endpoints)) for i, e := range upstream.Endpoints { u, err := netutils.ParseUrl(e.Url) if err != nil { return nil, err } endpoints[i] = u } connections, err := c.connWatcher.DrainConnections(time.Duration(timeout)*time.Second, endpoints...) if err != nil { return nil, err } return api.Response{ "Connections": connections, }, err }
func (c *ProxyController) UpdateLocationRateLimit(w http.ResponseWriter, r *http.Request, params map[string]string) (interface{}, error) { hostname := params["hostname"] locationId := params["location"] id := params["id"] requests, err := api.GetIntField(r, "requests") if err != nil { return nil, err } seconds, err := api.GetIntField(r, "seconds") if err != nil { return nil, err } burst, err := api.GetIntField(r, "burst") if err != nil { return nil, err } variable, err := api.GetStringField(r, "variable") if err != nil { return nil, err } rateLimit, err := backend.NewRateLimit(requests, variable, burst, seconds) if err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } if err := c.backend.UpdateLocationRateLimit(hostname, locationId, id, rateLimit); err != nil { return nil, api.GenericAPIError{Reason: fmt.Sprintf("%s", err)} } return api.Response{"message": "Rate added"}, nil }