func (q queryHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) { err := request.ParseForm() if err != nil { errorResponse(writer, http.StatusBadRequest, err) return } parsedForm := parseQueryForm(request) log.Infof("INPUT: %+v\n", parsedForm) cmd, err := query.Parse(parsedForm.input) if err != nil { errorResponse(writer, http.StatusBadRequest, err) return } cmd, profiler := query.NewProfilingCommand(cmd) result, err := cmd.Execute(q.context) if err != nil { errorResponse(writer, http.StatusInternalServerError, err) return } response := response{ Body: result, Name: cmd.Name(), } if parsedForm.profile { response.Profile = convertProfile(profiler) } bodyResponse(writer, response) if q.hook.OnQuery != nil { q.hook.OnQuery <- profiler } }
func main() { flag.Parse() common.SetupLogger() config := common.LoadConfig() cassandraConfig := cassandra.CassandraMetricMetadataConfig{ Hosts: config.MetricMetadataConfig.Hosts, Keyspace: config.MetricMetadataConfig.Keyspace, } apiInstance := common.NewMetricMetadataAPI(cassandraConfig) ruleset, err := util.LoadRules(config.MetricMetadataConfig.ConversionRulesPath) if err != nil { //Blah } graphite := util.RuleBasedGraphiteConverter{Ruleset: ruleset} config.Blueflood.GraphiteMetricConverter = &graphite blueflood := blueflood.NewBlueflood(config.Blueflood) l := liner.NewLiner() defer l.Close() for { input, err := l.Prompt("> ") if err != nil { return } l.AppendHistory(input) cmd, err := query.Parse(input) if err != nil { fmt.Println("parsing error", err.Error()) continue } n, ok := cmd.(query.Node) if !ok { fmt.Printf("error: %#v doesn't implement Node\n", cmd) continue } fmt.Println(query.PrintNode(n)) result, err := cmd.Execute(query.ExecutionContext{TimeseriesStorageAPI: blueflood, MetricMetadataAPI: apiInstance, FetchLimit: 1000}) if err != nil { fmt.Println("execution error:", err.Error()) continue } encoded, err := json.MarshalIndent(result, "", " ") if err != nil { fmt.Println("encoding error:", err.Error()) return } fmt.Println("success:") fmt.Println(string(encoded)) } }
func main() { flag.Parse() common.SetupLogger() config := common.LoadConfig() apiInstance := common.NewAPI(config.API) myBackend := blueflood.NewBlueflood(config.Blueflood) l := liner.NewLiner() defer l.Close() for { input, err := l.Prompt("> ") if err != nil { return } l.AppendHistory(input) cmd, err := query.Parse(input) if err != nil { fmt.Println("parsing error", err.Error()) continue } n, ok := cmd.(query.Node) if !ok { fmt.Printf("error: %#v doesn't implement Node\n", cmd) continue } fmt.Println(query.PrintNode(n)) result, err := cmd.Execute(query.ExecutionContext{Backend: backend.NewSequentialMultiBackend(myBackend), API: apiInstance, FetchLimit: 1000}) if err != nil { fmt.Println("execution error:", err.Error()) continue } encoded, err := json.MarshalIndent(result, "", " ") if err != nil { fmt.Println("encoding error:", err.Error()) return } fmt.Println("success:") fmt.Println(string(encoded)) } }
func (q queryHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) { err := request.ParseForm() if err != nil { errorResponse(writer, http.StatusBadRequest, err) return } parsedForm := parseQueryForm(request) log.Infof("INPUT: %+v\n", parsedForm) cmd, err := query.Parse(parsedForm.input) if err != nil { errorResponse(writer, http.StatusBadRequest, err) return } cmd, profiler := query.NewProfilingCommand(cmd) ctx := q.context ctx.UserSpecifiableConfig = api.UserSpecifiableConfig{ IncludeRawData: parsedForm.includeRaw, } result, err := cmd.Execute(ctx) if err != nil { errorResponse(writer, http.StatusInternalServerError, err) return } response := response{ Body: result.Body, Metadata: result.Metadata, Name: cmd.Name(), } if parsedForm.profile { response.Profile = convertProfile(profiler) } bodyResponse(writer, request, response) if q.hook.OnQuery != nil { q.hook.OnQuery <- profiler } }