Files
skyline-console/src/components/PrometheusChart/utils/index.js
xusongfu 7c8f9f7e26 feat: Support for custom prometheus requests
1. Support custom prometheus request function
2. Support convert request url in prometheus request

Change-Id: I451282990346c187283dae1cf64e3cb4b9782cb6
2022-10-13 10:29:00 +08:00

62 lines
1.9 KiB
JavaScript

import { get, clone, isArray } from 'lodash';
import DataSet from '@antv/data-set';
import { baseReturnFunc, fetchPrometheus, getRequestUrl } from './utils';
export function createFetchPrometheusClient(createParams, fetchPrometheusFunc) {
const { requestType, metricKey, convertUrl } = createParams;
const queryParams = get(METRICDICT, metricKey);
return async function ({ params = {}, currentRange, interval }) {
const promises = queryParams.url.map((u, idx) => {
// get aggregate data in order
const finalFormatFunc =
(queryParams.finalFormatFunc || [])[idx] || baseReturnFunc;
// get base params in order
const baseParams = (queryParams.baseParams || [])[idx] || {};
const formattedUrl = getRequestUrl(
u,
params,
finalFormatFunc,
baseParams
);
const finalUrl = convertUrl ? convertUrl(formattedUrl) : formattedUrl;
return fetchPrometheusFunc
? fetchPrometheusFunc(finalUrl, requestType, currentRange, interval)
: fetchPrometheus(finalUrl, requestType, currentRange, interval);
});
return Promise.all(promises);
};
}
export function createDataHandler(params) {
const { formatDataFn, typeKey, deviceKey, modifyKeys } = params;
return (data) => {
const formattedData = formatDataFn(data, typeKey, deviceKey, modifyKeys);
const retData = clone(formattedData);
let device = '';
let devices = [];
if (
isArray(formattedData) &&
formattedData.length !== 0 &&
formattedData[0].device
) {
const dv = new DataSet()
.createView()
.source(formattedData)
.transform({
type: 'partition',
groupBy: ['device'],
});
devices = Object.keys(dv.rows).map((d) => d.slice(1, d.length));
device = devices[0];
}
return {
retData,
device,
devices,
};
};
}