// Create a queue, returning the Queue object. func (self *Service) CreateQueue(id *aws.Signer, name string, dvtimeout int) (mq *Queue, err os.Error) { var resp *http.Response parms := http.Values{} parms.Set("Action", "CreateQueue") parms.Set("QueueName", name) parms.Set("DefaultVisibilityTimeout", strconv.Itoa(dvtimeout)) req := aws.NewRequest(self.URL, "GET", nil, parms) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 15) if err == nil { resp, err = self.conn.Request(req) if err == nil { defer resp.Body.Close() if resp.StatusCode == http.StatusOK { xmlresp := createQueueResponse{} err = xml.Unmarshal(resp.Body, &xmlresp) if err == nil { var qrl *http.URL qrl, err = http.ParseURL(xmlresp.QueueURL) if err == nil { mq = NewQueue(qrl) } } } else { err = os.NewError("Unexpected response") } } } return }
func (self *Service) DescribeInstances(id *aws.Signer, filter http.Values, ic chan Instance) (err os.Error) { if filter == nil { filter = http.Values{} } filter.Set("Action", "DescribeInstances") req := aws.NewRequest(self.URL, "GET", nil, filter) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 15) if err != nil { return } resp, err := self.conn.Request(req) if err == nil { defer resp.Body.Close() xresp := describeInstancesResponse{} err := xml.Unmarshal(resp.Body, &xresp) if err == nil { log.Printf("XRESP == %+v", xresp) } else { log.Printf("XERR == %+v", err) } ob, _ := http.DumpResponse(resp, true) os.Stdout.Write(ob) } return }
func (self *Service) ListQueues(id *aws.Signer, prefix string) (mq []string, err os.Error) { var resp *http.Response parms := http.Values{} parms.Set("Action", "ListQueues") if prefix != "" { parms.Set("QueueNamePrefix", prefix) } req := aws.NewRequest(self.URL, "GET", nil, parms) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 15) resp, err = self.conn.Request(req) if err == nil { defer resp.Body.Close() xresp := listQueuesResponse{} if resp.StatusCode == http.StatusOK { err = xml.Unmarshal(resp.Body, &xresp) } else { err = os.NewError("Unexpected response code") } if err == nil { mq = xresp.QueueURL } } return }
func (self *Domain) GetAttribute(s *aws.Signer, item string, attrs AttributeList, consist bool) (a []Attribute, err os.Error) { var resp *http.Response vl := attrs.Values(ATTRIBUTE_LIST) vl.Set("Action", "GetAttributes") vl.Set("DomainName", self.Name) vl.Set("ItemName", item) if consist { vl.Set("ConsistentRead", "true") } req := aws.NewRequest(self.URL, "GET", nil, vl) err = s.SignRequestV2(req, aws.Canonicalize, DEFAULT_API_VERSION, 0) if err == nil { resp, err = self.conn.Request(req) } if err == nil { defer resp.Body.Close() err = aws.CodeToError(resp.StatusCode) } if err == nil { var response getattributesresponse ob, _ := http.DumpResponse(resp, true) os.Stdout.Write(ob) err = xml.Unmarshal(resp.Body, &response) if err == nil { a = response.Attributes } } return }
// Users note: amazon will only return an error if the request is bad, // thus an error will not be raised when deleting a non-existent LB. func (self *Service) DeleteLoadBalancer(id *aws.Signer, name string) (err os.Error) { parms := http.Values{} parms.Set("Action", "DeleteLoadBalancer") parms.Set("LoadBalancerName", name) req := aws.NewRequest(self.URL, "GET", nil, parms) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 0) if err != nil { return } resp, err := self.conn.Request(req) if err != nil { return } defer resp.Body.Close() if resp.StatusCode != 200 { err = aws.CodeToError(resp.StatusCode) } qr := LoadBalancerQueryResult{} err = xml.Unmarshal(resp.Body, &qr) if err == nil { if qr.ErrorCode != "" { err = os.NewError(qr.ErrorCode) } } return }
// Note: 0 is a valid timeout!! func (self *Queue) Peek(id *aws.Signer, vt int) (body []byte, msgid string, err os.Error) { var resp *http.Response parms := http.Values{} parms.Set("Action", "ReceiveMessage") if vt >= 0 { parms.Set("VisibilityTimeout", strconv.Itoa(vt)) } req := aws.NewRequest(self.URL, "GET", nil, parms) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 15) if err == nil { resp, err = self.conn.Request(req) if err == nil { defer resp.Body.Close() } if err == nil && resp.StatusCode != http.StatusOK { err = os.NewError("Unexpected response") } if err == nil { msg := message{} err = xml.Unmarshal(resp.Body, &msg) if err == nil { body, msgid = msg.Body, msg.ReceiptHandle } } } return }
// Note: 0 is a valid timeout!! func (self *Queue) Delete(id *aws.Signer, mid string) (err os.Error) { var resp *http.Response parms := http.Values{} parms.Set("Action", "DeleteMessage") parms.Set("ReceiptHandle", mid) req := aws.NewRequest(self.URL, "GET", nil, parms) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 15) if err == nil { resp, err = self.conn.Request(req) if err == nil { defer resp.Body.Close() } if resp.StatusCode != http.StatusOK { err = os.NewError("Unexpected response") } } return }
func (self *Queue) Push(id *aws.Signer, body []byte) (err os.Error) { var resp *http.Response parms := http.Values{} parms.Set("Action", "SendMessage") parms.Set("MessageBody", string(body)) req := aws.NewRequest(self.URL, "GET", nil, parms) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 15) if err == nil { resp, err = self.conn.Request(req) if err == nil { defer resp.Body.Close() if resp.StatusCode != http.StatusOK { err = os.NewError("Unexpected response") } } } return }
func (self *Domain) Select(id *aws.Signer, what, where string, consist bool, items chan<- Item) (err os.Error) { var resp *http.Response vl := http.Values{} vl.Set("Action", "Select") if where != "" { where = " where " + where } vl.Set("SelectExpression", fmt.Sprintf("select %s from %s%s", what, self.Name, where)) if consist { vl.Set("ConsistentRead", "true") } done := false nextToken := "" for err == nil && !done { vl.Del("NextToken") if nextToken != "" { vl.Set("NextToken", nextToken) } req := aws.NewRequest(self.URL, "GET", nil, vl) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_API_VERSION, 0) if err == nil { resp, err = self.conn.Request(req) } if err == nil { ob, _ := http.DumpResponse(resp, true) os.Stdout.Write(ob) xresp := selectresponse{} err = xml.Unmarshal(resp.Body, &xresp) if err == nil { fmt.Printf("XML == %+v", xresp) for i := range xresp.Items { items <- xresp.Items[i] } nextToken = xresp.NextToken done = (nextToken == "") } resp.Body.Close() } } return }
func (self *Service) DescribeLoadBalancers(id *aws.Signer) (lbs []LoadBalancerDescription, err os.Error) { parms := http.Values{} parms.Set("Action", "DescribeLoadBalancers") req := aws.NewRequest(self.URL, "GET", nil, parms) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 0) if err != nil { return } resp, err := self.conn.Request(req) if err == nil { qr := LoadBalancerQueryResult{} defer resp.Body.Close() err = xml.Unmarshal(resp.Body, &qr) if err == nil { lbs = qr.LoadBalancerDescription } } return }
func (self *Domain) DeleteAttribute(s *aws.Signer, item string, attrs, expected AttributeList) (err os.Error) { var resp *http.Response vl := attrs.Values(ATTRIBUTE_LIST) for k, v := range expected.Values(EXPECTED_LIST) { vl[k] = v } vl.Set("Action", "DeleteAttribute") vl.Set("DomainName", self.Name) vl.Set("ItemName", item) req := aws.NewRequest(self.URL, "GET", nil, vl) err = s.SignRequestV2(req, aws.Canonicalize, DEFAULT_API_VERSION, 0) if err == nil { resp, err = self.conn.Request(req) } if err == nil { defer resp.Body.Close() err = aws.CodeToError(resp.StatusCode) } return }
func (self *Service) CreateLoadBalancer(id *aws.Signer, name string, zones []string, listeners []Listener) (err os.Error) { parms := http.Values{} parms.Set("Action", "CreateLoadBalancer") parms.Set("LoadBalancerName", name) for zi := range zones { parms.Set(Sprintf("AvailabilityZones.members.%d", zi+1), zones[zi]) } for li := range listeners { listeners[li].SetValues(parms, li+1) } req := aws.NewRequest(self.URL, "GET", nil, parms) err = id.SignRequestV2(req, aws.Canonicalize, DEFAULT_VERSION, 0) if err != nil { return } resp, err := self.conn.Request(req) if err == nil { defer resp.Body.Close() ob, _ := http.DumpResponse(resp, true) os.Stdout.Write(ob) } return }