func (hand *queryHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { setResponseHeaders(w.Header()) queryString := req.FormValue("query") if queryString == "" { writeError(hand.lg, w, http.StatusBadRequest, "No query provided.\n") return } var query common.Query reader := bytes.NewBufferString(queryString) dec := json.NewDecoder(reader) err := dec.Decode(&query) if err != nil { writeError(hand.lg, w, http.StatusBadRequest, fmt.Sprintf("Error parsing query '%s': %s", queryString, err.Error())) return } var results []*common.Span results, err, _ = hand.store.HandleQuery(&query) if err != nil { writeError(hand.lg, w, http.StatusInternalServerError, fmt.Sprintf("Internal error processing query %s: %s", query.String(), err.Error())) return } var jbytes []byte jbytes, err = json.Marshal(results) if err != nil { writeError(hand.lg, w, http.StatusInternalServerError, fmt.Sprintf("Error marshalling results: %s", err.Error())) return } w.Write(jbytes) }
func testQueryExt(t *testing.T, ht *MiniHTraced, query *common.Query, expectedSpans []common.Span, expectedNumScanned []int) { spans, err, numScanned := ht.Store.HandleQuery(query) if err != nil { t.Fatalf("Query %s failed: %s\n", query.String(), err.Error()) } expectedBuf := new(bytes.Buffer) dec := json.NewEncoder(expectedBuf) err = dec.Encode(expectedSpans) if err != nil { t.Fatalf("Failed to encode expectedSpans to JSON: %s\n", err.Error()) } spansBuf := new(bytes.Buffer) dec = json.NewEncoder(spansBuf) err = dec.Encode(spans) if err != nil { t.Fatalf("Failed to encode result spans to JSON: %s\n", err.Error()) } t.Logf("len(spans) = %d, len(expectedSpans) = %d\n", len(spans), len(expectedSpans)) common.ExpectStrEqual(t, string(expectedBuf.Bytes()), string(spansBuf.Bytes())) if expectedNumScanned != nil { if !reflect.DeepEqual(expectedNumScanned, numScanned) { t.Fatalf("Invalid values for numScanned: got %v, expected %v\n", expectedNumScanned, numScanned) } } }