Fix: log pipelines: only one of the trace parser fields is required (#3857)

* chore: update trace parser form field placeholders

* fix: trace parser form: only one of the fields is required
This commit is contained in:
Raj Kamal Singh 2023-11-01 11:00:31 +05:30 committed by GitHub
parent 9c21449239
commit 27869f03bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 47 additions and 9 deletions

View File

@ -37,9 +37,9 @@
"processor_field_placeholder": "Field", "processor_field_placeholder": "Field",
"processor_value_placeholder": "Value", "processor_value_placeholder": "Value",
"processor_description_placeholder": "example rule: %{word:first}", "processor_description_placeholder": "example rule: %{word:first}",
"processor_trace_id_placeholder": "Trace Id Parce From", "processor_trace_id_placeholder": "Parse Trace ID from",
"processor_span_id_placeholder": "Span id Parse From", "processor_span_id_placeholder": "Parse Span ID from",
"processor_trace_flags_placeholder": "Trace flags parse from", "processor_trace_flags_placeholder": "Parse Trace flags from",
"processor_from_placeholder": "From", "processor_from_placeholder": "From",
"processor_to_placeholder": "To" "processor_to_placeholder": "To"
} }

View File

@ -22,6 +22,7 @@ function NameInput({ fieldData }: NameInputProps): JSX.Element {
name={fieldData.name} name={fieldData.name}
initialValue={fieldData.initialValue} initialValue={fieldData.initialValue}
rules={fieldData.rules ? fieldData.rules : formValidationRules} rules={fieldData.rules ? fieldData.rules : formValidationRules}
dependencies={fieldData.dependencies || []}
> >
<Input placeholder={t(fieldData.placeholder)} /> <Input placeholder={t(fieldData.placeholder)} />
</Form.Item> </Form.Item>

View File

@ -1,3 +1,6 @@
import { Rule, RuleRender } from 'antd/es/form';
import { NamePath } from 'antd/es/form/interface';
type ProcessorType = { type ProcessorType = {
key: string; key: string;
value: string; value: string;
@ -8,11 +11,11 @@ type ProcessorType = {
export const processorTypes: Array<ProcessorType> = [ export const processorTypes: Array<ProcessorType> = [
{ key: 'grok_parser', value: 'grok_parser', label: 'Grok' }, { key: 'grok_parser', value: 'grok_parser', label: 'Grok' },
{ key: 'json_parser', value: 'json_parser', label: 'Json Parser' },
{ key: 'regex_parser', value: 'regex_parser', label: 'Regex' }, { key: 'regex_parser', value: 'regex_parser', label: 'Regex' },
{ key: 'json_parser', value: 'json_parser', label: 'Json Parser' },
{ key: 'trace_parser', value: 'trace_parser', label: 'Trace Parser' },
{ key: 'add', value: 'add', label: 'Add' }, { key: 'add', value: 'add', label: 'Add' },
{ key: 'remove', value: 'remove', label: 'Remove' }, { key: 'remove', value: 'remove', label: 'Remove' },
{ key: 'trace_parser', value: 'trace_parser', label: 'Trace Parser' },
// { key: 'retain', value: 'retain', label: 'Retain' }, @Chintan - Commented as per Nitya's suggestion // { key: 'retain', value: 'retain', label: 'Retain' }, @Chintan - Commented as per Nitya's suggestion
{ key: 'move', value: 'move', label: 'Move' }, { key: 'move', value: 'move', label: 'Move' },
{ key: 'copy', value: 'copy', label: 'Copy' }, { key: 'copy', value: 'copy', label: 'Copy' },
@ -24,11 +27,30 @@ export type ProcessorFormField = {
id: number; id: number;
fieldName: string; fieldName: string;
placeholder: string; placeholder: string;
name: string | Array<string>; name: string | NamePath;
rules?: Array<{ [key: string]: boolean }>; rules?: Array<Rule>;
initialValue?: string; initialValue?: string;
dependencies?: Array<string | NamePath>;
}; };
const traceParserFieldValidator: RuleRender = (form) => ({
validator: (): Promise<void> => {
const parseFromValues = [
['trace_id', 'parse_from'],
['span_id', 'parse_from'],
['trace_flags', 'parse_from'],
].map((np) => form.getFieldValue(np));
if (!parseFromValues.some((v) => v?.length > 0)) {
return Promise.reject(
new Error('At least one of the trace parser fields must be specified.'),
);
}
return Promise.resolve();
},
});
const commonFields = [ const commonFields = [
{ {
id: 3, id: 3,
@ -155,18 +177,33 @@ export const processorFields: { [key: string]: Array<ProcessorFormField> } = {
fieldName: 'Parse Trace Id From', fieldName: 'Parse Trace Id From',
placeholder: 'processor_trace_id_placeholder', placeholder: 'processor_trace_id_placeholder',
name: ['trace_id', 'parse_from'], name: ['trace_id', 'parse_from'],
rules: [traceParserFieldValidator],
dependencies: [
['span_id', 'parse_from'],
['trace_flags', 'parse_from'],
],
}, },
{ {
id: 3, id: 3,
fieldName: 'Parse Span Id From', fieldName: 'Parse Span Id From',
placeholder: 'processor_span_id_placeholder', placeholder: 'processor_span_id_placeholder',
name: ['span_id', 'parse_from'], name: ['span_id', 'parse_from'],
rules: [traceParserFieldValidator],
dependencies: [
['trace_id', 'parse_from'],
['trace_flags', 'parse_from'],
],
}, },
{ {
id: 4, id: 4,
fieldName: 'Parse Trace flags From', fieldName: 'Parse Trace flags From',
placeholder: 'processor_trace_flags_placeholder', placeholder: 'processor_trace_flags_placeholder',
name: ['trace_flags', 'parse_from'], name: ['trace_flags', 'parse_from'],
rules: [traceParserFieldValidator],
dependencies: [
['trace_id', 'parse_from'],
['span_id', 'parse_from'],
],
}, },
], ],
retain: [ retain: [

View File

@ -4,6 +4,6 @@ import NameInput from './FormFields/NameInput';
export const renderProcessorForm = ( export const renderProcessorForm = (
processorType: string, processorType: string,
): Array<JSX.Element> => ): Array<JSX.Element> =>
processorFields[processorType]?.map((fieldName: ProcessorFormField) => ( processorFields[processorType]?.map((fieldData: ProcessorFormField) => (
<NameInput key={fieldName.id} fieldData={fieldName} /> <NameInput key={fieldData.id} fieldData={fieldData} />
)); ));