static void DATABASE_serialize(benchmark::State& state) { auto qd = getExampleQueryData(state.range(0), state.range(1)); while (state.KeepRunning()) { auto doc = JSON::newArray(); serializeQueryData(qd, {}, doc, doc.doc()); } }
Status serializeDiffResults(const DiffResults& d, pt::ptree& tree) { pt::ptree added; auto status = serializeQueryData(d.added, added); if (!status.ok()) { return status; } tree.add_child("added", added); pt::ptree removed; status = serializeQueryData(d.removed, removed); if (!status.ok()) { return status; } tree.add_child("removed", removed); return Status(0, "OK"); }
static void DATABASE_serialize(benchmark::State& state) { auto qd = getExampleQueryData(state.range_x(), state.range_y()); while (state.KeepRunning()) { boost::property_tree::ptree tree; serializeQueryData(qd, tree); } }
Status serializeQueryLogItemAsEvents(const QueryLogItem& item, JSON& doc) { auto temp_doc = JSON::newObject(); if (!item.results.added.empty() || !item.results.removed.empty()) { auto status = serializeDiffResults( item.results, item.columns, temp_doc, temp_doc.doc()); if (!status.ok()) { return status; } } else if (!item.snapshot_results.empty()) { auto arr = doc.getArray(); auto status = serializeQueryData(item.snapshot_results, {}, temp_doc, arr); if (!status.ok()) { return status; } temp_doc.add("snapshot", arr); } else { // This error case may also be represented in serializeQueryLogItem. return Status(1, "No differential or snapshot results"); } for (auto& action : temp_doc.doc().GetObject()) { for (auto& row : action.value.GetArray()) { auto obj = doc.getObject(); serializeEvent(item, row, doc, obj); doc.addCopy("action", action.name.GetString(), obj); doc.push(obj); } } return Status(); }
TEST_F(ResultsTests, test_serialize_query_data) { auto results = getSerializedQueryData(); pt::ptree tree; auto s = serializeQueryData(results.second, tree); EXPECT_TRUE(s.ok()); EXPECT_EQ(s.toString(), "OK"); EXPECT_EQ(results.first, tree); }
static void DATABASE_serialize_column_order(benchmark::State& state) { auto qd = getExampleQueryData(state.range(0), state.range(1)); auto cn = getExampleColumnNames(state.range(0)); while (state.KeepRunning()) { auto doc = JSON::newArray(); serializeQueryData(qd, cn, doc, doc.doc()); } }
static void DATABASE_serialize_column_order(benchmark::State& state) { auto qd = getExampleQueryData(state.range_x(), state.range_y()); auto cn = getExampleColumnNames(state.range_x()); while (state.KeepRunning()) { boost::property_tree::ptree tree; serializeQueryData(qd, cn, tree); } }
Status serializeQueryDataJSON(const QueryData& q, std::string& json) { auto doc = JSON::newArray(); ColumnNames cols; auto status = serializeQueryData(q, cols, doc, doc.doc()); if (!status.ok()) { return status; } return doc.toString(json); }
Status serializeDiffResults(const DiffResults& d, pt::ptree& tree) { try { pt::ptree added; auto added_status = serializeQueryData(d.added, added); if (!added_status.ok()) { return added_status; } tree.add_child("added", added); pt::ptree removed; auto removed_status = serializeQueryData(d.removed, removed); if (!removed_status.ok()) { return removed_status; } tree.add_child("removed", removed); } catch (const std::exception& e) { return Status(1, e.what()); } return Status(0, "OK"); }
Status serializeDiffResults(const DiffResults& d, pt::ptree& tree) { // Serialize and add "removed" first. // A property tree is somewhat ordered, this provides a loose contract to // the logger plugins and their aggregations, allowing them to parse chunked // lines. Note that the chunking is opaque to the database functions. pt::ptree removed; auto status = serializeQueryData(d.removed, removed); if (!status.ok()) { return status; } tree.add_child("removed", removed); pt::ptree added; status = serializeQueryData(d.added, added); if (!status.ok()) { return status; } tree.add_child("added", added); return Status(0, "OK"); }
Status serializeDiffResults(const DiffResults& d, const ColumnNames& cols, JSON& doc, rj::Document& obj) { // Serialize and add "removed" first. // A property tree is somewhat ordered, this provides a loose contract to // the logger plugins and their aggregations, allowing them to parse chunked // lines. Note that the chunking is opaque to the database functions. auto removed_arr = doc.getArray(); auto status = serializeQueryData(d.removed, cols, doc, removed_arr); if (!status.ok()) { return status; } doc.add("removed", removed_arr, obj); auto added_arr = doc.getArray(); status = serializeQueryData(d.added, cols, doc, added_arr); if (!status.ok()) { return status; } doc.add("added", added_arr, obj); return Status(); }
Status serializeQueryDataJSON(const QueryData& q, std::string& json) { pt::ptree tree; auto status = serializeQueryData(q, tree); if (!status.ok()) { return status; } std::ostringstream output; try { pt::write_json(output, tree, false); } catch (const pt::json_parser::json_parser_error& e) { // The content could not be represented as JSON. return Status(1, e.what()); } json = output.str(); return Status(0, "OK"); }
Status serializeDistributedQueryResult(const DistributedQueryResult& r, pt::ptree& tree) { pt::ptree request; auto s = serializeDistributedQueryRequest(r.request, request); if (!s.ok()) { return s; } pt::ptree results; s = serializeQueryData(r.results, r.columns, results); if (!s.ok()) { return s; } tree.add_child("request", request); tree.add_child("results", results); return Status(0, "OK"); }
Status serializeQueryLogItem(const QueryLogItem& item, pt::ptree& tree) { pt::ptree results_tree; if (item.results.added.size() > 0 || item.results.removed.size() > 0) { auto status = serializeDiffResults(item.results, results_tree); if (!status.ok()) { return status; } tree.add_child("diffResults", results_tree); } else { auto status = serializeQueryData(item.snapshot_results, results_tree); if (!status.ok()) { return status; } tree.add_child("snapshot", results_tree); tree.put<std::string>("action", "snapshot"); } addLegacyFieldsAndDecorations(item, tree); return Status(0, "OK"); }
Status serializeHistoricalQueryResults(const HistoricalQueryResults& r, pt::ptree& tree) { try { pt::ptree mostRecentResults; pt::ptree most_recent_serialized; auto mrr_status = serializeQueryData(r.mostRecentResults.second, most_recent_serialized); if (!mrr_status.ok()) { return mrr_status; } mostRecentResults.add_child( boost::lexical_cast<std::string>(r.mostRecentResults.first), most_recent_serialized); tree.add_child("mostRecentResults", mostRecentResults); } catch (const std::exception& e) { return Status(1, e.what()); } return Status(0, "OK"); }
Status serializeQueryLogItem(const QueryLogItem& i, pt::ptree& tree) { pt::ptree results_tree; if (i.results.added.size() > 0 || i.results.removed.size() > 0) { auto status = serializeDiffResults(i.results, results_tree); if (!status.ok()) { return status; } tree.add_child("diffResults", results_tree); } else { auto status = serializeQueryData(i.snapshot_results, results_tree); if (!status.ok()) { return status; } tree.add_child("snapshot", results_tree); } tree.put<std::string>("name", i.name); tree.put<std::string>("hostIdentifier", i.identifier); tree.put<std::string>("calendarTime", i.calendar_time); tree.put<int>("unixTime", i.time); return Status(0, "OK"); }
Status serializeQueryLogItem(const QueryLogItem& item, JSON& doc) { if (item.results.added.size() > 0 || item.results.removed.size() > 0) { auto obj = doc.getObject(); auto status = serializeDiffResults(item.results, item.columns, doc, obj); if (!status.ok()) { return status; } doc.add("diffResults", obj); } else { auto arr = doc.getArray(); auto status = serializeQueryData(item.snapshot_results, item.columns, doc, arr); if (!status.ok()) { return status; } doc.add("snapshot", arr); doc.addRef("action", "snapshot"); } addLegacyFieldsAndDecorations(item, doc, doc.doc()); return Status(); }