import { SelectableValue, dataFrameFromJSON } from '@grafana/data'; import { getBackendSrv } from '@grafana/runtime'; interface ChannelInfo { channel: string; minute_rate: number; // data: unknown; // the last payload } interface ManagedChannels { channels: ChannelInfo[]; } interface ChannelSelectionInfo { channels: Array>; channelFields: Record>>; } export async function getManagedChannelInfo(): Promise { return getBackendSrv() .get('api/live/list') .then((v) => { const channelInfo = v.channels ?? []; const channelFields: Record>> = {}; const channels: Array> = channelInfo.map((c) => { if (c.data) { const distinctFields = new Set(); const frame = dataFrameFromJSON(c.data); for (const f of frame.fields) { distinctFields.add(f.name); } channelFields[c.channel] = Array.from(distinctFields).map((n) => ({ value: n, label: n, })); } return { value: c.channel, label: c.channel + ' [' + c.minute_rate + ' msg/min]', }; }); return { channelFields, channels }; }); }