in fbpcs/emp_games/attribution/main.cpp [22:150]
int main(int argc, char* argv[]) {
fbpcs::performance_tools::CostEstimation cost =
fbpcs::performance_tools::CostEstimation("attribution");
cost.start();
XLOG(INFO) << "Start of main, printing network stats: "
<< measurement::private_attribution::exec("cat /proc/net/dev");
folly::init(&argc, &argv);
gflags::ParseCommandLineFlags(&argc, &argv, true);
fbpcf::AwsSdk::aquire();
OMNISCIENT_ONLY_XLOG(INFO, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
OMNISCIENT_ONLY_XLOG(INFO, "~~~~~~~~~OMNISCIENT LOGGING ENABLED~~~~~~~~~");
OMNISCIENT_ONLY_XLOG(INFO, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
XLOGF(INFO, "Party: {}", FLAGS_party);
XLOGF(INFO, "Server IP: {}", FLAGS_server_ip);
XLOGF(INFO, "Port: {}", FLAGS_port);
XLOGF(INFO, "Base input path: {}", FLAGS_input_base_path);
XLOGF(INFO, "Base output path: {}", FLAGS_output_base_path);
try {
auto [inputFilenames, outputFilenames] =
measurement::private_attribution::getIOFilenames(
FLAGS_num_files,
FLAGS_input_base_path,
FLAGS_output_base_path,
FLAGS_file_start_index);
int16_t concurrency = static_cast<int16_t>(FLAGS_concurrency);
// construct attributionApps according to the number of files and
// FLAGS_concurrency
if (FLAGS_party == static_cast<int>(fbpcf::Party::Alice)) {
XLOGF(INFO, "Attribution Rules: {}", FLAGS_attribution_rules);
XLOGF(INFO, "Aggregators: {}", FLAGS_aggregators);
XLOG(INFO)
<< "Starting attribution as Publisher, will wait for Partner...";
if (FLAGS_use_xor_encryption) {
measurement::private_attribution::startAttributionAppsForShardedFiles<
measurement::private_attribution::PUBLISHER,
fbpcf::Visibility::Xor>(
inputFilenames,
outputFilenames,
concurrency,
FLAGS_server_ip,
FLAGS_port,
FLAGS_attribution_rules,
FLAGS_aggregators);
} else {
measurement::private_attribution::startAttributionAppsForShardedFiles<
measurement::private_attribution::PUBLISHER,
fbpcf::Visibility::Public>(
inputFilenames,
outputFilenames,
concurrency,
FLAGS_server_ip,
FLAGS_port,
FLAGS_attribution_rules,
FLAGS_aggregators);
}
} else if (FLAGS_party == static_cast<int>(fbpcf::Party::Bob)) {
XLOG(INFO)
<< "Starting attribution as Partner, will wait for Publisher...";
if (FLAGS_use_xor_encryption) {
measurement::private_attribution::startAttributionAppsForShardedFiles<
measurement::private_attribution::PARTNER,
fbpcf::Visibility::Xor>(
inputFilenames,
outputFilenames,
concurrency,
FLAGS_server_ip,
FLAGS_port,
FLAGS_attribution_rules,
FLAGS_aggregators);
} else {
measurement::private_attribution::startAttributionAppsForShardedFiles<
measurement::private_attribution::PARTNER,
fbpcf::Visibility::Public>(
inputFilenames,
outputFilenames,
concurrency,
FLAGS_server_ip,
FLAGS_port,
FLAGS_attribution_rules,
FLAGS_aggregators);
}
} else {
XLOGF(FATAL, "Invalid Party: {}", FLAGS_party);
}
XLOG(INFO) << "*********************";
XLOGF(
INFO,
"Attribution is completed. Please find the metrics at {}",
FLAGS_output_base_path);
} catch (const std::exception& e) {
XLOG(ERR) << "Error: Exception caught in Attribution run.\n \t error msg: "
<< e.what() << "\n \t input directory: " << FLAGS_input_base_path;
XLOG(INFO) << "End of main, printing network stats: "
<< measurement::private_attribution::exec("cat /proc/net/dev");
std::exit(1);
}
cost.end();
XLOG(INFO, cost.getEstimatedCostString());
if (FLAGS_run_name != "" &&
FLAGS_party == static_cast<int>(fbpcf::Party::Alice)) {
XLOGF(
INFO,
"{}",
cost.writeToS3(
FLAGS_run_name,
cost.getEstimatedCostDynamic(
FLAGS_run_name, FLAGS_attribution_rules, FLAGS_aggregators)));
}
// TODO: remove the following and use cost.getNetworkBytes() or
// cost.getEstimatedCost() instead
XLOG(INFO) << "End of main, printing network stats: "
<< measurement::private_attribution::exec("cat /proc/net/dev");
return 0;
}