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

Reply via email to