diff --git a/public/app/features/inspector/InspectDataTab.tsx b/public/app/features/inspector/InspectDataTab.tsx
index d270b75511c..88e93c13984 100644
--- a/public/app/features/inspector/InspectDataTab.tsx
+++ b/public/app/features/inspector/InspectDataTab.tsx
@@ -9,7 +9,6 @@ import {
CSVConfig,
DataFrame,
DataTransformerID,
- MutableDataFrame,
SelectableValue,
TimeZone,
transformDataFrame,
@@ -22,13 +21,10 @@ import { t, Trans } from 'app/core/internationalization';
import { dataFrameToLogsModel } from 'app/core/logsModel';
import { PanelModel } from 'app/features/dashboard/state';
import { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';
-import { transformToJaeger } from 'app/plugins/datasource/jaeger/responseTransform';
-import { transformToOTLP } from 'app/plugins/datasource/tempo/resultTransformer';
-import { transformToZipkin } from 'app/plugins/datasource/zipkin/utils/transforms';
import { InspectDataOptions } from './InspectDataOptions';
import { getPanelInspectorStyles } from './styles';
-import { downloadAsJson, downloadDataFrameAsCsv, downloadLogsModelAsTxt } from './utils/download';
+import { downloadAsJson, downloadDataFrameAsCsv, downloadLogsModelAsTxt, downloadTraceAsJson } from './utils/download';
interface Props {
isLoading: boolean;
@@ -124,28 +120,7 @@ export class InspectDataTab extends PureComponent
{
if (df.meta?.preferredVisualisationType !== 'trace') {
continue;
}
- let traceFormat = 'otlp';
-
- switch (df.meta?.custom?.traceFormat) {
- case 'jaeger': {
- let res = transformToJaeger(new MutableDataFrame(df));
- downloadAsJson(res, (panel ? panel.getDisplayTitle() : 'Explore') + '-traces');
- traceFormat = 'jaeger';
- break;
- }
- case 'zipkin': {
- let res = transformToZipkin(new MutableDataFrame(df));
- downloadAsJson(res, (panel ? panel.getDisplayTitle() : 'Explore') + '-traces');
- traceFormat = 'zipkin';
- break;
- }
- case 'otlp':
- default: {
- let res = transformToOTLP(new MutableDataFrame(df));
- downloadAsJson(res, (panel ? panel.getDisplayTitle() : 'Explore') + '-traces');
- break;
- }
- }
+ const traceFormat = downloadTraceAsJson(df, (panel ? panel.getDisplayTitle() : 'Explore') + '-traces');
reportInteraction('grafana_traces_download_traces_clicked', {
app,
diff --git a/public/app/features/inspector/utils/download.ts b/public/app/features/inspector/utils/download.ts
index 5338ade3caa..23f76673b95 100644
--- a/public/app/features/inspector/utils/download.ts
+++ b/public/app/features/inspector/utils/download.ts
@@ -7,9 +7,14 @@ import {
dateTimeFormat,
dateTimeFormatISO,
LogsModel,
+ MutableDataFrame,
toCSV,
} from '@grafana/data';
+import { transformToJaeger } from '../../../plugins/datasource/jaeger/responseTransform';
+import { transformToOTLP } from '../../../plugins/datasource/tempo/resultTransformer';
+import { transformToZipkin } from '../../../plugins/datasource/zipkin/utils/transforms';
+
/**
* Downloads a DataFrame as a TXT file.
*
@@ -77,3 +82,34 @@ export function downloadAsJson(json: unknown, title: string) {
const fileName = `${title}-${dateTimeFormat(new Date())}.json`;
saveAs(blob, fileName);
}
+
+/**
+ * Downloads a trace as json, based on the DataFrame format or OTLP as a default
+ *
+ * @param {DataFrame} frame
+ * @param {string} title
+ */
+export function downloadTraceAsJson(frame: DataFrame, title: string): string {
+ let traceFormat = 'otlp';
+ switch (frame.meta?.custom?.traceFormat) {
+ case 'jaeger': {
+ let res = transformToJaeger(new MutableDataFrame(frame));
+ downloadAsJson(res, title);
+ traceFormat = 'jaeger';
+ break;
+ }
+ case 'zipkin': {
+ let res = transformToZipkin(new MutableDataFrame(frame));
+ downloadAsJson(res, title);
+ traceFormat = 'zipkin';
+ break;
+ }
+ case 'otlp':
+ default: {
+ let res = transformToOTLP(new MutableDataFrame(frame));
+ downloadAsJson(res, title);
+ break;
+ }
+ }
+ return traceFormat;
+}