34#include <rapidjson/document.h>
35#include <rapidjson/prettywriter.h>
36#include "boost/asio.hpp"
37#include <TBufferJSON.h>
38#include <boost/algorithm/string/join.hpp>
39#include <arrow/table.h>
41#include "boost/archive/iterators/base64_from_binary.hpp"
42#include "boost/archive/iterators/transform_width.hpp"
43#include "boost/predef/other/endian.h"
45using namespace rapidjson;
49#if BOOST_ENDIAN_BIG_BYTE
50static const auto endianness =
"BIG";
51#elif BOOST_ENDIAN_LITTLE_BYTE
52static const auto endianness =
"LITTLE";
54static const auto endianness =
"UNKNOWN";
67 using namespace boost::archive::iterators;
68 using EncodingIt = base64_from_binary<transform_width<const char*, 6, 8>>;
75 Document::AllocatorType& alloc)
78 message.AddMember(
"payloadEndianness",
Value(endianness, alloc), alloc);
83 std::string origin = header->
dataOrigin.
as<std::string>();
87 message.AddMember(
"origin",
Value(origin.c_str(), alloc), alloc);
88 message.AddMember(
"description",
Value(description.c_str(), alloc), alloc);
95 message.AddMember(
"payloadSerialization",
Value(method.c_str(), alloc), alloc);
114 Document::AllocatorType& alloc =
message.GetAllocator();
115 message.AddMember(
"sender",
Value(sender.c_str(), alloc), alloc);
118 for (; baseHeader !=
nullptr; baseHeader = baseHeader->
next()) {
120 const auto* header = header::get<header::DataHeader*>(baseHeader->
data());
124 const auto* header = header::get<DataProcessingHeader*>(baseHeader->
data());
127 const auto* header = header::get<OutputObjHeader*>(baseHeader->
data());
134std::vector<DIMessage>
serializeO2Messages(
const std::vector<DataRef>& refs,
const std::string& deviceName)
136 std::vector<DIMessage> messages{};
138 for (
auto&
ref : refs) {
141 Writer<StringBuffer> writer(
buffer);
145 messages.emplace_back(
DIMessage{DIMessage::Header::Type::DATA, std::string{
buffer.GetString(),
buffer.GetSize()}});
o2::monitoring::tags::Value Value
GLuint GLsizei const GLchar * message
std::vector< DIMessage > serializeO2Messages(const std::vector< DataRef > &refs, const std::string &deviceName)
void addBasicOutputObjHeaderInfo(Document &message, const OutputObjHeader *header, Document::AllocatorType &alloc)
size_t base64PaddingSize(uint64_t dataSize)
void addBasicDataHeaderInfo(Document &message, const header::DataHeader *header, Document::AllocatorType &alloc)
std::string encode64(const char *data, uint64_t size)
void addBasicDataProcessingHeaderInfo(Document &message, const DataProcessingHeader *header, Document::AllocatorType &alloc)
void addPayload(Document &message, uint64_t payloadSize, const char *payload, Document::AllocatorType &alloc)
void buildDocument(Document &message, std::string sender, const DataRef &ref)