{"version":3,"file":"mssqlPlugin.3ed9f6af8e8372075bfd.js","mappings":"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","sources":["webpack://grafana/./public/app/angular/AngularLocationWrapper.ts","webpack://grafana/./public/app/angular/panel/metrics_panel_ctrl.ts","webpack://grafana/./public/app/angular/panel/panel_ctrl.ts","webpack://grafana/./public/app/angular/panel/query_ctrl.ts","webpack://grafana/./public/app/features/datasources/utils/passwordHandlers.ts","webpack://grafana/./public/app/plugins/datasource/mssql/config_ctrl.ts","webpack://grafana/./public/app/plugins/datasource/mssql/response_parser.ts","webpack://grafana/./public/app/plugins/datasource/mssql/datasource.ts","webpack://grafana/./public/app/plugins/datasource/mssql/query_ctrl.ts","webpack://grafana/./public/app/plugins/datasource/mssql/module.ts","webpack://grafana/./public/app/plugins/sdk.ts"],"sourcesContent":["import { deprecationWarning, urlUtil } from '@grafana/data';\nimport { locationSearchToObject, locationService, navigationLogger } from '@grafana/runtime';\n\n// Ref: https://github.com/angular/angular.js/blob/ae8e903edf88a83fedd116ae02c0628bf72b150c/src/ng/location.js#L5\nconst DEFAULT_PORTS: Record = { http: 80, https: 443, ftp: 21 };\n\nexport class AngularLocationWrapper {\n constructor() {\n this.absUrl = this.wrapInDeprecationWarning(this.absUrl);\n this.hash = this.wrapInDeprecationWarning(this.hash);\n this.host = this.wrapInDeprecationWarning(this.host);\n this.path = this.wrapInDeprecationWarning(this.path);\n this.port = this.wrapInDeprecationWarning(this.port, 'window.location');\n this.protocol = this.wrapInDeprecationWarning(this.protocol, 'window.location');\n this.replace = this.wrapInDeprecationWarning(this.replace);\n this.search = this.wrapInDeprecationWarning(this.search);\n this.state = this.wrapInDeprecationWarning(this.state);\n this.url = this.wrapInDeprecationWarning(this.url);\n }\n\n wrapInDeprecationWarning(fn: Function, replacement?: string) {\n let self = this;\n\n return function wrapper() {\n deprecationWarning('$location', fn.name, replacement || 'locationService');\n return fn.apply(self, arguments);\n };\n }\n\n absUrl(): string {\n return `${window.location.origin}${this.url()}`;\n }\n\n hash(newHash?: string | null) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: hash');\n\n if (!newHash) {\n return locationService.getLocation().hash.slice(1);\n } else {\n throw new Error('AngularLocationWrapper method not implemented.');\n }\n }\n\n host(): string {\n return new URL(window.location.href).hostname;\n }\n\n path(pathname?: any) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: path');\n\n const location = locationService.getLocation();\n\n if (pathname !== undefined && pathname !== null) {\n let parsedPath = String(pathname);\n parsedPath = parsedPath.startsWith('/') ? parsedPath : `/${parsedPath}`;\n const url = new URL(`${window.location.origin}${parsedPath}`);\n\n locationService.push({\n pathname: url.pathname,\n search: url.search.length > 0 ? url.search : location.search,\n hash: url.hash.length > 0 ? url.hash : location.hash,\n });\n return this;\n }\n\n if (pathname === null) {\n locationService.push('/');\n return this;\n }\n\n return location.pathname;\n }\n\n port(): number | null {\n const url = new URL(window.location.href);\n return parseInt(url.port, 10) || DEFAULT_PORTS[url.protocol] || null;\n }\n\n protocol(): string {\n return new URL(window.location.href).protocol.slice(0, -1);\n }\n\n replace() {\n throw new Error('AngularLocationWrapper method not implemented.');\n }\n\n search(search?: any, paramValue?: any) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: search');\n if (!search) {\n return locationService.getSearchObject();\n }\n\n if (search && arguments.length > 1) {\n locationService.partial({\n [search]: paramValue,\n });\n\n return this;\n }\n\n if (search) {\n let newQuery;\n\n if (typeof search === 'object') {\n newQuery = { ...search };\n } else {\n newQuery = locationSearchToObject(search);\n }\n\n for (const key of Object.keys(newQuery)) {\n // removing params with null | undefined\n if (newQuery[key] === null || newQuery[key] === undefined) {\n delete newQuery[key];\n }\n }\n\n const updatedUrl = urlUtil.renderUrl(locationService.getLocation().pathname, newQuery);\n locationService.push(updatedUrl);\n }\n\n return this;\n }\n\n state(state?: any) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: state');\n throw new Error('AngularLocationWrapper method not implemented.');\n }\n\n url(newUrl?: any) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: url');\n\n if (newUrl !== undefined) {\n if (newUrl.startsWith('#')) {\n locationService.push({ ...locationService.getLocation(), hash: newUrl });\n } else if (newUrl.startsWith('?')) {\n locationService.push({ ...locationService.getLocation(), search: newUrl });\n } else if (newUrl.trim().length === 0) {\n locationService.push('/');\n } else {\n locationService.push(newUrl);\n }\n\n return locationService;\n }\n\n const location = locationService.getLocation();\n return `${location.pathname}${location.search}${location.hash}`;\n }\n}\n","import { isArray } from 'lodash';\nimport { Unsubscribable } from 'rxjs';\n\nimport {\n DataFrame,\n DataQueryResponse,\n DataSourceApi,\n LegacyResponseData,\n LoadingState,\n PanelData,\n PanelEvents,\n TimeRange,\n toDataFrameDTO,\n toLegacyResponseData,\n} from '@grafana/data';\nimport { PanelCtrl } from 'app/angular/panel/panel_ctrl';\nimport { ContextSrv } from 'app/core/services/context_srv';\nimport { PanelModel } from 'app/features/dashboard/state';\nimport { applyPanelTimeOverrides } from 'app/features/dashboard/utils/panel';\n\nimport { PanelQueryRunner } from '../../features/query/state/PanelQueryRunner';\n\nclass MetricsPanelCtrl extends PanelCtrl {\n declare datasource: DataSourceApi;\n declare range: TimeRange;\n\n contextSrv: ContextSrv;\n datasourceSrv: any;\n timeSrv: any;\n templateSrv: any;\n interval: any;\n intervalMs: any;\n resolution: any;\n timeInfo?: string;\n skipDataOnInit = false;\n dataList: LegacyResponseData[] = [];\n querySubscription?: Unsubscribable | null;\n useDataFrames = false;\n panelData?: PanelData;\n\n constructor($scope: any, $injector: any) {\n super($scope, $injector);\n\n this.contextSrv = $injector.get('contextSrv');\n this.datasourceSrv = $injector.get('datasourceSrv');\n this.timeSrv = $injector.get('timeSrv');\n this.templateSrv = $injector.get('templateSrv');\n this.panel.datasource = this.panel.datasource || null;\n\n this.events.on(PanelEvents.refresh, this.onMetricsPanelRefresh.bind(this));\n this.events.on(PanelEvents.panelTeardown, this.onPanelTearDown.bind(this));\n this.events.on(PanelEvents.componentDidMount, this.onMetricsPanelMounted.bind(this));\n }\n\n private onMetricsPanelMounted() {\n const queryRunner = this.panel.getQueryRunner() as PanelQueryRunner;\n this.querySubscription = queryRunner\n .getData({ withTransforms: true, withFieldConfig: true })\n .subscribe(this.panelDataObserver);\n }\n\n private onPanelTearDown() {\n if (this.querySubscription) {\n this.querySubscription.unsubscribe();\n this.querySubscription = null;\n }\n }\n\n private onMetricsPanelRefresh() {\n // ignore fetching data if another panel is in fullscreen\n if (this.otherPanelInFullscreenMode()) {\n return;\n }\n\n // if we have snapshot data use that\n if (this.panel.snapshotData) {\n this.updateTimeRange();\n let data = this.panel.snapshotData;\n // backward compatibility\n if (!isArray(data)) {\n data = data.data;\n }\n\n this.panelData = {\n state: LoadingState.Done,\n series: data,\n timeRange: this.range,\n };\n\n // Defer panel rendering till the next digest cycle.\n // For some reason snapshot panels don't init at this time, so this helps to avoid rendering issues.\n return this.$timeout(() => {\n this.events.emit(PanelEvents.dataSnapshotLoad, data);\n });\n }\n\n // clear loading/error state\n delete this.error;\n this.loading = true;\n\n // load datasource service\n return this.datasourceSrv\n .get(this.panel.datasource, this.panel.scopedVars)\n .then(this.issueQueries.bind(this))\n .catch((err: any) => {\n this.processDataError(err);\n });\n }\n\n processDataError(err: any) {\n // if canceled keep loading set to true\n if (err.cancelled) {\n console.log('Panel request cancelled', err);\n return;\n }\n\n this.error = err.message || 'Request Error';\n\n if (err.data) {\n if (err.data.message) {\n this.error = err.data.message;\n } else if (err.data.error) {\n this.error = err.data.error;\n }\n }\n\n this.angularDirtyCheck();\n }\n\n angularDirtyCheck() {\n if (!this.$scope.$root.$$phase) {\n this.$scope.$digest();\n }\n }\n\n // Updates the response with information from the stream\n panelDataObserver = {\n next: (data: PanelData) => {\n this.panelData = data;\n\n if (data.state === LoadingState.Error) {\n this.loading = false;\n this.processDataError(data.error);\n }\n\n // Ignore data in loading state\n if (data.state === LoadingState.Loading) {\n this.loading = true;\n this.angularDirtyCheck();\n return;\n }\n\n if (data.request) {\n const { timeInfo } = data.request;\n if (timeInfo) {\n this.timeInfo = timeInfo;\n }\n }\n\n if (data.timeRange) {\n this.range = data.timeRange;\n }\n\n if (this.useDataFrames) {\n this.handleDataFrames(data.series);\n } else {\n // Make the results look as if they came directly from a <6.2 datasource request\n const legacy = data.series.map((v) => toLegacyResponseData(v));\n this.handleQueryResult({ data: legacy });\n }\n\n this.angularDirtyCheck();\n },\n };\n\n updateTimeRange(datasource?: DataSourceApi) {\n this.datasource = datasource || this.datasource;\n this.range = this.timeSrv.timeRange();\n\n const newTimeData = applyPanelTimeOverrides(this.panel, this.range);\n this.timeInfo = newTimeData.timeInfo;\n this.range = newTimeData.timeRange;\n }\n\n issueQueries(datasource: DataSourceApi) {\n this.updateTimeRange(datasource);\n\n this.datasource = datasource;\n\n const panel = this.panel as PanelModel;\n const queryRunner = panel.getQueryRunner();\n\n return queryRunner.run({\n datasource: panel.datasource,\n queries: panel.targets,\n panelId: panel.id,\n dashboardId: this.dashboard.id,\n timezone: this.dashboard.getTimezone(),\n timeInfo: this.timeInfo,\n timeRange: this.range,\n maxDataPoints: panel.maxDataPoints || this.width,\n minInterval: panel.interval,\n scopedVars: panel.scopedVars,\n cacheTimeout: panel.cacheTimeout,\n transformations: panel.transformations,\n });\n }\n\n handleDataFrames(data: DataFrame[]) {\n this.loading = false;\n\n if (this.dashboard && this.dashboard.snapshot) {\n this.panel.snapshotData = data.map((frame) => toDataFrameDTO(frame));\n }\n\n try {\n this.events.emit(PanelEvents.dataFramesReceived, data);\n } catch (err) {\n this.processDataError(err);\n }\n }\n\n handleQueryResult(result: DataQueryResponse) {\n this.loading = false;\n\n if (this.dashboard.snapshot) {\n this.panel.snapshotData = result.data;\n }\n\n if (!result || !result.data) {\n console.log('Data source query result invalid, missing data field:', result);\n result = { data: [] };\n }\n\n try {\n this.events.emit(PanelEvents.dataReceived, result.data);\n } catch (err) {\n this.processDataError(err);\n }\n }\n}\n\nexport { MetricsPanelCtrl };\n","import { auto } from 'angular';\nimport { isString } from 'lodash';\n\nimport {\n AppEvent,\n PanelEvents,\n PanelPluginMeta,\n AngularPanelMenuItem,\n EventBusExtended,\n EventBusSrv,\n} from '@grafana/data';\nimport { AngularLocationWrapper } from 'app/angular/AngularLocationWrapper';\nimport config from 'app/core/config';\nimport { profiler } from 'app/core/core';\n\nimport { DashboardModel } from '../../features/dashboard/state';\n\nexport class PanelCtrl {\n panel: any;\n error: any;\n declare dashboard: DashboardModel;\n pluginName = '';\n pluginId = '';\n editorTabs: any;\n $scope: any;\n $injector: auto.IInjectorService;\n $timeout: any;\n editModeInitiated = false;\n declare height: number;\n declare width: number;\n containerHeight: any;\n events: EventBusExtended;\n loading = false;\n timing: any;\n $location: AngularLocationWrapper;\n\n constructor($scope: any, $injector: auto.IInjectorService) {\n this.panel = this.panel ?? $scope.$parent.panel;\n this.dashboard = this.dashboard ?? $scope.$parent.dashboard;\n this.$injector = $injector;\n this.$scope = $scope;\n this.$timeout = $injector.get('$timeout');\n this.editorTabs = [];\n this.$location = new AngularLocationWrapper();\n this.events = new EventBusSrv();\n this.timing = {}; // not used but here to not break plugins\n\n const plugin = config.panels[this.panel.type];\n if (plugin) {\n this.pluginId = plugin.id;\n this.pluginName = plugin.name;\n }\n\n $scope.$on(PanelEvents.componentDidMount.name, () => this.panelDidMount());\n }\n\n panelDidMount() {\n this.events.emit(PanelEvents.componentDidMount);\n this.events.emit(PanelEvents.initialized);\n this.dashboard.panelInitialized(this.panel);\n }\n\n renderingCompleted() {\n profiler.renderingCompleted();\n }\n\n refresh() {\n this.panel.refresh();\n }\n\n publishAppEvent(event: AppEvent, payload?: T) {\n this.$scope.$root.appEvent(event, payload);\n }\n\n initEditMode() {\n if (!this.editModeInitiated) {\n this.editModeInitiated = true;\n this.events.emit(PanelEvents.editModeInitialized);\n }\n }\n\n addEditorTab(title: string, directiveFn: any, index?: number, icon?: any) {\n const editorTab = { title, directiveFn, icon };\n\n if (isString(directiveFn)) {\n editorTab.directiveFn = () => {\n return { templateUrl: directiveFn };\n };\n }\n\n if (index) {\n this.editorTabs.splice(index, 0, editorTab);\n } else {\n this.editorTabs.push(editorTab);\n }\n }\n\n getExtendedMenu() {\n const menu: AngularPanelMenuItem[] = [];\n this.events.emit(PanelEvents.initPanelActions, menu);\n return menu;\n }\n\n // Override in sub-class to add items before extended menu\n async getAdditionalMenuItems(): Promise {\n return [];\n }\n\n otherPanelInFullscreenMode() {\n return this.dashboard.otherPanelInFullscreen(this.panel);\n }\n\n render(payload?: any) {\n this.events.emit(PanelEvents.render, payload);\n }\n\n // overriden from react\n onPluginTypeChange = (plugin: PanelPluginMeta) => {};\n}\n","import { auto } from 'angular';\nimport { indexOf } from 'lodash';\n\nexport class QueryCtrl {\n target!: T;\n datasource!: any;\n panelCtrl!: any;\n panel: any;\n hasRawMode!: boolean;\n error?: string | null;\n isLastQuery: boolean;\n\n constructor(public $scope: any, public $injector: auto.IInjectorService) {\n this.panelCtrl = this.panelCtrl ?? $scope.ctrl.panelCtrl;\n this.target = this.target ?? $scope.ctrl.target;\n this.datasource = this.datasource ?? $scope.ctrl.datasource;\n this.panel = this.panelCtrl?.panel ?? $scope.ctrl.panelCtrl.panel;\n this.isLastQuery = indexOf(this.panel.targets, this.target) === this.panel.targets.length - 1;\n }\n\n refresh() {\n this.panelCtrl.refresh();\n }\n}\n","/**\n * Set of handlers for secure password field in Angular components. They handle backward compatibility with\n * passwords stored in plain text fields.\n */\n\nimport { SyntheticEvent } from 'react';\n\nexport enum PasswordFieldEnum {\n Password = 'password',\n BasicAuthPassword = 'basicAuthPassword',\n}\n\n/**\n * Basic shape for settings controllers in at the moment mostly angular data source plugins.\n */\nexport type Ctrl = {\n current: {\n secureJsonFields: {\n [key: string]: boolean;\n };\n secureJsonData?: {\n [key: string]: string;\n };\n password?: string;\n basicAuthPassword?: string;\n };\n};\n\nexport const createResetHandler =\n (ctrl: Ctrl, field: PasswordFieldEnum) => (event: SyntheticEvent) => {\n event.preventDefault();\n // Reset also normal plain text password to remove it and only save it in secureJsonData.\n ctrl.current[field] = undefined;\n ctrl.current.secureJsonFields[field] = false;\n ctrl.current.secureJsonData = ctrl.current.secureJsonData || {};\n ctrl.current.secureJsonData[field] = '';\n };\n\nexport const createChangeHandler =\n (ctrl: any, field: PasswordFieldEnum) => (event: SyntheticEvent) => {\n ctrl.current.secureJsonData = ctrl.current.secureJsonData || {};\n ctrl.current.secureJsonData[field] = event.currentTarget.value;\n };\n","import {\n createChangeHandler,\n createResetHandler,\n PasswordFieldEnum,\n} from '../../../features/datasources/utils/passwordHandlers';\n\nexport class MssqlConfigCtrl {\n static templateUrl = 'partials/config.html';\n\n // Set through angular bindings\n declare current: any;\n\n onPasswordReset: ReturnType;\n onPasswordChange: ReturnType;\n showUserCredentials = false;\n showTlsConfig = false;\n showCertificateConfig = false;\n\n /** @ngInject */\n constructor($scope: any) {\n this.current = $scope.ctrl.current;\n this.current.jsonData.encrypt = this.current.jsonData.encrypt || 'false';\n this.current.jsonData.sslRootCertFile = this.current.jsonData.sslRootCertFile || '';\n this.current.jsonData.tlsSkipVerify = this.current.jsonData.tlsSkipVerify || false;\n this.current.jsonData.serverName = this.current.jsonData.serverName || '';\n this.current.jsonData.authenticationType = this.current.jsonData.authenticationType || 'SQL Server Authentication';\n this.onPasswordReset = createResetHandler(this, PasswordFieldEnum.Password);\n this.onPasswordChange = createChangeHandler(this, PasswordFieldEnum.Password);\n this.onAuthenticationTypeChange();\n this.onEncryptChange();\n }\n\n onAuthenticationTypeChange() {\n // This is using the fallback in https://github.com/denisenkom/go-mssqldb to use Windows Auth if login/user id is empty.\n if (this.current.jsonData.authenticationType === 'Windows Authentication') {\n this.current.user = '';\n this.current.password = '';\n }\n\n this.showUserCredentials = this.current.jsonData.authenticationType !== 'Windows Authentication';\n }\n\n onEncryptChange() {\n this.showTlsConfig = this.current.jsonData.encrypt === 'true';\n this.showCertificateConfig = this.showTlsConfig && this.current.jsonData.tlsSkipVerify === false;\n }\n}\n","import { AnnotationEvent, DataFrame, MetricFindValue } from '@grafana/data';\nimport { BackendDataSourceResponse, toDataQueryResponse, FetchResponse } from '@grafana/runtime';\n\nexport default class ResponseParser {\n transformMetricFindResponse(raw: FetchResponse): MetricFindValue[] {\n const frames = toDataQueryResponse(raw).data as DataFrame[];\n\n if (!frames || !frames.length) {\n return [];\n }\n\n const frame = frames[0];\n\n const values: MetricFindValue[] = [];\n const textField = frame.fields.find((f) => f.name === '__text');\n const valueField = frame.fields.find((f) => f.name === '__value');\n\n if (textField && valueField) {\n for (let i = 0; i < textField.values.length; i++) {\n values.push({ text: '' + textField.values.get(i), value: '' + valueField.values.get(i) });\n }\n } else {\n values.push(\n ...frame.fields\n .flatMap((f) => f.values.toArray())\n .map((v) => ({\n text: v,\n }))\n );\n }\n\n return Array.from(new Set(values.map((v) => v.text))).map((text) => ({\n text,\n value: values.find((v) => v.text === text)?.value,\n }));\n }\n\n async transformAnnotationResponse(options: any, data: BackendDataSourceResponse): Promise {\n const frames = toDataQueryResponse({ data: data }).data as DataFrame[];\n if (!frames || !frames.length) {\n return [];\n }\n const frame = frames[0];\n const timeField = frame.fields.find((f) => f.name === 'time');\n\n if (!timeField) {\n return Promise.reject({ message: 'Missing mandatory time column (with time column alias) in annotation query.' });\n }\n\n const timeEndField = frame.fields.find((f) => f.name === 'timeend');\n const textField = frame.fields.find((f) => f.name === 'text');\n const tagsField = frame.fields.find((f) => f.name === 'tags');\n\n const list: AnnotationEvent[] = [];\n for (let i = 0; i < frame.length; i++) {\n const timeEnd = timeEndField && timeEndField.values.get(i) ? Math.floor(timeEndField.values.get(i)) : undefined;\n list.push({\n annotation: options.annotation,\n time: Math.floor(timeField.values.get(i)),\n timeEnd,\n text: textField && textField.values.get(i) ? textField.values.get(i) : '',\n tags:\n tagsField && tagsField.values.get(i)\n ? tagsField.values\n .get(i)\n .trim()\n .split(/\\s*,\\s*/)\n : [],\n });\n }\n\n return list;\n }\n}\n","import { map as _map } from 'lodash';\nimport { lastValueFrom, of } from 'rxjs';\nimport { catchError, map, mapTo } from 'rxjs/operators';\n\nimport { AnnotationEvent, DataSourceInstanceSettings, MetricFindValue, ScopedVars, TimeRange } from '@grafana/data';\nimport { BackendDataSourceResponse, DataSourceWithBackend, FetchResponse, getBackendSrv } from '@grafana/runtime';\nimport { toTestingStatus } from '@grafana/runtime/src/utils/queryResponse';\nimport { getTemplateSrv, TemplateSrv } from 'app/features/templating/template_srv';\n\nimport ResponseParser from './response_parser';\nimport { MssqlOptions, MssqlQuery, MssqlQueryForInterpolation } from './types';\n\nexport class MssqlDatasource extends DataSourceWithBackend {\n id: any;\n name: any;\n responseParser: ResponseParser;\n interval: string;\n\n constructor(\n instanceSettings: DataSourceInstanceSettings,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.name = instanceSettings.name;\n this.id = instanceSettings.id;\n this.responseParser = new ResponseParser();\n const settingsData = instanceSettings.jsonData || ({} as MssqlOptions);\n this.interval = settingsData.timeInterval || '1m';\n }\n\n interpolateVariable(value: any, variable: any) {\n if (typeof value === 'string') {\n if (variable.multi || variable.includeAll) {\n return \"'\" + value.replace(/'/g, `''`) + \"'\";\n } else {\n return value;\n }\n }\n\n if (typeof value === 'number') {\n return value;\n }\n\n const quotedValues = _map(value, (val) => {\n if (typeof value === 'number') {\n return value;\n }\n\n return \"'\" + val.replace(/'/g, `''`) + \"'\";\n });\n return quotedValues.join(',');\n }\n\n interpolateVariablesInQueries(\n queries: MssqlQueryForInterpolation[],\n scopedVars: ScopedVars\n ): MssqlQueryForInterpolation[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query.rawSql, scopedVars, this.interpolateVariable),\n rawQuery: true,\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n applyTemplateVariables(target: MssqlQuery, scopedVars: ScopedVars): Record {\n return {\n refId: target.refId,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(target.rawSql, scopedVars, this.interpolateVariable),\n format: target.format,\n };\n }\n\n async annotationQuery(options: any): Promise {\n if (!options.annotation.rawQuery) {\n return Promise.reject({ message: 'Query missing in annotation definition' });\n }\n\n const query = {\n refId: options.annotation.name,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(options.annotation.rawQuery, options.scopedVars, this.interpolateVariable),\n format: 'table',\n };\n\n return lastValueFrom(\n getBackendSrv()\n .fetch({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: options.range.from.valueOf().toString(),\n to: options.range.to.valueOf().toString(),\n queries: [query],\n },\n requestId: options.annotation.name,\n })\n .pipe(\n map(\n async (res: FetchResponse) =>\n await this.responseParser.transformAnnotationResponse(options, res.data)\n )\n )\n );\n }\n\n filterQuery(query: MssqlQuery): boolean {\n return !query.hide;\n }\n\n metricFindQuery(query: string, optionalOptions: any): Promise {\n let refId = 'tempvar';\n if (optionalOptions && optionalOptions.variable && optionalOptions.variable.name) {\n refId = optionalOptions.variable.name;\n }\n\n const range = optionalOptions?.range as TimeRange;\n\n const interpolatedQuery = {\n refId: refId,\n datasource: this.getRef(),\n rawSql: this.templateSrv.replace(query, {}, this.interpolateVariable),\n format: 'table',\n };\n\n return lastValueFrom(\n getBackendSrv()\n .fetch({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: range?.from?.valueOf()?.toString(),\n to: range?.to?.valueOf()?.toString(),\n queries: [interpolatedQuery],\n },\n requestId: refId,\n })\n .pipe(\n map((rsp) => {\n return this.responseParser.transformMetricFindResponse(rsp);\n }),\n catchError((err) => {\n return of([]);\n })\n )\n );\n }\n\n testDatasource(): Promise {\n return lastValueFrom(\n getBackendSrv()\n .fetch({\n url: '/api/ds/query',\n method: 'POST',\n data: {\n from: '5m',\n to: 'now',\n queries: [\n {\n refId: 'A',\n intervalMs: 1,\n maxDataPoints: 1,\n datasource: this.getRef(),\n rawSql: 'SELECT 1',\n format: 'table',\n },\n ],\n },\n })\n .pipe(\n mapTo({ status: 'success', message: 'Database Connection OK' }),\n catchError((err) => {\n return of(toTestingStatus(err));\n })\n )\n );\n }\n\n targetContainsTemplate(query: MssqlQuery): boolean {\n const rawSql = query.rawSql.replace('$__', '');\n return this.templateSrv.containsTemplate(rawSql);\n }\n}\n","import { auto } from 'angular';\n\nimport { PanelEvents, QueryResultMeta } from '@grafana/data';\nimport { QueryCtrl } from 'app/plugins/sdk';\n\nimport { MssqlQuery } from './types';\n\nconst defaultQuery = `SELECT\n $__timeEpoch(),\n as value,\n as metric\nFROM\n \nWHERE\n $__timeFilter(time_column)\nORDER BY\n ASC`;\n\nexport class MssqlQueryCtrl extends QueryCtrl {\n static templateUrl = 'partials/query.editor.html';\n\n formats: any[];\n lastQueryMeta?: QueryResultMeta;\n lastQueryError?: string;\n showHelp = false;\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService) {\n super($scope, $injector);\n\n this.target.format = this.target.format || 'time_series';\n this.target.alias = '';\n this.formats = [\n { text: 'Time series', value: 'time_series' },\n { text: 'Table', value: 'table' },\n ];\n\n if (!this.target.rawSql) {\n // special handling when in table panel\n if (this.panelCtrl.panel.type === 'table') {\n this.target.format = 'table';\n this.target.rawSql = 'SELECT 1';\n } else {\n this.target.rawSql = defaultQuery;\n }\n }\n\n this.panelCtrl.events.on(PanelEvents.dataReceived, this.onDataReceived.bind(this), $scope);\n this.panelCtrl.events.on(PanelEvents.dataError, this.onDataError.bind(this), $scope);\n }\n\n onDataReceived(dataList: any) {\n this.lastQueryError = undefined;\n this.lastQueryMeta = dataList[0]?.meta;\n }\n\n onDataError(err: any) {\n if (err.data && err.data.results) {\n const queryRes = err.data.results[this.target.refId];\n if (queryRes) {\n this.lastQueryError = queryRes.error;\n }\n }\n }\n}\n","import { DataSourcePlugin } from '@grafana/data';\n\nimport { MssqlConfigCtrl } from './config_ctrl';\nimport { MssqlDatasource } from './datasource';\nimport { MssqlQueryCtrl } from './query_ctrl';\nimport { MssqlQuery } from './types';\n\nconst defaultQuery = `SELECT\n as time,\n as text,\n as tags\n FROM\n
\n WHERE\n $__timeFilter(time_column)\n ORDER BY\n ASC`;\n\nclass MssqlAnnotationsQueryCtrl {\n static templateUrl = 'partials/annotations.editor.html';\n\n declare annotation: any;\n\n /** @ngInject */\n constructor($scope: any) {\n this.annotation = $scope.ctrl.annotation;\n this.annotation.rawQuery = this.annotation.rawQuery || defaultQuery;\n }\n}\n\nexport const plugin = new DataSourcePlugin(MssqlDatasource)\n .setQueryCtrl(MssqlQueryCtrl)\n .setConfigCtrl(MssqlConfigCtrl)\n .setAnnotationQueryCtrl(MssqlAnnotationsQueryCtrl);\n","import { makeClassES5Compatible } from '@grafana/data';\nimport { loadPluginCss } from '@grafana/runtime';\nimport { MetricsPanelCtrl as MetricsPanelCtrlES6 } from 'app/angular/panel/metrics_panel_ctrl';\nimport { PanelCtrl as PanelCtrlES6 } from 'app/angular/panel/panel_ctrl';\nimport { QueryCtrl as QueryCtrlES6 } from 'app/angular/panel/query_ctrl';\n\nconst PanelCtrl = makeClassES5Compatible(PanelCtrlES6);\nconst MetricsPanelCtrl = makeClassES5Compatible(MetricsPanelCtrlES6);\nconst QueryCtrl = makeClassES5Compatible(QueryCtrlES6);\n\nexport { PanelCtrl, MetricsPanelCtrl, QueryCtrl, loadPluginCss };\n"],"names":["DEFAULT_PORTS","http","https","ftp","AngularLocationWrapper","constructor","this","absUrl","wrapInDeprecationWarning","hash","host","path","port","protocol","replace","search","state","url","fn","replacement","self","deprecationWarning","name","apply","arguments","window","location","origin","newHash","navigationLogger","Error","locationService","slice","URL","href","hostname","pathname","parsedPath","String","startsWith","length","parseInt","paramValue","newQuery","locationSearchToObject","key","Object","keys","undefined","updatedUrl","urlUtil","newUrl","trim","MetricsPanelCtrl","PanelCtrl","$scope","$injector","super","next","data","panelData","LoadingState","loading","processDataError","error","angularDirtyCheck","request","timeInfo","timeRange","range","useDataFrames","handleDataFrames","series","legacy","map","v","toLegacyResponseData","handleQueryResult","contextSrv","get","datasourceSrv","timeSrv","templateSrv","panel","datasource","events","on","PanelEvents","onMetricsPanelRefresh","bind","onPanelTearDown","onMetricsPanelMounted","queryRunner","getQueryRunner","querySubscription","getData","withTransforms","withFieldConfig","subscribe","panelDataObserver","unsubscribe","otherPanelInFullscreenMode","snapshotData","updateTimeRange","isArray","$timeout","emit","scopedVars","then","issueQueries","catch","err","cancelled","console","log","message","$root","$$phase","$digest","newTimeData","applyPanelTimeOverrides","run","queries","targets","panelId","id","dashboardId","dashboard","timezone","getTimezone","maxDataPoints","width","minInterval","interval","cacheTimeout","transformations","snapshot","frame","toDataFrameDTO","result","plugin","$parent","editorTabs","$location","EventBusSrv","timing","config","type","pluginId","pluginName","$on","panelDidMount","panelInitialized","renderingCompleted","profiler","refresh","publishAppEvent","event","payload","appEvent","initEditMode","editModeInitiated","addEditorTab","title","directiveFn","index","icon","editorTab","isString","templateUrl","splice","push","getExtendedMenu","menu","otherPanelInFullscreen","render","QueryCtrl","panelCtrl","ctrl","target","isLastQuery","indexOf","PasswordFieldEnum","createResetHandler","field","preventDefault","current","secureJsonFields","secureJsonData","createChangeHandler","currentTarget","value","MssqlConfigCtrl","jsonData","encrypt","sslRootCertFile","tlsSkipVerify","serverName","authenticationType","onPasswordReset","onPasswordChange","onAuthenticationTypeChange","onEncryptChange","user","password","showUserCredentials","showTlsConfig","showCertificateConfig","ResponseParser","transformMetricFindResponse","raw","frames","toDataQueryResponse","values","textField","fields","find","f","valueField","i","text","flatMap","toArray","Array","from","Set","options","timeField","Promise","reject","timeEndField","tagsField","list","timeEnd","Math","floor","annotation","time","tags","split","MssqlDatasource","DataSourceWithBackend","instanceSettings","getTemplateSrv","responseParser","settingsData","timeInterval","interpolateVariable","variable","multi","includeAll","_map","val","join","interpolateVariablesInQueries","expandedQueries","query","getRef","rawSql","rawQuery","applyTemplateVariables","refId","format","lastValueFrom","getBackendSrv","fetch","method","valueOf","toString","to","requestId","pipe","async","transformAnnotationResponse","res","filterQuery","hide","metricFindQuery","optionalOptions","interpolatedQuery","rsp","catchError","of","testDatasource","intervalMs","mapTo","status","toTestingStatus","targetContainsTemplate","containsTemplate","MssqlQueryCtrl","alias","formats","onDataReceived","onDataError","dataList","lastQueryError","lastQueryMeta","meta","results","queryRes","MssqlAnnotationsQueryCtrl","DataSourcePlugin","setQueryCtrl","setConfigCtrl","setAnnotationQueryCtrl","makeClassES5Compatible","PanelCtrlES6","MetricsPanelCtrlES6","QueryCtrlES6"],"sourceRoot":""}