From d2fbcf6560d4c4acda6298721830015ab1a0f03e Mon Sep 17 00:00:00 2001 From: Kaley Date: Wed, 28 Sep 2016 12:48:45 -0400 Subject: [PATCH] fix headers and update deps --- README.md | 2 ++ glide.lock | 46 +++++++++++++++++++++++++++++++------- glide.yaml | 7 ++++++ rackhd/proxy/controller.go | 25 +++++++++++++++++---- rackhd/proxy/helper.go | 6 +++-- 5 files changed, 72 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 65cf958..21f28e2 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ The [Service Registry] is a utility that will listen on the network for services ## RackHD Proxy The [RackHD Proxy] is a utility that acts as a proxy to the RackHD API. + + [Service Registry]: https://github.com/RackHD/neighborhood-manager/tree/master/registry [RackHD Proxy]: https://github.com/RackHD/neighborhood-manager/tree/master/rackhd diff --git a/glide.lock b/glide.lock index b5f53a3..43221fc 100644 --- a/glide.lock +++ b/glide.lock @@ -1,10 +1,10 @@ -hash: 1430ace24aa0f5928da1786bae12d7db3fff57f1b4878448245da0fbda724509 -updated: 2016-08-22T17:27:50.804668522Z +hash: 2b890c093c96eb470377b1f5353c8a2e406a845d341f69279d97e24858290a08 +updated: 2016-09-28T09:23:37.518411878-04:00 imports: - name: github.com/fsnotify/fsnotify version: f12c6236fe7b5cf6bcf30e5935d08cb079d78334 - name: github.com/hashicorp/consul - version: 36dc9201f2e006d4b5db1f0446b17357811297bf + version: a189091a3530051285c12c726ca28ea55e015336 subpackages: - api - name: github.com/hashicorp/go-cleanhttp @@ -14,10 +14,10 @@ imports: subpackages: - hcl/ast - hcl/parser - - hcl/token - - json/parser - hcl/scanner - hcl/strconv + - hcl/token + - json/parser - json/scanner - json/token - name: github.com/hashicorp/serf @@ -56,16 +56,16 @@ imports: - name: golang.org/x/crypto version: 7e016f1856e33d687a3a722085e249982e673aff subpackages: - - ssh - curve25519 - ed25519 - ed25519/internal/edwards25519 + - ssh - name: golang.org/x/net version: 7394c112eae4dba7e96bfcfe738e6373d61772b4 subpackages: - - ipv4 - bpf - internal/iana + - ipv4 - name: golang.org/x/sys version: a646d33e2ee3172a661fc09bca23bb4889a41bc8 subpackages: @@ -77,4 +77,34 @@ imports: - unicode/norm - name: gopkg.in/yaml.v2 version: e4d366fc3c7938e2958e662b4258c7a89e1f0e3e -testImports: [] +testImports: +- name: github.com/onsi/ginkgo + version: 462326b1628e124b23f42e87a8f2750e3c4e2d24 + subpackages: + - config + - internal/codelocation + - internal/containernode + - internal/failer + - internal/leafnodes + - internal/remote + - internal/spec + - internal/specrunner + - internal/suite + - internal/testingtproxy + - internal/writer + - reporters + - reporters/stenographer + - types +- name: github.com/onsi/gomega + version: a78ae492d53aad5a7a232d0d0462c14c400e3ee7 + subpackages: + - format + - internal/assertion + - internal/asyncassertion + - internal/testingtsupport + - matchers + - matchers/support/goraph/bipartitegraph + - matchers/support/goraph/edge + - matchers/support/goraph/node + - matchers/support/goraph/util + - types diff --git a/glide.yaml b/glide.yaml index 0a9d060..8c0e4d5 100644 --- a/glide.yaml +++ b/glide.yaml @@ -1,7 +1,14 @@ package: github.com/RackHD/neighborhood-manager import: - package: github.com/hashicorp/consul + version: ~0.7.0 subpackages: - api +- package: github.com/hashicorp/go-cleanhttp - package: github.com/king-jam/gossdp - package: github.com/spf13/viper +testImport: +- package: github.com/onsi/ginkgo + version: ~1.2.0 +- package: github.com/onsi/gomega + version: ~1.0.0 diff --git a/rackhd/proxy/controller.go b/rackhd/proxy/controller.go index 8a5cb76..3e5954d 100755 --- a/rackhd/proxy/controller.go +++ b/rackhd/proxy/controller.go @@ -68,6 +68,11 @@ func (p *Server) HandleNodes(w http.ResponseWriter, r *http.Request) { w.Write([]byte(fmt.Sprintf("%s", err))) return } + if (r.Method != "GET") && (len(addrMap) > 1) { + w.WriteHeader(400) + w.Write([]byte(fmt.Sprintln("Unsupported api call to multiple hosts. Use query string method."))) + return + } ar := p.GetResp(r, addrMap) p.RespCheck(r, w, ar) } @@ -83,20 +88,20 @@ func (p *Server) GetResp(r *http.Request, addrs map[string]struct{}) Responses { defer p.wg.Done() req, err := NewRequest(r, entry) if err != nil { - cr <- NewResposeFromError(err) + cr <- NewResponseFromError(err) return } client := cleanhttp.DefaultClient() respGet, err := client.Do(req) fmt.Println("request sent") if err != nil { - cr <- NewResposeFromError(err) + cr <- NewResponseFromError(err) return } defer respGet.Body.Close() responseCopy, err := NewResponse(respGet) if err != nil { - cr <- NewResposeFromError(err) + cr <- NewResponseFromError(err) return } cr <- responseCopy @@ -159,7 +164,8 @@ func (p *Server) GetQueryAddresses(querySlice []string) map[string]struct{} { // helper function to write to the ResponseWriter. func (p *Server) RespCheck(r *http.Request, w http.ResponseWriter, ar Responses) { w.Write([]byte("[")) - var cutSize int + var cutSize, status int + status = 500 for i, r := range ar { if r.Body == nil { continue @@ -175,6 +181,17 @@ func (p *Server) RespCheck(r *http.Request, w http.ResponseWriter, ar Responses) if i != len(ar)-1 { w.Write([]byte(",")) } + if r.StatusCode < status { + status = r.StatusCode + } + } + if len(ar) <= 1 { + for k, v := range ar[0].Header { + for _, value := range v { + w.Header().Set(k, value) + } + } } w.Write([]byte("]")) + w.WriteHeader(status) } diff --git a/rackhd/proxy/helper.go b/rackhd/proxy/helper.go index 215072a..da18868 100755 --- a/rackhd/proxy/helper.go +++ b/rackhd/proxy/helper.go @@ -8,6 +8,7 @@ import ( // Response is the internal proxy response object type Response struct { + Header http.Header StatusCode int Body []byte RequestURL string @@ -22,6 +23,7 @@ func NewResponse(resp *http.Response) (*Response, error) { return nil, err } proxyResponse := &Response{ + Header: resp.Header, StatusCode: resp.StatusCode, Body: body, RequestURL: resp.Request.URL.String(), @@ -30,8 +32,8 @@ func NewResponse(resp *http.Response) (*Response, error) { return proxyResponse, err } -// NewResposeFromError sets errors -func NewResposeFromError(err error) *Response { +// NewResponseFromError sets errors +func NewResponseFromError(err error) *Response { proxyRespnse := &Response{ StatusCode: 500, Error: err,