diff --git a/server/ifql.go b/server/ifql.go index e7a61718b..6d5a2fc20 100644 --- a/server/ifql.go +++ b/server/ifql.go @@ -10,11 +10,12 @@ import ( // SuggestionsResponse provides a list of available IFQL functions type SuggestionsResponse struct { - Functions []string `json:"funcs"` + Functions []SuggestionResponse `json:"funcs"` } // SuggestionResponse provides the parameters available for a given IFQL function type SuggestionResponse struct { + Name string `json:"name"` Params map[string]string `json:"params"` } @@ -44,7 +45,20 @@ func (s *Service) IFQL(w http.ResponseWriter, r *http.Request) { func (s *Service) IFQLSuggestions(w http.ResponseWriter, r *http.Request) { completer := ifql.DefaultCompleter() names := completer.FunctionNames() - res := SuggestionsResponse{Functions: names} + var functions []SuggestionResponse + for _, name := range names { + suggestion, err := completer.FunctionSuggestion(name) + if err != nil { + Error(w, http.StatusNotFound, err.Error(), s.Logger) + return + } + + functions = append(functions, SuggestionResponse{ + Name: name, + Params: suggestion.Params, + }) + } + res := SuggestionsResponse{Functions: functions} encodeJSON(w, http.StatusOK, res, s.Logger) } @@ -55,10 +69,10 @@ func (s *Service) IFQLSuggestion(w http.ResponseWriter, r *http.Request) { name := httprouter.GetParamFromContext(ctx, "name") completer := ifql.DefaultCompleter() - res, err := completer.FunctionSuggestion(name) + suggestion, err := completer.FunctionSuggestion(name) if err != nil { Error(w, http.StatusNotFound, err.Error(), s.Logger) } - encodeJSON(w, http.StatusOK, SuggestionResponse(res), s.Logger) + encodeJSON(w, http.StatusOK, SuggestionResponse{Name: name, Params: suggestion.Params}, s.Logger) } diff --git a/ui/src/ifql/containers/IFQLPage.tsx b/ui/src/ifql/containers/IFQLPage.tsx index eaf4f680a..298ab8f27 100644 --- a/ui/src/ifql/containers/IFQLPage.tsx +++ b/ui/src/ifql/containers/IFQLPage.tsx @@ -31,7 +31,8 @@ export class IFQLPage extends PureComponent { const {suggestions} = this.props.links try { - const funcs = await getSuggestions(suggestions) + const results = await getSuggestions(suggestions) + const funcs = results.map(s => s.name) this.setState({funcs}) } catch (error) { console.error('Could not get function suggestions: ', error)