This is an automated email from the ASF dual-hosted git repository.
cgarcia pushed a commit to branch feature/merlot
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git
The following commit(s) were added to refs/heads/feature/merlot by this push:
new ce4e866 Serialization is not working correctly.
ce4e866 is described below
commit ce4e8664a61eec28c56480876f5ebeb57ad30b3c
Author: César García <[email protected]>
AuthorDate: Tue Apr 7 09:32:50 2026 -0400
Serialization is not working correctly.
---
.../org.apache.plc4x.merlot.archiver/pom.xml | 10 ++---
.../random_data.pbraw | Bin 252 -> 242 bytes
.../plc4x/merlot/archiver/api/MerlotHtc.java | 20 +++++++--
.../archiver/core/MerlotPBRawSerializer.java | 13 ++++--
.../merlot/archiver/core/MerlotPayloadMapping.java | 4 ++
.../impl/MerlotDataBrowserRTGetDataPVImpl.java | 48 ++++++++++++++++++---
.../merlot/archiver/impl/MerlotHtcIoTDBImpl.java | 8 ++++
.../merlot/archiver/impl/MerlotHtcRTImpl.java | 8 ++++
8 files changed, 94 insertions(+), 17 deletions(-)
diff --git a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/pom.xml
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/pom.xml
index a797d13..3441e75 100644
--- a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/pom.xml
+++ b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/pom.xml
@@ -208,11 +208,6 @@
<artifactId>org.apache.karaf.shell.core</artifactId>
<version>4.4.10</version>
</dependency>
- <dependency>
- <groupId>org.apache.plc4x.merlot.api</groupId>
- <artifactId>org.apache.plc4x.merlot.api</artifactId>
- <version>0.13.0-SNAPSHOT</version>
- </dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
@@ -242,5 +237,10 @@
<version>1.3.0</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.plc4x.merlot.api</groupId>
+ <artifactId>org.apache.plc4x.merlot.api</artifactId>
+ <version>0.13.0-SNAPSHOT</version>
+ </dependency>
</dependencies>
</project>
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/random_data.pbraw
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/random_data.pbraw
index 294b85d..9c72317 100644
Binary files
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/random_data.pbraw and
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/random_data.pbraw differ
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/api/MerlotHtc.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/api/MerlotHtc.java
index 3c52460..2de9eab 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/api/MerlotHtc.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/api/MerlotHtc.java
@@ -49,19 +49,19 @@ public interface MerlotHtc {
* @param strPV
* @param maxRate
*/
- void addPV(String strPV, Double maxRate);
+ public void addPV(String strPV, Double maxRate);
/*
* Removes a tag from the historian. Intended for use only from
* the command line.
* @param strPV
*/
- void removePV(String strPV);
+ public void removePV(String strPV);
/*
* A set of tags currently being processed by the historian.
*/
- Set<String> getPVs();
+ public Set<String> getPVs();
/*
* It returns the values stored in the historian as pairs of
@@ -73,6 +73,18 @@ public interface MerlotHtc {
* @param to
* @return A List of Pair
*/
- List<VType> getPVs(String strPV, String init, String end);
+ public List<VType> getPVs(String strPV, String init, String end);
+
+ /*
+ * It returns the values stored in the historian as pairs of
+ * LocalDateTime and VType (value) pairs, for subsequent processing
+ * according to the format required by the client application—for example,
+ * PBRAW, JSON, or XML.
+ * @param strPV
+ * @param from
+ * @param to
+ * @return numbert ov PV in date range.
+ */
+ public int countPVs(String strPV, String init, String end);
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPBRawSerializer.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPBRawSerializer.java
index 9e0139d..b608511 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPBRawSerializer.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPBRawSerializer.java
@@ -18,10 +18,12 @@ package org.apache.plc4x.merlot.archiver.core;
import org.apache.plc4x.merlot.api.PB.EPICSEvent;
import org.epics.vtype.VType;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.time.ZoneOffset;
import java.util.List;
+import org.epics.vtype.VDouble;
+
/**
* Clase utilitaria para la generación de archivos en formato PBRAW compatibles
@@ -55,8 +57,12 @@ public final class MerlotPBRawSerializer {
EPICSEvent.PayloadInfo info = EPICSEvent.PayloadInfo.newBuilder()
.setPvname(pvName)
- .setType(MerlotTypeMapping.fromVType(events.get(0)))
- .setElementCount(1)
+ .setType(EPICSEvent.PayloadType.SCALAR_DOUBLE)
+ .setYear(((VDouble) events.get(0))
+ .getTime()
+ .getTimestamp()
+ .atOffset(ZoneOffset.UTC).getYear())
+ .setElementCount(events.size())
.build();
info.writeDelimitedTo(out);
@@ -83,6 +89,7 @@ public final class MerlotPBRawSerializer {
if (bytes != null) {
writeVarint32(out, bytes.length);
out.write(bytes);
+ out.write(0x0A);
}
}
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPayloadMapping.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPayloadMapping.java
index 6d0b852..768d770 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPayloadMapping.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/core/MerlotPayloadMapping.java
@@ -78,6 +78,10 @@ public enum MerlotPayloadMapping {
this.vTypeClass = vTypeClass;
}
+ public PayloadType getPayloadType() {
+ return protoType;
+ }
+
/**
* Punto de entrada principal para crear un evento serializable a partir
de un VType.
*/
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotDataBrowserRTGetDataPVImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotDataBrowserRTGetDataPVImpl.java
index cf4ea65..a5973c0 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotDataBrowserRTGetDataPVImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotDataBrowserRTGetDataPVImpl.java
@@ -16,16 +16,21 @@
*/
package org.apache.plc4x.merlot.archiver.impl;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+import io.netty.buffer.Unpooled;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.PrintWriter;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.plc4x.merlot.archiver.api.MerlotHtc;
-import org.apache.plc4x.merlot.archiver.core.MerlotDecanterManagedService;
import org.apache.plc4x.merlot.archiver.core.MerlotPBRawSerializer;
import org.epics.vtype.VType;
import org.slf4j.Logger;
@@ -33,6 +38,15 @@ import org.slf4j.LoggerFactory;
public class MerlotDataBrowserRTGetDataPVImpl extends HttpServlet {
private static final Logger LOGGER =
LoggerFactory.getLogger(MerlotDataBrowserRTGetDataPVImpl.class);
+
+ private final Pattern opti_pattern =
Pattern.compile("optimized_11520\\(([^)]+)\\)");
+ private final Pattern ncount_pattern =
Pattern.compile("ncount\\(([^)]+)\\)");
+ private final Pattern count_pattern =
Pattern.compile("count_3600\\(([^)]+)\\)");
+
+ private Matcher opti_matcher = null;
+ private Matcher ncount_matcher = null;
+ private Matcher count_matcher = null;
+
private final MerlotHtc mhtc;
public MerlotDataBrowserRTGetDataPVImpl(MerlotHtc mhtc) {
@@ -47,11 +61,30 @@ public class MerlotDataBrowserRTGetDataPVImpl extends
HttpServlet {
LOGGER.info("Inicio Servlet.");
if ((null == from) || (null == to)) return;
if ((null == pvs) || (pvs.length == 0)) return;
+
LOGGER.info(pvs[0] + " : " + from + " : " + to);
+
for (String pv:pvs){
- PBRawResponse(pv, from, to, resp.getOutputStream());
+ opti_matcher = opti_pattern.matcher(pv);
+ ncount_matcher = ncount_pattern.matcher(pv);
+ count_matcher = count_pattern.matcher(pv);
+
+ if (opti_matcher.matches()) {
+ LOGGER.info("optimized_11520(pv) not supported.");
+ } else if (ncount_matcher.matches()) {
+ String strpv = ncount_matcher.group(1);
+ int countpv = mhtc.countPVs(strpv, from, to);
+ LOGGER.info("Number of events: " + countpv);
+ resp.getWriter().print(countpv);
+ resp.getWriter().close();
+ } else if (count_matcher.matches()) {
+ LOGGER.info("count_3600(pv) not supported.");
+ } else {
+ PBRawResponse(pv, from, to, resp.getOutputStream());
+ resp.getOutputStream().close();
+ }
}
- resp.getOutputStream().close();
+
}
/*
@@ -60,7 +93,12 @@ public class MerlotDataBrowserRTGetDataPVImpl extends
HttpServlet {
private void PBRawResponse(String pv, String init, String end,
OutputStream out) {
try {
List<VType> values = mhtc.getPVs(pv, init, end);
- MerlotPBRawSerializer.serializeToPBRaw(values, pv, out);
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ MerlotPBRawSerializer.serializeToPBRaw(values, pv, bout);
+ ByteBuf buf = Unpooled.wrappedBuffer(bout.toByteArray());
+ System.out.println(ByteBufUtil.prettyHexDump(buf));
+ out.write(bout.toByteArray());
+
} catch (Exception ex){
LOGGER.error(ex.getLocalizedMessage());
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcIoTDBImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcIoTDBImpl.java
index 8b34897..590c1c3 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcIoTDBImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcIoTDBImpl.java
@@ -109,5 +109,13 @@ public class MerlotHtcIoTDBImpl implements MerlotHtc {
public List<VType> getPVs(String strPV, String init, String end) {
return null;
}
+
+ @Override
+ public int countPVs(String strPV, String init, String end) {
+ return 0;
+ }
+
+
+
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcRTImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcRTImpl.java
index 6ad4817..aadba4f 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcRTImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.archiver/src/main/java/org/apache/plc4x/merlot/archiver/impl/MerlotHtcRTImpl.java
@@ -145,4 +145,12 @@ public class MerlotHtcRTImpl implements MerlotHtc {
.collect(Collectors.toList());
}
+ @Override
+ public int countPVs(String strPV, String init, String end) {
+ List<VType> pvs = getPVs(strPV, init, end);
+ return (null == pvs)?0:pvs.size();
+ }
+
+
+
}