func (sc *ShockClient) Do_request_string(method string, resource string, query url.Values) (jsonstream []byte, err error) { //logger.Debug(1, fmt.Sprint("string_url: ", sc.Host)) myurl, err := url.ParseRequestURI(sc.Host) if err != nil { return } (*myurl).Path = resource (*myurl).RawQuery = query.Encode() shockurl := myurl.String() //logger.Debug(1, fmt.Sprint("shock request url: ", shockurl)) if sc.Debug { fmt.Fprintf(os.Stdout, "Get_request url: %s\n", shockurl) } if len(shockurl) < 5 { return jsonstream, errors.New("could not parse shockurl: " + shockurl) } var user *httpclient.Auth if sc.Token != "" { user = httpclient.GetUserByTokenAuth(sc.Token) } var res *http.Response res, err = httpclient.Do(method, shockurl, httpclient.Header{}, nil, user) //res, err = httpclient.Get(shockurl, httpclient.Header{}, nil, user) if err != nil { return } defer res.Body.Close() jsonstream, err = ioutil.ReadAll(res.Body) if sc.Debug { fmt.Fprintf(os.Stdout, "json response:\n %s\n", string(jsonstream)) } //logger.Debug(1, string(jsonstream)) if err != nil { return } return jsonstream, nil }
func ShockGet(host string, nodeid string, token string) (node *ShockNode, err error) { if host == "" || nodeid == "" { return nil, errors.New("empty shock host or node id") } //logger.Debug(1, fmt.Sprintf("ShockGet: %s %s %s", host, nodeid, token)) var res *http.Response shockurl := fmt.Sprintf("%s/node/%s", host, nodeid) var user *httpclient.Auth if token != "" { user = httpclient.GetUserByTokenAuth(token) } c := make(chan int, 1) go func() { res, err = httpclient.Get(shockurl, httpclient.Header{}, nil, user) c <- 1 //we are ending }() select { case <-c: //go ahead case <-time.After(SHOCK_TIMEOUT): return nil, errors.New("timeout when getting node from shock, url=" + shockurl) } if err != nil { return } defer res.Body.Close() jsonstream, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } response := new(ShockResponse) if err := json.Unmarshal(jsonstream, response); err != nil { return nil, err } if len(response.Errs) > 0 { return nil, errors.New(strings.Join(response.Errs, ",")) } node = &response.Data if node == nil { err = errors.New("empty node got from Shock") } return }
func FetchShockStream(url string, token string) (r io.ReadCloser, err error) { var user *httpclient.Auth if token != "" { user = httpclient.GetUserByTokenAuth(token) } //download file from Shock res, err := httpclient.Get(url, httpclient.Header{}, nil, user) if err != nil { //return nil, err return nil, errors.New("httpclient.Get returned: " + err.Error()) } if res.StatusCode != 200 { //err in fetching data resbody, _ := ioutil.ReadAll(res.Body) return nil, errors.New(fmt.Sprintf("op=fetchFile, url=%s, res=%s", url, resbody)) } return res.Body, err }
// deprecated, this is with explicit timeout func (sc *ShockClient) Do_request_DEPRECATED(method string, resource string, query url.Values, response interface{}) (err error) { //logger.Debug(1, fmt.Sprint("string_url: ", sc.Host)) myurl, err := url.ParseRequestURI(sc.Host) if err != nil { return err } (*myurl).Path = resource (*myurl).RawQuery = query.Encode() shockurl := myurl.String() //logger.Debug(1, fmt.Sprint("shock request url: ", shockurl)) if sc.Debug { fmt.Fprintf(os.Stdout, "Get_request url: %s\n", shockurl) } if len(shockurl) < 5 { return errors.New("could not parse shockurl: " + shockurl) } var user *httpclient.Auth if sc.Token != "" { user = httpclient.GetUserByTokenAuth(sc.Token) } var res *http.Response c := make(chan int, 1) go func() { res, err = httpclient.Do(method, shockurl, httpclient.Header{}, nil, user) //res, err = httpclient.Get(shockurl, httpclient.Header{}, nil, user) c <- 1 //we are ending }() select { case <-c: //go ahead case <-time.After(SHOCK_TIMEOUT): return errors.New("timeout when getting node from shock, url=" + shockurl) } if err != nil { return } defer res.Body.Close() jsonstream, err := ioutil.ReadAll(res.Body) if sc.Debug { fmt.Fprintf(os.Stdout, "json response:\n %s\n", string(jsonstream)) } //logger.Debug(1, string(jsonstream)) if err != nil { return err } //response := new(result) if err := json.Unmarshal(jsonstream, response); err != nil { return err } //if len(response.Errs) > 0 { // return errors.New(strings.Join(response.Errs, ",")) //} //node = &response.Data //if node == nil { // err = errors.New("empty node got from Shock") //} return }