func (h *CountHandler) ServeHTTP( w http.ResponseWriter, req *http.Request) { indexName := IndexNameLookup(req) if indexName == "" { ShowError(w, req, "index name is required", 400) return } indexUUID := req.FormValue("indexUUID") pindexImplType, err := cbgt.PIndexImplTypeForIndex(h.mgr.Cfg(), indexName) if err != nil || pindexImplType.Count == nil { ShowError(w, req, fmt.Sprintf("rest_index: Count,"+ " no pindexImplType, indexName: %s, err: %v", indexName, err), 400) return } count, err := pindexImplType.Count(h.mgr, indexName, indexUUID) if err != nil { ShowError(w, req, fmt.Sprintf("rest_index: Count,"+ " indexName: %s, err: %v", indexName, err), 500) return } rv := struct { Status string `json:"status"` Count uint64 `json:"count"` }{ Status: "ok", Count: count, } MustEncode(w, rv) }
func (h *QueryHandler) ServeHTTP( w http.ResponseWriter, req *http.Request) { startTime := time.Now() indexName := IndexNameLookup(req) if indexName == "" { ShowError(w, req, "index name is required", 400) return } indexUUID := req.FormValue("indexUUID") requestBody, err := ioutil.ReadAll(req.Body) if err != nil { ShowError(w, req, fmt.Sprintf("rest_index: Query,"+ " could not read request body, indexName: %s", indexName), 400) return } pindexImplType, err := cbgt.PIndexImplTypeForIndex(h.mgr.Cfg(), indexName) if err != nil || pindexImplType.Query == nil { ShowError(w, req, fmt.Sprintf("rest_index: Query,"+ " no pindexImplType, indexName: %s, err: %v", indexName, err), 400) return } err = pindexImplType.Query(h.mgr, indexName, indexUUID, requestBody, w) if h.slowQueryLogTimeout > time.Duration(0) { d := time.Since(startTime) if d > h.slowQueryLogTimeout { log.Printf("slow-query:"+ " index: %s, query: %s, duration: %v, err: %v", indexName, string(requestBody), d, err) } } if err != nil { if errCW, ok := err.(*cbgt.ErrorConsistencyWait); ok { rv := struct { Status string `json:"status"` Message string `json:"message"` StartEndSeqs map[string][]uint64 `json:"startEndSeqs"` }{ Status: errCW.Status, Message: fmt.Sprintf("rest_index: Query,"+ " indexName: %s, requestBody: %s, req: %#v, err: %v", indexName, requestBody, req, err), StartEndSeqs: errCW.StartEndSeqs, } buf, err := json.Marshal(rv) if err == nil && buf != nil { ShowError(w, req, string(buf), 408) return } } ShowError(w, req, fmt.Sprintf("rest_index: Query,"+ " indexName: %s, requestBody: %s, req: %#v, err: %v", indexName, requestBody, req, err), 400) return } }