datatamer_parser.cpp
Go to the documentation of this file.
1 
2 #include "datatamer_parser.h"
3 #include "data_tamer_parser/data_tamer_parser.hpp"
5 
6 using namespace PJ;
7 
9 {
10 public:
11  MsgParserImpl(const std::string& topic_name, const std::string& type_name,
12  const std::string& schema, PJ::PlotDataMapRef& data)
13  : MessageParser(topic_name, data), topic_name_(topic_name)
14  {
15  schema_ = DataTamerParser::BuilSchemaFromText(schema);
16  }
17 
18  bool parseMessage(const MessageRef serialized_msg, double& timestamp) override
19  {
20  auto callback = [this, timestamp](const std::string& series_name,
21  const DataTamerParser::VarNumber& var) {
22  auto name = fmt::format("{}/{}", topic_name_, series_name);
23  auto& plot_data = _plot_data.getOrCreateNumeric(name);
24 
25  double value = std::visit([](auto&& v) { return static_cast<double>(v); }, var);
26 
27  plot_data.pushBack({ timestamp, value });
28  };
29 
30  DataTamerParser::SnapshotView snapshot;
31  snapshot.schema_hash = schema_.hash;
32 
33  DataTamerParser::BufferSpan msg_buffer = { serialized_msg.data(),
34  serialized_msg.size() };
35 
36  const uint32_t mask_size = DataTamerParser::Deserialize<uint32_t>(msg_buffer);
37  snapshot.active_mask.data = msg_buffer.data;
38  snapshot.active_mask.size = mask_size;
39  msg_buffer.trimFront(mask_size);
40 
41  const uint32_t payload_size = DataTamerParser::Deserialize<uint32_t>(msg_buffer);
42  snapshot.payload.data = msg_buffer.data;
43  snapshot.payload.size = payload_size;
44 
45  DataTamerParser::ParseSnapshot(schema_, snapshot, callback);
46  return true;
47  }
48 
49 private:
50  DataTamerParser::Schema schema_;
51 
52  struct TimeSeries
53  {
54  std::string name;
55  DataTamerParser::BasicType type;
56  PlotData* plot_data = nullptr;
57  };
58 
59  std::string topic_name_;
60  std::vector<TimeSeries> timeseries_;
61 };
62 
63 MessageParserPtr ParserDataTamer::createParser(const std::string& topic_name,
64  const std::string& type_name,
65  const std::string& schema,
67 {
68  return std::make_shared<MsgParserImpl>(topic_name, type_name, schema, data);
69 }
PJ::TimeseriesBase
Definition: timeseries.h:16
PJ::MessageParserPtr
std::shared_ptr< MessageParser > MessageParserPtr
Definition: messageparser_base.h:136
MsgParserImpl::timeseries_
std::vector< TimeSeries > timeseries_
Definition: datatamer_parser.cpp:60
PJ::MessageRef::data
const uint8_t * data() const
Definition: messageparser_base.h:51
start_test_publisher.timestamp
timestamp
Definition: start_test_publisher.py:32
MsgParserImpl::TimeSeries::name
std::string name
Definition: datatamer_parser.cpp:54
MsgParserImpl::MsgParserImpl
MsgParserImpl(const std::string &topic_name, const std::string &type_name, const std::string &schema, PJ::PlotDataMapRef &data)
Definition: datatamer_parser.cpp:11
PJ::MessageParser
The MessageParser is the base class used to parse a message with a specific encoding+schema.
Definition: messageparser_base.h:75
format
auto format(const text_style &ts, const S &format_str, const Args &... args) -> std::basic_string< Char >
Definition: color.h:543
MsgParserImpl::parseMessage
bool parseMessage(const MessageRef serialized_msg, double &timestamp) override
Definition: datatamer_parser.cpp:18
MsgParserImpl
Definition: datatamer_parser.cpp:8
MsgParserImpl::schema_
DataTamerParser::Schema schema_
Definition: datatamer_parser.cpp:50
PJ::MessageRef
Definition: messageparser_base.h:28
core.h
MsgParserImpl::TimeSeries::type
DataTamerParser::BasicType type
Definition: datatamer_parser.cpp:55
PJ
Definition: dataloader_base.h:16
mqtt_test.data
dictionary data
Definition: mqtt_test.py:22
PJ::MessageRef::size
size_t size() const
Definition: messageparser_base.h:61
ParserDataTamer::createParser
PJ::MessageParserPtr createParser(const std::string &topic_name, const std::string &type_name, const std::string &schema, PJ::PlotDataMapRef &data) override
Definition: datatamer_parser.cpp:63
PJ::PlotDataMapRef
Definition: plotdata.h:34
MsgParserImpl::TimeSeries
Definition: datatamer_parser.cpp:52
datatamer_parser.h
MsgParserImpl::topic_name_
std::string topic_name_
Definition: datatamer_parser.cpp:59


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon May 26 2025 02:22:36