Suggestions: Adds logs suggestions and sorting by score to suggestions (#41613)

* Suggestions: Adds logs suggestions for sorting by score to suggestions

* Introduced an enum

* review feedback
This commit is contained in:
Torkel Ödegaard
2021-11-15 15:13:01 +01:00
committed by GitHub
parent dbcefb70f6
commit dfd9813d70
10 changed files with 221 additions and 98 deletions
+25 -1
View File
@@ -1,7 +1,7 @@
import { DataQueryError, DataQueryRequest, DataQueryTimings } from './datasource';
import { PluginMeta } from './plugin';
import { ScopedVars } from './ScopedVars';
import { LoadingState } from './data';
import { LoadingState, PreferredVisualisationType } from './data';
import { DataFrame, FieldType } from './dataFrame';
import { AbsoluteTimeRange, TimeRange, TimeZone } from './time';
import { EventBus } from '../events';
@@ -203,6 +203,17 @@ export interface VisualizationSuggestion<TOptions = any, TFieldConfig = any> {
transformations?: DataTransformerConfig[];
/** Tweak for small preview */
previewModifier?: (suggestion: VisualizationSuggestion) => void;
/** A value between 0-100 how suitable suggestion is */
score?: VisualizationSuggestionScore;
}
export enum VisualizationSuggestionScore {
/** We are pretty sure this is the best possible option */
Best = 100,
/** Should be a really good option */
Good = 70,
/** Can be visualized but there are likely better options. If no score is set this score is assumed */
OK = 50,
}
/**
@@ -213,12 +224,15 @@ export interface PanelDataSummary {
rowCountTotal: number;
rowCountMax: number;
frameCount: number;
fieldCount: number;
numberFieldCount: number;
timeFieldCount: number;
stringFieldCount: number;
hasNumberField?: boolean;
hasTimeField?: boolean;
hasStringField?: boolean;
/** The first frame that set's this value */
preferredVisualisationType?: PreferredVisualisationType;
}
/**
@@ -252,11 +266,19 @@ export class VisualizationSuggestionsBuilder {
let stringFieldCount = 0;
let rowCountTotal = 0;
let rowCountMax = 0;
let fieldCount = 0;
let preferredVisualisationType: PreferredVisualisationType | undefined;
for (const frame of frames) {
rowCountTotal += frame.length;
if (frame.meta?.preferredVisualisationType) {
preferredVisualisationType = frame.meta.preferredVisualisationType;
}
for (const field of frame.fields) {
fieldCount++;
switch (field.type) {
case FieldType.number:
numberFieldCount += 1;
@@ -281,6 +303,8 @@ export class VisualizationSuggestionsBuilder {
stringFieldCount,
rowCountTotal,
rowCountMax,
fieldCount,
preferredVisualisationType,
frameCount: frames.length,
hasData: rowCountTotal > 0,
hasTimeField: timeFieldCount > 0,