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();        
+    }
+    
+    
+
 }

Reply via email to