Skip to content

Commit 69d0be7

Browse files
committed
feat: 监控trace datasource插件开发
# Reviewed, transaction id: 25520
1 parent 62504c8 commit 69d0be7

File tree

5 files changed

+49
-68
lines changed

5 files changed

+49
-68
lines changed

src/trace/src/components/QueryEditor.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { css } from '@emotion/css';
2-
import type { QueryEditorProps, SelectableValue } from '@grafana/data';
2+
import { type QueryEditorProps, type SelectableValue } from '@grafana/data';
33
import {
44
FileDropzone,
55
HorizontalGroup,
@@ -18,6 +18,7 @@ import type TraceDatasource from '../datasource';
1818
import type { TraceQuery, JaegerQueryType } from '../types';
1919
import { SearchForm } from './SearchForm';
2020
import { t } from 'common/utils/utils';
21+
import { getTemplateSrv } from '@grafana/runtime';
2122

2223
type Props = QueryEditorProps<TraceDatasource, TraceQuery>;
2324

@@ -38,9 +39,12 @@ export function QueryEditor({ datasource, query, onChange, onRunQuery }: Props)
3839
value: item.app_name,
3940
label: item.app_name,
4041
})) || [];
41-
// if (query.app_name && getTemplateSrv().containsTemplate(query.app_name)) {
42-
// appList.push(toOption(query.app_name));
43-
// }
42+
if (query.app_name && getTemplateSrv().containsTemplate(query.app_name)) {
43+
appList.push({
44+
value: query.app_name,
45+
label: query.app_name,
46+
});
47+
}
4448
setAppOptions(appList);
4549
if (data.length && !query.app_name) {
4650
onChange({

src/trace/src/datasource.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
2-
32
import {
43
type DataQueryRequest,
54
type DataQueryResponse,
@@ -54,7 +53,12 @@ export default class TraceDatasource extends DataSourceApi<TraceQuery, QueryOpti
5453
? 2
5554
: window?.grafanaBootData?.user.orgName;
5655
}
57-
56+
/**
57+
*
58+
* @param appName 应用名
59+
* @param field 字段名
60+
* @description 获取字段选项列表
61+
*/
5862
async loadOptions<
5963
T extends {
6064
text: string;
@@ -83,7 +87,11 @@ export default class TraceDatasource extends DataSourceApi<TraceQuery, QueryOpti
8387
),
8488
);
8589
}
86-
90+
/**
91+
*
92+
* @param query 查询参数
93+
* @description 是否符合查询条件
94+
*/
8795
isSearchFormValid(query: TraceQuery): boolean {
8896
return !!query.app_name;
8997
}
@@ -102,8 +110,8 @@ export default class TraceDatasource extends DataSourceApi<TraceQuery, QueryOpti
102110
if (target.queryType !== 'search' && target.query) {
103111
return this.request(QueryUrl.get_trace_detail, {
104112
data: {
105-
app_name: target.app_name,
106-
trace_id: target.query,
113+
app_name: getTemplateSrv().replace(target.app_name, options.scopedVars),
114+
trace_id: getTemplateSrv().replace(target.query, options.scopedVars),
107115
...this.getTimeRange(),
108116
bk_biz_id: this.bizId,
109117
},
@@ -134,15 +142,10 @@ export default class TraceDatasource extends DataSourceApi<TraceQuery, QueryOpti
134142
]);
135143
// remove empty properties
136144
let traceQuery = pickBy(traceInterpolated, identity);
137-
138-
// if (traceQuery.spans === ALL_OPERATIONS_KEY) {
139-
// traceQuery = omit(traceQuery, 'spans');
140-
// }
141-
142145
return this.request(QueryUrl.list_trace, {
143146
data: {
144147
...this.getTimeRange(),
145-
app_name: target.app_name,
148+
app_name: getTemplateSrv().replace(target.app_name, options.scopedVars),
146149
bk_biz_id: this.bizId,
147150
filters: [
148151
...convertTagsFilters({

src/trace/src/responseTransform.ts

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ import {
33
type DataSourceInstanceSettings,
44
FieldType,
55
MutableDataFrame,
6-
type TraceLog,
76
type TraceSpanRow,
87
} from '@grafana/data';
9-
// import { transformTraceData } from 'grafana/app/features/explore/TraceView/components';
10-
11-
import transformTraceData from './transform-trace-data';
12-
import type { JaegerResponse, Span, TraceProcess, TraceResponse } from './types';
8+
import type { JaegerResponse, Span, TraceLog, TraceProcess, TraceResponse } from './types';
139

1410
export function createTraceFrame(data: TraceResponse): DataFrame {
1511
const spans = data.spans.map(s => toSpanRow(s, data.processes));
@@ -37,7 +33,7 @@ export function createTraceFrame(data: TraceResponse): DataFrame {
3733
},
3834
});
3935

40-
for (const span of spans) {
36+
for (const span of spans || []) {
4137
frame.add(span);
4238
}
4339

@@ -78,25 +74,26 @@ export function createTableFrame(
7874
config: {
7975
unit: 'string',
8076
displayNameFromDS: 'Trace ID',
81-
links: [
82-
{
83-
title: 'Trace: ${__value.raw}',
84-
url: '',
85-
internal: {
86-
datasourceUid: instanceSettings.uid,
87-
datasourceName: instanceSettings.name,
88-
query: {
89-
query: '${__value.raw}',
90-
app_name: appName,
91-
},
92-
},
93-
},
94-
],
77+
// links: [
78+
// {
79+
// title: 'Trace: ${__value.raw}',
80+
// url: '',
81+
// internal: {
82+
// datasourceUid: instanceSettings.uid,
83+
// datasourceName: instanceSettings.name,
84+
// query: {
85+
// query: '${__value.raw}',
86+
// app_name: appName,
87+
// },
88+
// },
89+
// },
90+
// ],
9591
},
9692
},
9793
{ name: 'trace_name', type: FieldType.string, config: { displayNameFromDS: 'Trace name' } },
9894
{ name: 'start_time', type: FieldType.time, config: { displayNameFromDS: 'Start time' } },
9995
{ name: 'trace_duration', type: FieldType.number, config: { displayNameFromDS: 'Duration', unit: 'µs' } },
96+
{ name: 'app_name', type: FieldType.string, config: { displayNameFromDS: 'App Name' } },
10097
],
10198
meta: {
10299
preferredVisualisationType: 'table',
@@ -108,25 +105,13 @@ export function createTableFrame(
108105
for (const trace of traceData) {
109106
frame.add({
110107
...trace,
111-
start_time: trace.start_time / 1000,
108+
start_time: trace.start_time! / 1000,
109+
app_name: appName,
112110
});
113111
}
114-
112+
console.info(frame, '==============');
115113
return frame;
116114
}
117-
function transformToTraceData(data: TraceResponse) {
118-
const traceData = transformTraceData(data);
119-
if (!traceData) {
120-
return;
121-
}
122-
123-
return {
124-
traceID: traceData.traceID,
125-
startTime: traceData.startTime / 1000,
126-
duration: traceData.duration,
127-
traceName: traceData.traceName,
128-
};
129-
}
130115

131116
export function transformToJaeger(data: MutableDataFrame): JaegerResponse {
132117
const traceResponse: TraceResponse = {

src/trace/src/transform-trace-data.tsx

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,3 @@
1-
// Copyright (c) 2017 Uber Technologies, Inc.
2-
//
3-
// Licensed under the Apache License, Version 2.0 (the "License");
4-
// you may not use this file except in compliance with the License.
5-
// You may obtain a copy of the License at
6-
//
7-
// http://www.apache.org/licenses/LICENSE-2.0
8-
//
9-
// Unless required by applicable law or agreed to in writing, software
10-
// distributed under the License is distributed on an "AS IS" BASIS,
11-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12-
// See the License for the specific language governing permissions and
13-
// limitations under the License.
14-
151
import { isEqual as _isEqual } from 'lodash';
162

173
import type { TraceKeyValuePair, TraceSpan, Trace, TraceResponse, TraceProcess } from './types/trace';

src/trace/src/types.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,14 @@ export type Span = {
4444
};
4545

4646
export type TraceResponse = {
47-
trace_id: string;
48-
start_time: number;
49-
trace_duration: number;
50-
trace_name: string;
47+
trace_id?: string;
48+
start_time?: number;
49+
trace_duration?: number;
50+
trace_name?: string;
5151
warnings?: null | string[];
52+
processes: Record<string, TraceProcess>;
53+
spans: Span[];
54+
traceID: string;
5255
};
5356

5457
export type TraceQuery = {

0 commit comments

Comments
 (0)