in src/datasource.ts [107:199]
timestamp: Number(time) / 1000000,
fields: attributeArray,
});
}
}
return traceLogs;
}
function transformSpan(df: DataFrame): TraceSpanRow[] {
let traceSpanRows: TraceSpanRow[] = [];
const fields = df.fields;
const result = new Map(fields.map((key) => [key.name, key.values]));
for (let i = 0; i < df.length; i++) {
const tsd = {
traceID: result.get('traceID')?.get(i),
spanID: result.get('spanID')?.get(i),
parentSpanID: result.get('parentSpanID')?.get(i),
operationName: result.get('operationName')?.get(i),
serviceName: result.get('serviceName')?.get(i),
serviceTags: transServiceTags(result, i),
startTime: result.get('startTime')?.get(i),
duration: result.get('duration')?.get(i),
tags: transTags(result, i),
errorIconColor: result.get('statusCode')?.get(i) === 'ERROR' ? '#f00' : '',
logs: transLogs(result, i),
};
traceSpanRows.push(tsd);
}
return traceSpanRows;
}
export function transformResponse(df: DataFrame): DataFrame {
const spanRows = transformSpan(df);
const frame = new MutableDataFrame({
fields: [
{ name: 'traceID', type: FieldType.string },
{ name: 'spanID', type: FieldType.string },
{ name: 'parentSpanID', type: FieldType.string },
{ name: 'operationName', type: FieldType.string },
{ name: 'serviceName', type: FieldType.string },
{ name: 'serviceTags', type: FieldType.other },
{ name: 'startTime', type: FieldType.number },
{ name: 'duration', type: FieldType.number },
{ name: 'logs', type: FieldType.other },
{ name: 'tags', type: FieldType.other },
{ name: 'errorIconColor', type: FieldType.string },
],
meta: {
preferredVisualisationType: 'trace',
},
});
for (const span of spanRows) {
frame.add(span);
}
return frame;
}
function responseToDataQueryResponse(response: DataQueryResponse): DataQueryResponse {
return {
data: [transformResponse(response.data[0])],
};
}
export function mapToTextValue(result: any) {
if (Array.isArray(result) && result.length === 2) {
return _.map(result[0], (d, i) => {
return { text: d, value: result[1][i] };
});
}
return _.map(result[0], (d, i) => {
if (d && d.text && d.value) {
return { text: d.text, value: d.value };
} else if (_.isObject(d)) {
return { text: d, value: i };
}
return { text: d, value: d };
});
}
export function mapToTextValueNew(frames: any): MetricFindValue[] {
if(!frames || !Array.isArray(frames) || frames?.length === 0 ) {
return []
}
const TextValues: MetricFindValue[] = [];
for(const frame of frames) {
if(frame.data?.values?.length > 0) {
const fieldsValues = frame.data.values
// 如果只有两列 默认第一列为text
if(fieldsValues.length === 2) {