Example #1
0
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());
  }
}
Example #2
0
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);
  }
}
Example #4
0
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();
}
Example #5
0
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);
}
Example #6
0
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);
  }
}
Example #8
0
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);
}
Example #9
0
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");
}
Example #10
0
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");
}
Example #11
0
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();
}
Example #12
0
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");
}
Example #13
0
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");
}
Example #14
0
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");
}
Example #15
0
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");
}
Example #16
0
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");
}
Example #17
0
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();
}