UNPKG

@grafana/runtime

Version:
1 lines 4.75 kB
{"version":3,"file":"migrationHandler.mjs","sources":["../../../src/utils/migrationHandler.ts"],"sourcesContent":["import { DataQueryRequest } from '@grafana/data';\nimport { DataQuery } from '@grafana/schema';\n\nimport { config } from '../config';\nimport { getBackendSrv } from '../services';\n\nimport { DataSourceWithBackend } from './DataSourceWithBackend';\n\n/**\n * @alpha Experimental: Plugins implementing MigrationHandler interface will automatically have their queries migrated.\n */\nexport interface MigrationHandler {\n hasBackendMigration: boolean;\n shouldMigrate(query: DataQuery): boolean;\n}\n\nexport function isMigrationHandler(object: unknown): object is MigrationHandler {\n return object instanceof DataSourceWithBackend && 'hasBackendMigration' in object && 'shouldMigrate' in object;\n}\n\nasync function postMigrateRequest<TQuery extends DataQuery>(queries: TQuery[]): Promise<TQuery[]> {\n if (!(config.featureToggles.grafanaAPIServerWithExperimentalAPIs || config.featureToggles.datasourceAPIServers)) {\n console.warn('migrateQuery is only available with the experimental API server');\n return queries;\n }\n\n // Obtaining the GroupName from the plugin ID as done in the backend, this is temporary until we have a better way to obtain it\n // https://github.com/grafana/grafana/blob/e013cd427cb0457177e11f19ebd30bc523b36c76/pkg/plugins/apiserver.go#L10\n const dsnameURL = queries[0].datasource?.type?.replace(/^(grafana-)?(.*?)(-datasource)?$/, '$2');\n const groupName = `${dsnameURL}.datasource.grafana.app`;\n // Asuming apiVersion is v0alpha1, we'll need to obtain it from a trusted source\n const apiVersion = 'v0alpha1';\n const url = `/apis/${groupName}/${apiVersion}/namespaces/${config.namespace}/queryconvert`;\n const request = {\n queries: queries.map((query) => {\n return {\n ...query,\n JSON: query, // JSON is not part of the type but it should be what holds the query\n };\n }),\n };\n const res = await getBackendSrv().post(url, request);\n return res.queries.map((query: { JSON: TQuery }) => query.JSON);\n}\n\n/**\n * @alpha Experimental: Calls migration endpoint with one query. Requires grafanaAPIServerWithExperimentalAPIs or datasourceAPIServers feature toggle.\n */\nexport async function migrateQuery<TQuery extends DataQuery>(\n datasource: MigrationHandler,\n query: TQuery\n): Promise<TQuery> {\n if (!datasource.hasBackendMigration || !datasource.shouldMigrate(query)) {\n return query;\n }\n const res = await postMigrateRequest([query]);\n return res[0];\n}\n\n/**\n * @alpha Experimental: Calls migration endpoint with multiple queries. Requires grafanaAPIServerWithExperimentalAPIs or datasourceAPIServers feature toggle.\n */\nexport async function migrateRequest<TQuery extends DataQuery>(\n datasource: MigrationHandler,\n request: DataQueryRequest<TQuery>\n): Promise<DataQueryRequest<TQuery>> {\n if (!datasource.hasBackendMigration || !request.targets.some((query) => datasource.shouldMigrate(query))) {\n return request;\n }\n const res = await postMigrateRequest(request.targets);\n return { ...request, targets: res };\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAgBO,SAAS,mBAAmB,MAA6C,EAAA;AAC9E,EAAA,OAAO,MAAkB,YAAA,qBAAA,IAAyB,qBAAyB,IAAA,MAAA,IAAU,eAAmB,IAAA,MAAA;AAC1G;AAEA,eAAe,mBAA6C,OAAsC,EAAA;AApBlG,EAAA,IAAA,EAAA,EAAA,EAAA;AAqBE,EAAA,IAAI,EAAE,MAAO,CAAA,cAAA,CAAe,oCAAwC,IAAA,MAAA,CAAO,eAAe,oBAAuB,CAAA,EAAA;AAC/G,IAAA,OAAA,CAAQ,KAAK,iEAAiE,CAAA;AAC9E,IAAO,OAAA,OAAA;AAAA;AAKT,EAAM,MAAA,SAAA,GAAA,CAAY,mBAAQ,CAAC,CAAA,CAAE,eAAX,IAAuB,GAAA,SAAA,GAAA,EAAA,CAAA,IAAA,KAAvB,IAA6B,GAAA,SAAA,GAAA,EAAA,CAAA,OAAA,CAAQ,kCAAoC,EAAA,IAAA,CAAA;AAC3F,EAAM,MAAA,SAAA,GAAY,GAAG,SAAS,CAAA,uBAAA,CAAA;AAE9B,EAAA,MAAM,UAAa,GAAA,UAAA;AACnB,EAAA,MAAM,MAAM,CAAS,MAAA,EAAA,SAAS,IAAI,UAAU,CAAA,YAAA,EAAe,OAAO,SAAS,CAAA,aAAA,CAAA;AAC3E,EAAA,MAAM,OAAU,GAAA;AAAA,IACd,OAAS,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,KAAU,KAAA;AAC9B,MAAO,OAAA;AAAA,QACL,GAAG,KAAA;AAAA,QACH,IAAM,EAAA;AAAA;AAAA,OACR;AAAA,KACD;AAAA,GACH;AACA,EAAA,MAAM,MAAM,MAAM,aAAA,EAAgB,CAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AACnD,EAAA,OAAO,IAAI,OAAQ,CAAA,GAAA,CAAI,CAAC,KAAA,KAA4B,MAAM,IAAI,CAAA;AAChE;AAKsB,eAAA,YAAA,CACpB,YACA,KACiB,EAAA;AACjB,EAAA,IAAI,CAAC,UAAW,CAAA,mBAAA,IAAuB,CAAC,UAAW,CAAA,aAAA,CAAc,KAAK,CAAG,EAAA;AACvE,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,MAAM,GAAM,GAAA,MAAM,kBAAmB,CAAA,CAAC,KAAK,CAAC,CAAA;AAC5C,EAAA,OAAO,IAAI,CAAC,CAAA;AACd;AAKsB,eAAA,cAAA,CACpB,YACA,OACmC,EAAA;AACnC,EAAA,IAAI,CAAC,UAAA,CAAW,mBAAuB,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,KAAU,KAAA,UAAA,CAAW,aAAc,CAAA,KAAK,CAAC,CAAG,EAAA;AACxG,IAAO,OAAA,OAAA;AAAA;AAET,EAAA,MAAM,GAAM,GAAA,MAAM,kBAAmB,CAAA,OAAA,CAAQ,OAAO,CAAA;AACpD,EAAA,OAAO,EAAE,GAAG,OAAS,EAAA,OAAA,EAAS,GAAI,EAAA;AACpC;;;;"}