import { lastValueFrom } from 'rxjs'; import { DataSourceSettings } from '@grafana/data'; import { getBackendSrv } from 'app/core/services/backend_srv'; import { accessControlQueryParam } from 'app/core/utils/accessControl'; export const getDataSources = async (): Promise => { return await getBackendSrv().get('/api/datasources'); }; /** * @deprecated Use `getDataSourceByUid` instead. */ export const getDataSourceById = async (id: string) => { const response = await lastValueFrom( getBackendSrv().fetch({ method: 'GET', url: `/api/datasources/${id}`, params: accessControlQueryParam(), showErrorAlert: false, }) ); if (response.ok) { return response.data; } throw Error(`Could not find data source by ID: "${id}"`); }; export const getDataSourceByUid = async (uid: string) => { const response = await lastValueFrom( getBackendSrv().fetch({ method: 'GET', url: `/api/datasources/uid/${uid}`, params: accessControlQueryParam(), showErrorAlert: false, }) ); if (response.ok) { return response.data; } throw Error(`Could not find data source by UID: "${uid}"`); }; export const getDataSourceByIdOrUid = async (idOrUid: string) => { // Try with UID first, as we are trying to migrate to that try { return await getDataSourceByUid(idOrUid); } catch (err) { console.log(`Failed to lookup data source using UID "${idOrUid}"`); } // Try using ID try { return await getDataSourceById(idOrUid); } catch (err) { console.log(`Failed to lookup data source using ID "${idOrUid}"`); } throw Error('Could not find data source'); }; export const createDataSource = (dataSource: Partial) => getBackendSrv().post('/api/datasources', dataSource); export const getDataSourcePlugins = () => getBackendSrv().get('/api/plugins', { enabled: 1, type: 'datasource' }); export const updateDataSource = (dataSource: DataSourceSettings) => getBackendSrv().put(`/api/datasources/uid/${dataSource.uid}`, dataSource); export const deleteDataSource = (uid: string) => getBackendSrv().delete(`/api/datasources/uid/${uid}`);