Skip to content

Commit

Permalink
passing time filters (grafana#64086)
Browse files Browse the repository at this point in the history
* passing time filters

* add settings

* Cleanup and merge fixes

---------

Co-authored-by: André Pereira <adrapereira@gmail.com>
  • Loading branch information
2 people authored and chauchausoup committed Sep 15, 2023
1 parent 09a6974 commit f84a353
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import { TraceToLogsSection } from 'app/core/components/TraceToLogs/TraceToLogsS
import { TraceToMetricsSection } from 'app/core/components/TraceToMetrics/TraceToMetricsSettings';
import { SpanBarSection } from 'app/features/explore/TraceView/components/settings/SpanBarSettings';

import { TraceIdTimeParams } from './TraceIdTimeParams';

export type Props = DataSourcePluginOptionsEditorProps;

export const ConfigEditor = ({ options, onOptionsChange }: Props) => {
Expand Down Expand Up @@ -54,6 +56,8 @@ export const ConfigEditor = ({ options, onOptionsChange }: Props) => {
<NodeGraphSection options={options} onOptionsChange={onOptionsChange} />
<Divider hideLine={true} />
<SpanBarSection options={options} onOptionsChange={onOptionsChange} />
<Divider hideLine={true} />
<TraceIdTimeParams options={options} onOptionsChange={onOptionsChange} />
</ConfigSection>
</div>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { css } from '@emotion/css';
import React from 'react';

import {
DataSourceJsonData,
DataSourcePluginOptionsEditorProps,
updateDatasourcePluginJsonDataOption,
} from '@grafana/data';
import { InlineField, InlineFieldRow, InlineSwitch } from '@grafana/ui';

export interface TraceIdTimeParamsOptions {
enabled?: boolean;
}

export interface TraceIdTimeParamsData extends DataSourceJsonData {
traceIdTimeParams?: TraceIdTimeParamsOptions;
}

interface Props extends DataSourcePluginOptionsEditorProps<TraceIdTimeParamsData> {}

export function TraceIdTimeParams({ options, onOptionsChange }: Props) {
return (
<div className={styles.container}>
<h3 className="page-heading">Query Trace by ID with Time Params</h3>
<InlineFieldRow className={styles.row}>
<InlineField
tooltip="pass time parameters when querying trace by ID"
label="Enable Time Parameters"
labelWidth={26}
>
<InlineSwitch
id="enableTraceIdTimeParams"
value={options.jsonData.traceIdTimeParams?.enabled}
onChange={(event: React.SyntheticEvent<HTMLInputElement>) =>
updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'traceIdTimeParams', {
...options.jsonData.traceIdTimeParams,
enabled: event.currentTarget.checked,
})
}
/>
</InlineField>
</InlineFieldRow>
</div>
);
}

const styles = {
container: css`
label: container;
width: 100%;
`,
row: css`
label: row;
align-items: baseline;
`,
};
15 changes: 12 additions & 3 deletions public/app/plugins/datasource/jaeger/datasource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,21 @@ import { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv';
import { SpanBarOptions } from 'app/features/explore/TraceView/components';

import { ALL_OPERATIONS_KEY } from './components/SearchForm';
import { TraceIdTimeParamsOptions } from './configuration/TraceIdTimeParams';
import { createGraphFrames } from './graphTransform';
import { createTableFrame, createTraceFrame } from './responseTransform';
import { JaegerQuery } from './types';
import { convertTagsLogfmt } from './util';

export interface JaegerJsonData extends DataSourceJsonData {
nodeGraph?: NodeGraphOptions;
traceIdTimeParams?: TraceIdTimeParamsOptions;
}

export class JaegerDatasource extends DataSourceApi<JaegerQuery, JaegerJsonData> {
uploadedJson: string | ArrayBuffer | null = null;
nodeGraph?: NodeGraphOptions;
traceIdTimeParams?: TraceIdTimeParamsOptions;
spanBar?: SpanBarOptions;
constructor(
private instanceSettings: DataSourceInstanceSettings<JaegerJsonData>,
Expand All @@ -41,6 +44,7 @@ export class JaegerDatasource extends DataSourceApi<JaegerQuery, JaegerJsonData>
) {
super(instanceSettings);
this.nodeGraph = instanceSettings.jsonData.nodeGraph;
this.traceIdTimeParams = instanceSettings.jsonData.traceIdTimeParams;
}

async metadataRequest(url: string, params?: Record<string, any>): Promise<any> {
Expand All @@ -65,10 +69,15 @@ export class JaegerDatasource extends DataSourceApi<JaegerQuery, JaegerJsonData>
return of({ error: { message: 'You must select a service.' }, data: [] });
}

let { start, end } = this.getTimeRange();

if (target.queryType !== 'search' && target.query) {
return this._request(
`/api/traces/${encodeURIComponent(this.templateSrv.replace(target.query, options.scopedVars))}`
).pipe(
let url = `/api/traces/${encodeURIComponent(this.templateSrv.replace(target.query, options.scopedVars))}`;
if (this.traceIdTimeParams) {
url += `?start=${start}&end=${end}`;
}

return this._request(url).pipe(
map((response) => {
const traceData = response?.data?.data?.[0];
if (!traceData) {
Expand Down
2 changes: 1 addition & 1 deletion public/app/plugins/datasource/jaeger/module.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { DataSourcePlugin } from '@grafana/data';

import CheatSheet from './CheatSheet';
import { ConfigEditor } from './components/ConfigEditor';
import { QueryEditor } from './components/QueryEditor';
import { ConfigEditor } from './configuration/ConfigEditor';
import { JaegerDatasource } from './datasource';

export const plugin = new DataSourcePlugin(JaegerDatasource)
Expand Down

0 comments on commit f84a353

Please sign in to comment.