mirror of https://github.com/grafana/grafana.git
				
				
				
			MS/My/PostgresSQL: Migrate annotation query (#58847)
This commit is contained in:
		
							parent
							
								
									44402ff726
								
							
						
					
					
						commit
						38f25a0bf5
					
				| 
						 | 
				
			
			@ -2,11 +2,11 @@ import React, { useCallback, useEffect, useState } from 'react';
 | 
			
		|||
import { useAsync } from 'react-use';
 | 
			
		||||
 | 
			
		||||
import { QueryEditorProps } from '@grafana/data';
 | 
			
		||||
import { Space } from '@grafana/experimental';
 | 
			
		||||
import { EditorMode, Space } from '@grafana/experimental';
 | 
			
		||||
 | 
			
		||||
import { SqlDatasource } from '../datasource/SqlDatasource';
 | 
			
		||||
import { applyQueryDefaults } from '../defaults';
 | 
			
		||||
import { SQLQuery, QueryRowFilter, SQLOptions, EditorMode } from '../types';
 | 
			
		||||
import { SQLQuery, QueryRowFilter, SQLOptions } from '../types';
 | 
			
		||||
import { haveColumns } from '../utils/sql.utils';
 | 
			
		||||
 | 
			
		||||
import { QueryHeader, QueryHeaderProps } from './QueryHeader';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,11 +2,11 @@ import React, { useCallback, useState } from 'react';
 | 
			
		|||
import { useCopyToClipboard } from 'react-use';
 | 
			
		||||
 | 
			
		||||
import { SelectableValue } from '@grafana/data';
 | 
			
		||||
import { EditorField, EditorHeader, EditorRow, FlexItem, InlineSelect, Space } from '@grafana/experimental';
 | 
			
		||||
import { EditorField, EditorHeader, EditorMode, EditorRow, FlexItem, InlineSelect, Space } from '@grafana/experimental';
 | 
			
		||||
import { Button, InlineField, InlineSwitch, RadioButtonGroup, Select, Tooltip } from '@grafana/ui';
 | 
			
		||||
 | 
			
		||||
import { QueryWithDefaults } from '../defaults';
 | 
			
		||||
import { SQLQuery, QueryFormat, QueryRowFilter, QUERY_FORMAT_OPTIONS, DB, EditorMode } from '../types';
 | 
			
		||||
import { SQLQuery, QueryFormat, QueryRowFilter, QUERY_FORMAT_OPTIONS, DB } from '../types';
 | 
			
		||||
import { defaultToRawSql } from '../utils/sql.utils';
 | 
			
		||||
 | 
			
		||||
import { ConfirmModal } from './ConfirmModal';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,8 +25,10 @@ import { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';
 | 
			
		|||
import { VariableWithMultiSupport } from '../../../variables/types';
 | 
			
		||||
import { getSearchFilterScopedVar, SearchFilterOptions } from '../../../variables/utils';
 | 
			
		||||
import { ResponseParser } from '../ResponseParser';
 | 
			
		||||
import { SqlQueryEditor } from '../components/QueryEditor';
 | 
			
		||||
import { MACRO_NAMES } from '../constants';
 | 
			
		||||
import { DB, SQLQuery, SQLOptions, SqlQueryModel, QueryFormat } from '../types';
 | 
			
		||||
import migrateAnnotation from '../utils/migration';
 | 
			
		||||
 | 
			
		||||
export abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLOptions> {
 | 
			
		||||
  id: number;
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +36,6 @@ export abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLO
 | 
			
		|||
  name: string;
 | 
			
		||||
  interval: string;
 | 
			
		||||
  db: DB;
 | 
			
		||||
  annotations = {};
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
    instanceSettings: DataSourceInstanceSettings<SQLOptions>,
 | 
			
		||||
| 
						 | 
				
			
			@ -47,6 +48,10 @@ export abstract class SqlDatasource extends DataSourceWithBackend<SQLQuery, SQLO
 | 
			
		|||
    const settingsData = instanceSettings.jsonData || {};
 | 
			
		||||
    this.interval = settingsData.timeInterval || '1m';
 | 
			
		||||
    this.db = this.getDB();
 | 
			
		||||
    this.annotations = {
 | 
			
		||||
      prepareAnnotation: migrateAnnotation,
 | 
			
		||||
      QueryEditor: SqlQueryEditor,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  abstract getDB(dsID?: number): DB;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,6 @@
 | 
			
		|||
import { EditorMode, QueryFormat, SQLQuery } from './types';
 | 
			
		||||
import { EditorMode } from '@grafana/experimental';
 | 
			
		||||
 | 
			
		||||
import { QueryFormat, SQLQuery } from './types';
 | 
			
		||||
import { createFunctionField, setGroupByField } from './utils/sql.utils';
 | 
			
		||||
 | 
			
		||||
export function applyQueryDefaults(q?: SQLQuery): SQLQuery {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@ import {
 | 
			
		|||
  TimeRange,
 | 
			
		||||
  toOption as toOptionFromData,
 | 
			
		||||
} from '@grafana/data';
 | 
			
		||||
import { CompletionItemKind, LanguageCompletionProvider } from '@grafana/experimental';
 | 
			
		||||
import { CompletionItemKind, EditorMode, LanguageCompletionProvider } from '@grafana/experimental';
 | 
			
		||||
 | 
			
		||||
import { QueryWithDefaults } from './defaults';
 | 
			
		||||
import {
 | 
			
		||||
| 
						 | 
				
			
			@ -49,11 +49,6 @@ export enum QueryFormat {
 | 
			
		|||
  Table = 'table',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export enum EditorMode {
 | 
			
		||||
  Builder = 'builder',
 | 
			
		||||
  Code = 'code',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface SQLQuery extends DataQuery {
 | 
			
		||||
  alias?: string;
 | 
			
		||||
  format?: QueryFormat;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
import { AnnotationQuery } from '@grafana/data';
 | 
			
		||||
import { EditorMode } from '@grafana/experimental';
 | 
			
		||||
 | 
			
		||||
import { SQLQuery } from '../types';
 | 
			
		||||
 | 
			
		||||
export default function migrateAnnotation(annotation: AnnotationQuery<SQLQuery>) {
 | 
			
		||||
  const oldQuery = typeof annotation.rawQuery === 'string' ? annotation.rawQuery : null;
 | 
			
		||||
 | 
			
		||||
  if (!oldQuery) {
 | 
			
		||||
    return annotation;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const newQuery: SQLQuery = {
 | 
			
		||||
    ...(annotation.target ?? {}),
 | 
			
		||||
    refId: annotation.target?.refId ?? 'Anno',
 | 
			
		||||
    editorMode: EditorMode.Code,
 | 
			
		||||
    rawSql: oldQuery,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    ...annotation,
 | 
			
		||||
    rawQuery: undefined,
 | 
			
		||||
    workspace: undefined,
 | 
			
		||||
    subscription: undefined,
 | 
			
		||||
    queryType: undefined,
 | 
			
		||||
    target: newQuery,
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue