12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { ThresholdsMode, VisualizationSuggestionsBuilder } from '@grafana/data';
- import { SuggestionName } from 'app/types/suggestions';
- import { GaugeOptions } from './types';
- export class GaugeSuggestionsSupplier {
- getSuggestionsForData(builder: VisualizationSuggestionsBuilder) {
- const { dataSummary } = builder;
- if (!dataSummary.hasData || !dataSummary.hasNumberField) {
- return;
- }
- // for many fields / series this is probably not a good fit
- if (dataSummary.numberFieldCount >= 50) {
- return;
- }
- const list = builder.getListAppender<GaugeOptions, {}>({
- name: SuggestionName.Gauge,
- pluginId: 'gauge',
- options: {},
- fieldConfig: {
- defaults: {
- thresholds: {
- steps: [
- { value: -Infinity, color: 'green' },
- { value: 70, color: 'orange' },
- { value: 85, color: 'red' },
- ],
- mode: ThresholdsMode.Percentage,
- },
- custom: {},
- },
- overrides: [],
- },
- cardOptions: {
- previewModifier: (s) => {
- if (s.options!.reduceOptions.values) {
- s.options!.reduceOptions.limit = 2;
- }
- },
- },
- });
- if (dataSummary.hasStringField && dataSummary.frameCount === 1 && dataSummary.rowCountTotal < 10) {
- list.append({
- name: SuggestionName.Gauge,
- options: {
- reduceOptions: {
- values: true,
- calcs: [],
- },
- },
- });
- list.append({
- name: SuggestionName.GaugeNoThresholds,
- options: {
- reduceOptions: {
- values: true,
- calcs: [],
- },
- showThresholdMarkers: false,
- },
- });
- } else {
- list.append({
- name: SuggestionName.Gauge,
- options: {
- reduceOptions: {
- values: false,
- calcs: ['lastNotNull'],
- },
- },
- });
- list.append({
- name: SuggestionName.GaugeNoThresholds,
- options: {
- reduceOptions: {
- values: false,
- calcs: ['lastNotNull'],
- },
- showThresholdMarkers: false,
- },
- });
- }
- }
- }
|