跳至主要内容

自定义数据源

如果要查询自定义资源 API,可以注册一个运行时数据源。这样做有很多好处,因为您可以利用 SceneQueryRunner

SceneQueryRunner 为您完成了许多复杂的工作,例如

  • 等待变量完成(如果您的查询依赖于它们)
  • 当时间范围更改时重新执行变量
  • 确定变量在非活动状态下是否已更改

class MyCustomDS extends RuntimeDataSource {
query(request: DataQueryRequest<DataQuery>): Promise<DataQueryResponse> | Observable<DataQueryResponse> {
return Promise.resolve({
state: LoadingState.Done,
data: [
{
fields: [{ name: 'Values', type: FieldType.number, values: [1, 2, 3], config: {} }],
length: 3,
},
],
});
}

testDatasource(): Promise<TestDataSourceResponse> {
return Promise.resolve({ status: 'success', message: 'OK' });
}
}

// Important to specify a unique pluginId and uid for your data source that is unlikely to confict with any other scene app plugin.
sceneUtils.registerRuntimeDataSource({ dataSource: new MyCustomDS('my-custom-ds', 'my-custom-ds-uid') });

现在,您可以在 SceneQueryRunner 查询中使用相同 uid 使用此数据源。如果要在同一个 SceneQueryRunner 中混合查询标准数据源和自定义数据源,请使用混合数据源。

示例

  $data: new SceneQueryRunner({
datasource: { uid: '-- Mixed --' },
queries: [
{ refId: 'A', datasource: { uid: 'my-prometheus' }, expr: '<my prometheus query>' },
{ refId: 'B', datasource: { uid: 'my-custom-ds-uid' }, expr: '<my prometheus query>' },
]
})