Skip to content

Commit d2778f0

Browse files
moesterheldgally47
andauthored
Add description to input descriptor and configuration form (#23698)
* add description to input descriptor and configuration form * cl * improve UI display of the input info description * handle case description undefined * fix missing instance --------- Co-authored-by: Mohamed OULD HOCINE <[email protected]> Co-authored-by: Mohamed Ould Hocine <[email protected]>
1 parent 65004df commit d2778f0

File tree

9 files changed

+36
-6
lines changed

9 files changed

+36
-6
lines changed

changelog/unreleased/pr-23698.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
type = "f"
2+
message = "Optional description for input types to be shown in the input creation modal."
3+
4+
pulls = ["23698"]

graylog2-server/src/main/java/org/graylog2/plugin/inputs/MessageInput.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,10 @@ public boolean isCloudCompatible() {
482482
public boolean isForwarderCompatible() {
483483
return true;
484484
}
485+
486+
public String getDescription() {
487+
return null;
488+
}
485489
}
486490

487491
@Override

graylog2-server/src/main/java/org/graylog2/rest/models/system/inputs/responses/InputTypeInfo.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.fasterxml.jackson.annotation.JsonCreator;
2121
import com.fasterxml.jackson.annotation.JsonProperty;
2222
import com.google.auto.value.AutoValue;
23+
import jakarta.annotation.Nullable;
2324

2425
import java.util.Map;
2526

@@ -35,6 +36,10 @@ public abstract class InputTypeInfo {
3536
@JsonProperty("name")
3637
public abstract String name();
3738

39+
@JsonProperty("description")
40+
@Nullable
41+
public abstract String description();
42+
3843
@JsonProperty("is_exclusive")
3944
public abstract boolean isExclusive();
4045

@@ -47,9 +52,10 @@ public abstract class InputTypeInfo {
4752
@JsonCreator
4853
public static InputTypeInfo create(@JsonProperty("type") String type,
4954
@JsonProperty("name") String name,
55+
@Nullable @JsonProperty("description") String description,
5056
@JsonProperty("is_exclusive") boolean isExclusive,
5157
@JsonProperty("requested_configuration") Map<String, Map<String, Object>> requestedConfiguration,
5258
@JsonProperty("link_to_docs") String linkToDocs) {
53-
return new AutoValue_InputTypeInfo(type, name, isExclusive, requestedConfiguration, linkToDocs);
59+
return new AutoValue_InputTypeInfo(type, name, description, isExclusive, requestedConfiguration, linkToDocs);
5460
}
5561
}

graylog2-server/src/main/java/org/graylog2/shared/inputs/InputDescription.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public boolean isForwarderCompatible() {
5050
return descriptor.isForwarderCompatible();
5151
}
5252

53+
public String getDescription() {
54+
return descriptor.getDescription();
55+
}
56+
5357
public Map<String, Map<String, Object>> getRequestedConfiguration() {
5458
return config.combinedRequestedConfiguration().asList();
5559
}

graylog2-server/src/main/java/org/graylog2/shared/rest/resources/system/inputs/InputTypesResource.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ public Map<String, InputTypeInfo> all() {
9494
.filter(e -> isPermitted(RestPermissions.INPUT_TYPES_CREATE, e.getKey()))
9595
.collect(Collectors.toMap(Map.Entry::getKey, entry -> {
9696
final InputDescription description = entry.getValue();
97-
return InputTypeInfo.create(entry.getKey(), description.getName(), description.isExclusive(),
98-
description.getRequestedConfiguration(), description.getLinkToDocs());
97+
return InputTypeInfo.create(entry.getKey(), description.getName(), description.getDescription(),
98+
description.isExclusive(), description.getRequestedConfiguration(), description.getLinkToDocs());
9999
}));
100100
}
101101

@@ -116,7 +116,8 @@ public InputTypeInfo info(@ApiParam(name = "inputType", required = true) @PathPa
116116
throwInputTypeNotFound(inputType);
117117
}
118118

119-
return InputTypeInfo.create(inputType, description.getName(), description.isExclusive(), description.getRequestedConfiguration(), description.getLinkToDocs());
119+
return InputTypeInfo.create(inputType, description.getName(), description.getDescription(),
120+
description.isExclusive(), description.getRequestedConfiguration(), description.getLinkToDocs());
120121
}
121122

122123
private static void throwInputTypeNotFound(String inputType) {

graylog2-web-interface/src/components/inputs/CreateInputControl.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import styled from 'styled-components';
2121
import { PluginStore } from 'graylog-web-plugin/plugin';
2222

2323
import { InputsActions } from 'stores/inputs/InputsStore';
24-
import { InputTypesActions } from 'stores/inputs/InputTypesStore';
2524
import type { InputDescription } from 'stores/inputs/InputTypesStore';
25+
import { InputTypesActions } from 'stores/inputs/InputTypesStore';
2626
import { getPathnameWithoutId } from 'util/URLUtils';
2727
import { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';
2828
import useSendTelemetry from 'logic/telemetry/useSendTelemetry';
@@ -150,6 +150,7 @@ const CreateInputControl = () => {
150150
key="configuration-form-input"
151151
setShowModal={setShowConfigurationForm}
152152
configFields={selectedInputDefinition.requested_configuration}
153+
description={selectedInputDefinition.description}
153154
title={
154155
<span>
155156
Launch new <em>{inputTypes[selectedInput] ?? ''}</em> input

graylog2-web-interface/src/components/inputs/InputForm.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@ import * as React from 'react';
1818
import { useEffect, useState, useRef } from 'react';
1919

2020
import { NodeOrGlobalSelect } from 'components/inputs';
21+
import type { ConfigurationField } from 'components/configurationforms';
2122
import { ConfigurationForm } from 'components/configurationforms';
2223
import HideOnCloud from 'util/conditional/HideOnCloud';
2324
import AppConfig from 'util/AppConfig';
2425
import type { Input } from 'components/messageloaders/Types';
25-
import type { ConfigurationField } from 'components/configurationforms';
26+
import { Alert } from 'components/bootstrap';
2627

2728
type FormValues = Input['attributes'];
2829

@@ -40,6 +41,7 @@ type Props = {
4041
values?: FormValues;
4142
setShowModal: (show: boolean) => void;
4243
submitButtonText: string;
44+
description?: string;
4345
};
4446

4547
const InputForm = ({
@@ -49,6 +51,7 @@ const InputForm = ({
4951
titleValue = undefined,
5052
title,
5153
typeName,
54+
description = undefined,
5255
includeTitleField = undefined,
5356
handleSubmit,
5457
values = undefined,
@@ -130,6 +133,11 @@ const InputForm = ({
130133
submitAction={onSubmit}
131134
typeName={typeName}
132135
cancelAction={onCancel}>
136+
{description && (
137+
<Alert bsStyle="info">
138+
{description}
139+
</Alert>
140+
)}
133141
<HideOnCloud>
134142
<NodeOrGlobalSelect onChange={handleChange} global={global} node={node} />
135143
</HideOnCloud>

graylog2-web-interface/src/components/inputs/InputListItem.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ const InputListItem = ({ input, currentNode }: Props) => {
303303
globalValue={input.global}
304304
nodeValue={input.node}
305305
configFields={definition.requested_configuration}
306+
description={definition?.description}
306307
title={`Editing Input ${input.title}`}
307308
titleValue={input.title}
308309
typeName={input.type}

graylog2-web-interface/src/stores/inputs/InputTypesStore.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export type InputTypes = {
4040
export type InputDescription = {
4141
type: string;
4242
name: string;
43+
description: string;
4344
is_exclusive: boolean;
4445
requested_configuration: {
4546
[key: string]: ConfigurationField;

0 commit comments

Comments
 (0)