Skip to content

Commit b8f24c5

Browse files
committed
Reimplemented LogStash::String setting in Java
1 parent 5826c6f commit b8f24c5

File tree

4 files changed

+46
-13
lines changed

4 files changed

+46
-13
lines changed

logstash-core/lib/logstash/environment.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ module Environment
5050
Setting::Boolean.new("config.reload.automatic", false),
5151
Setting::TimeValue.new("config.reload.interval", "3s"), # in seconds
5252
Setting::Boolean.new("config.support_escapes", false),
53-
Setting::String.new("config.field_reference.escape_style", "none", true, %w(none percent ampersand)),
53+
Setting::StringSetting.new("config.field_reference.escape_style", "none", true, %w(none percent ampersand)),
5454
Setting::Boolean.new("metric.collect", true),
5555
Setting::String.new("pipeline.id", "main"),
5656
Setting::Boolean.new("pipeline.system", false),
@@ -66,30 +66,30 @@ module Environment
6666
Setting.new("path.plugins", Array, []),
6767
Setting::NullableString.new("interactive", nil, false),
6868
Setting::Boolean.new("config.debug", false),
69-
Setting::String.new("log.level", "info", true, ["fatal", "error", "warn", "debug", "info", "trace"]),
69+
Setting::StringSetting.new("log.level", "info", true, ["fatal", "error", "warn", "debug", "info", "trace"]),
7070
Setting::Boolean.new("version", false),
7171
Setting::Boolean.new("help", false),
7272
Setting::Boolean.new("enable-local-plugin-development", false),
73-
Setting::String.new("log.format", "plain", true, ["json", "plain"]),
73+
Setting::StringSetting.new("log.format", "plain", true, ["json", "plain"]),
7474
Setting::Boolean.new("log.format.json.fix_duplicate_message_fields", true),
7575
Setting::Boolean.new("api.enabled", true),
7676
Setting::String.new("api.http.host", "127.0.0.1"),
7777
Setting::PortRange.new("api.http.port", 9600..9700),
7878
Setting::String.new("api.environment", "production"),
79-
Setting::String.new("api.auth.type", "none", true, %w(none basic)),
79+
Setting::StringSetting.new("api.auth.type", "none", true, %w(none basic)),
8080
Setting::String.new("api.auth.basic.username", nil, false).nullable,
8181
Setting::Password.new("api.auth.basic.password", nil, false).nullable,
82-
Setting::String.new("api.auth.basic.password_policy.mode", "WARN", true, %w[WARN ERROR]),
82+
Setting::StringSetting.new("api.auth.basic.password_policy.mode", "WARN", true, %w[WARN ERROR]),
8383
Setting::Numeric.new("api.auth.basic.password_policy.length.minimum", 8),
84-
Setting::String.new("api.auth.basic.password_policy.include.upper", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
85-
Setting::String.new("api.auth.basic.password_policy.include.lower", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
86-
Setting::String.new("api.auth.basic.password_policy.include.digit", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
87-
Setting::String.new("api.auth.basic.password_policy.include.symbol", "OPTIONAL", true, %w[REQUIRED OPTIONAL]),
84+
Setting::StringSetting.new("api.auth.basic.password_policy.include.upper", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
85+
Setting::StringSetting.new("api.auth.basic.password_policy.include.lower", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
86+
Setting::StringSetting.new("api.auth.basic.password_policy.include.digit", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
87+
Setting::StringSetting.new("api.auth.basic.password_policy.include.symbol", "OPTIONAL", true, %w[REQUIRED OPTIONAL]),
8888
Setting::Boolean.new("api.ssl.enabled", false),
8989
Setting::ExistingFilePath.new("api.ssl.keystore.path", nil, false).nullable,
9090
Setting::Password.new("api.ssl.keystore.password", nil, false).nullable,
9191
Setting::StringArray.new("api.ssl.supported_protocols", nil, true, %w[TLSv1 TLSv1.1 TLSv1.2 TLSv1.3]),
92-
Setting::String.new("queue.type", "memory", true, ["persisted", "memory"]),
92+
Setting::StringSetting.new("queue.type", "memory", true, ["persisted", "memory"]),
9393
Setting::Boolean.new("queue.drain", false),
9494
Setting::Bytes.new("queue.page_capacity", "64mb"),
9595
Setting::Bytes.new("queue.max_bytes", "1024mb"),
@@ -101,7 +101,7 @@ module Environment
101101
Setting::Boolean.new("dead_letter_queue.enable", false),
102102
Setting::Bytes.new("dead_letter_queue.max_bytes", "1024mb"),
103103
Setting::Numeric.new("dead_letter_queue.flush_interval", 5000),
104-
Setting::String.new("dead_letter_queue.storage_policy", "drop_newer", true, ["drop_newer", "drop_older"]),
104+
Setting::StringSetting.new("dead_letter_queue.storage_policy", "drop_newer", true, ["drop_newer", "drop_older"]),
105105
Setting::NullableString.new("dead_letter_queue.retain.age"), # example 5d
106106
Setting::TimeValue.new("slowlog.threshold.warn", "-1"),
107107
Setting::TimeValue.new("slowlog.threshold.info", "-1"),
@@ -110,7 +110,7 @@ module Environment
110110
Setting::String.new("keystore.classname", "org.logstash.secret.store.backend.JavaKeyStore"),
111111
Setting::String.new("keystore.file", ::File.join(::File.join(LogStash::Environment::LOGSTASH_HOME, "config"), "logstash.keystore"), false), # will be populated on
112112
Setting::NullableString.new("monitoring.cluster_uuid"),
113-
Setting::String.new("pipeline.buffer.type", "direct", true, ["direct", "heap"])
113+
Setting::StringSetting.new("pipeline.buffer.type", "direct", true, ["direct", "heap"])
114114
# post_process
115115
].each {|setting| SETTINGS.register(setting) }
116116

logstash-core/lib/logstash/settings.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,9 @@ def validate(value)
524524
end
525525
end
526526

527+
528+
java_import org.logstash.settings.StringSetting
529+
527530
class String < Setting
528531
def initialize(name, default = nil, strict = true, possible_strings = [])
529532
@possible_strings = possible_strings

logstash-core/src/main/java/org/logstash/settings/BaseSetting.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public void reset() {
166166
}
167167

168168
public void validateValue() {
169-
validate(this.value);
169+
validate(this.value());
170170
}
171171

172172
public T getDefault() {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.logstash.settings;
2+
3+
import java.util.Collections;
4+
import java.util.List;
5+
6+
public class StringSetting extends BaseSetting<String> {
7+
8+
private List<String> possibleStrings = Collections.emptyList();
9+
10+
public StringSetting(String name, String defaultValue, boolean strict, List<String> possibleStrings) {
11+
super(name, strict, noValidator()); // this super doesn't call validate either if it's strict
12+
this.possibleStrings = possibleStrings;
13+
this.defaultValue = defaultValue;
14+
15+
if (strict) {
16+
staticValidate(defaultValue, possibleStrings, name);
17+
}
18+
}
19+
20+
@Override
21+
public void validate(String input) throws IllegalArgumentException {
22+
staticValidate(input, possibleStrings, this.getName());
23+
}
24+
25+
private static void staticValidate(String input, List<String> possibleStrings, String name) {
26+
if (!possibleStrings.isEmpty() && !possibleStrings.contains(input)) {
27+
throw new IllegalArgumentException(String.format("Invalid value \"%s: %s\" . Options are: %s", name, input, possibleStrings));
28+
}
29+
}
30+
}

0 commit comments

Comments
 (0)