in e2e-examples/gcs/benchmark/print_result.cc [68:94]
std::vector<PeerValue> GetSortedPeers(
std::vector<RunnerWatcher::Operation>& operations) {
std::unordered_map<std::string, PeerValue> peer_map;
for (size_t i = 0, i_max = operations.size(); i < i_max; i++) {
const auto& op = operations[i];
if (operations[i].status.ok()) {
auto& value = peer_map[op.peer];
value.total_count += 1;
value.total_size += op.bytes;
value.total_time += op.elapsed_time;
value.indexes.push_back(i);
}
}
std::vector<PeerValue> peers;
for (auto& i : peer_map) {
i.second.throughput =
i.second.total_size / absl::ToDoubleSeconds(i.second.total_time);
peers.push_back(std::move(i.second));
peers.back().peer = i.first;
}
// Sorted by throughput in an ascending order
std::sort(peers.begin(), peers.end(),
[](const PeerValue& a, const PeerValue& b) {
return a.throughput < b.throughput;
});
return peers;
}