azuremonitor: where clause autocomplete

This commit is contained in:
Alexander Zobnin
2019-02-04 14:11:49 +03:00
parent df9ecc6816
commit ad821cf629
@@ -11,7 +11,7 @@ import { KEYWORDS, functionTokens, operatorTokens, grafanaMacros } from './kusto
// import '../sass/editor.base.scss';
const TYPEAHEAD_DELAY = 500;
const TYPEAHEAD_DELAY = 100;
interface Suggestion {
text: string;
@@ -104,12 +104,13 @@ export default class KustoQueryField extends QueryField {
this._fetchFields();
return;
}
} else if (modelPrefix.match(/(facet\s$)/i)) {
typeaheadContext = 'context-facet';
if (this.fields) {
suggestionGroups = this._getKeywordSuggestions();
} else if (modelPrefix.match(/(where\s$)/i)) {
typeaheadContext = 'context-where';
const fullQuery = Plain.serialize(this.state.value);
const table = this.getTableFromContext(fullQuery);
if (table) {
suggestionGroups = this.getWhereSuggestions(table);
} else {
this._fetchFields();
return;
}
} else if (modelPrefix.match(/(,\s*$)/)) {
@@ -345,6 +346,35 @@ export default class KustoQueryField extends QueryField {
// ];
}
private getWhereSuggestions(table: string): SuggestionGroup[] {
const tableSchema = this.schema.Databases.Default.Tables[table];
if (tableSchema) {
return [
{
prefixMatch: true,
label: 'Fields',
items: _.map(tableSchema.OrderedColumns, (f: any) => ({
text: f.Name,
hint: f.Type
}))
}
];
} else {
return [];
}
}
private getTableFromContext(query: string) {
const tablePattern = /^\s*(\w+)\s*|/g;
const normalizedQuery = normalizeQuery(query);
const match = tablePattern.exec(normalizedQuery);
if (match && match.length > 1 && match[0] && match[1]) {
return match[1];
} else {
return null;
}
}
private async _fetchEvents() {
// const query = 'events';
// const result = await this.request(query);
@@ -380,3 +410,10 @@ export default class KustoQueryField extends QueryField {
}
}
}
function normalizeQuery(query: string): string {
const commentPattern = /\/\/.*$/gm;
let normalizedQuery = query.replace(commentPattern, '');
normalizedQuery = normalizedQuery.replace('\n', ' ');
return normalizedQuery;
}