This is an automated email from the ASF dual-hosted git repository. cdutz pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 97e0bac4b2ce292706c188c9173590ab2c66147f Author: Stefan Herrmann <[email protected]> AuthorDate: Thu Aug 15 09:50:05 2019 +0200 initial setup for logstash plugin --- .../.gradle/4.8/fileHashes/fileHashes.bin | Bin 134733 -> 134733 bytes .../.gradle/4.8/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes plc4j/integrations/logstash-plugin/build.gradle | 1 + .../java/org/apache/plc4x/logstash/Plc4xInput.java | 56 +++++++++++++-------- 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.bin b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.bin index abbbace..70a17ca 100644 Binary files a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.bin and b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.bin differ diff --git a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.lock b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.lock index 640e180..b9db67a 100644 Binary files a/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.lock and b/plc4j/integrations/logstash-plugin/.gradle/4.8/fileHashes/fileHashes.lock differ diff --git a/plc4j/integrations/logstash-plugin/build.gradle b/plc4j/integrations/logstash-plugin/build.gradle index aad839a..8305e95 100644 --- a/plc4j/integrations/logstash-plugin/build.gradle +++ b/plc4j/integrations/logstash-plugin/build.gradle @@ -52,6 +52,7 @@ dependencies { compile 'org.apache.commons:commons-lang3:3.7' compile 'org.apache.logging.log4j:log4j-api:2.9.1' compile 'org.apache.logging.log4j:log4j-core:2.9.1' + compile 'org.apache.plc4x:plc4j-api:0.4.0' compile fileTree(dir: LOGSTASH_CORE_PATH, include: "**/logstash-core-?.?.?.jar") testCompile 'junit:junit:4.12' diff --git a/plc4j/integrations/logstash-plugin/src/main/java/org/apache/plc4x/logstash/Plc4xInput.java b/plc4j/integrations/logstash-plugin/src/main/java/org/apache/plc4x/logstash/Plc4xInput.java index 67adf14..fb77670 100644 --- a/plc4j/integrations/logstash-plugin/src/main/java/org/apache/plc4x/logstash/Plc4xInput.java +++ b/plc4j/integrations/logstash-plugin/src/main/java/org/apache/plc4x/logstash/Plc4xInput.java @@ -6,11 +6,17 @@ import co.elastic.logstash.api.Input; import co.elastic.logstash.api.LogstashPlugin; import co.elastic.logstash.api.PluginConfigSpec; import org.apache.commons.lang3.StringUtils; +import org.apache.plc4x.java.PlcDriverManager; +import org.apache.plc4x.java.api.PlcConnection; +import org.apache.plc4x.java.api.exceptions.PlcConnectionException; +import org.apache.plc4x.java.api.messages.PlcReadRequest; +import org.apache.plc4x.java.api.messages.PlcReadResponse; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Map; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.CountDownLatch; import java.util.function.Consumer; @@ -18,24 +24,23 @@ import java.util.function.Consumer; @LogstashPlugin(name="plc4x_input") public class Plc4xInput implements Input { - public static final PluginConfigSpec<Long> EVENT_COUNT_CONFIG = - PluginConfigSpec.numSetting("count", 3); + public static final PluginConfigSpec<Map<String, Object>> FIELDS_CONFIG = + PluginConfigSpec.hashSetting("fields"); - public static final PluginConfigSpec<String> PREFIX_CONFIG = - PluginConfigSpec.stringSetting("prefix", "message"); + public static final PluginConfigSpec<String> CONNECTION_STRING_CONFIG = + PluginConfigSpec.requiredStringSetting("connection_string"); + private final String connectionString; + private final Map<String, Object> fields; private String id; - private long count; - private String prefix; - private final CountDownLatch done = new CountDownLatch(1); - private volatile boolean stopped; + private PlcConnection plcConnection; // all plugins must provide a constructor that accepts id, Configuration, and Context public Plc4xInput(String id, Configuration config, Context context) { // constructors should validate configuration options this.id = id; - count = config.get(EVENT_COUNT_CONFIG); - prefix = config.get(PREFIX_CONFIG); + fields = config.get(FIELDS_CONFIG); + connectionString = config.get(CONNECTION_STRING_CONFIG); } @Override @@ -49,17 +54,28 @@ public class Plc4xInput implements Input { // events should loop indefinitely until they receive a stop request. Inputs that produce // a finite sequence of events should loop until that sequence is exhausted or until they // receive a stop request, whichever comes first. + // Establish a connection to the plc using the url provided as first argument + try (PlcConnection plcConnection = new PlcDriverManager().getConnection(connectionString)) { - int eventCount = 0; - try { - while (!stopped && eventCount < count) { - eventCount++; - consumer.accept(Collections.singletonMap("message", - prefix + " " + StringUtils.center(eventCount + " of " + count, 20))); + // Check if this connection support reading of data. + if (!plcConnection.getMetadata().canRead()) { + System.err.println("This connection doesn't support reading."); + return; } - } finally { - stopped = true; - done.countDown(); + + // Create a new read request: + PlcReadRequest.Builder builder = plcConnection.readRequestBuilder(); + for (String key: fields.keySet() + ) { + builder.addItem(key, fields.get(key).toString()); + } + PlcReadRequest readRequest = builder.build(); + + PlcReadResponse syncResponse = readRequest.execute().get(); + } catch (PlcConnectionException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); } } @@ -76,7 +92,7 @@ public class Plc4xInput implements Input { @Override public Collection<PluginConfigSpec<?>> configSchema() { // should return a list of all configuration options for this plugin - return Arrays.asList(EVENT_COUNT_CONFIG, PREFIX_CONFIG); + return Arrays.asList(FIELDS_CONFIG, CONNECTION_STRING_CONFIG); } @Override
