/usr/share/grafana/public/app/plugins/datasource/grafana-pyroscope-datasource
import { lastValueFrom } from 'rxjs'; import { CoreApp, DataQueryRequest, getDefaultTimeRange } from '@grafana/data'; import { DataAPI, VariableSupport } from './VariableSupport'; import { ProfileTypeMessage, VariableQuery } from './types'; describe('VariableSupport', () => { it('should query profiles', async function () { const mock = getDataApiMock(); const vs = new VariableSupport(mock); const resp = await lastValueFrom(vs.query(getDefaultRequest())); expect(resp.data).toEqual([ { text: 'profile type 1', value: 'profile:type:1' }, { text: 'profile type 2', value: 'profile:type:2' }, { text: 'profile type 3', value: 'profile:type:3' }, ]); }); it('should query labels', async function () { const mock = getDataApiMock(); const vs = new VariableSupport(mock); const resp = await lastValueFrom( vs.query(getDefaultRequest({ type: 'label', profileTypeId: 'profile:type:3', refId: 'A' })) ); expect(resp.data).toEqual([{ text: 'foo' }, { text: 'bar' }, { text: 'baz' }]); expect(mock.getLabelNames).toHaveBeenCalledWith( '{__profile_type__="profile:type:3"}', expect.any(Number), expect.any(Number) ); }); it('should query label values', async function () { const mock = getDataApiMock(); const vs = new VariableSupport(mock); const resp = await lastValueFrom( vs.query(getDefaultRequest({ type: 'labelValue', labelName: 'foo', profileTypeId: 'profile:type:3', refId: 'A' })) ); expect(resp.data).toEqual([{ text: 'val1' }, { text: 'val2' }, { text: 'val3' }]); expect(mock.getLabelValues).toHaveBeenCalledWith( '{__profile_type__="profile:type:3"}', 'foo', expect.any(Number), expect.any(Number) ); }); }); function getDefaultRequest( query: VariableQuery = { type: 'profileType', refId: 'A' } ): DataQueryRequest<VariableQuery> { return { targets: [query], interval: '1s', intervalMs: 1000, range: getDefaultTimeRange(), scopedVars: {}, timezone: 'utc', app: CoreApp.Unknown, requestId: '1', startTime: 0, }; } function getDataApiMock(): DataAPI { const profiles: ProfileTypeMessage[] = [ { id: 'profile:type:1', label: 'profile type 1' }, { id: 'profile:type:2', label: 'profile type 2' }, { id: 'profile:type:3', label: 'profile type 3' }, ]; const getProfileTypes = jest.fn().mockResolvedValueOnce(profiles); const getLabelValues = jest.fn().mockResolvedValueOnce(['val1', 'val2', 'val3']); const getLabelNames = jest.fn().mockResolvedValueOnce(['foo', 'bar', 'baz']); return { getProfileTypes, getLabelNames, getLabelValues, }; }
.
Edit
..
Edit
.eslintignore
Edit
CHANGELOG.md
Edit
ConfigEditor.tsx
Edit
QueryEditor
Edit
README.md
Edit
VariableQueryEditor.test.tsx
Edit
VariableQueryEditor.tsx
Edit
VariableSupport.test.ts
Edit
VariableSupport.ts
Edit
dataquery.cue
Edit
dataquery.gen.ts
Edit
datasource.test.ts
Edit
datasource.ts
Edit
dist
Edit
img
Edit
jest-setup.js
Edit
jest.config.js
Edit
mocks.ts
Edit
module.ts
Edit
package.json
Edit
plugin.json
Edit
project.json
Edit
pyroscopeql
Edit
tsconfig.json
Edit
types.ts
Edit
utils.test.ts
Edit
utils.ts
Edit
webpack.config.ts
Edit