| 1689 | } |
| 1690 | |
| 1691 | void RuntimeProfile::ToThriftSubclass( |
| 1692 | vector<pair<const string&, const Counter*>>& counter_map_entries, |
| 1693 | TRuntimeProfileNode* out_node) const { |
| 1694 | out_node->counters.reserve(counter_map_entries.size()); |
| 1695 | for (const auto& entry : counter_map_entries) { |
| 1696 | out_node->counters.emplace_back(); |
| 1697 | TCounter& counter = out_node->counters.back(); |
| 1698 | counter.name = entry.first; |
| 1699 | counter.value = entry.second->value(); |
| 1700 | counter.unit = entry.second->unit(); |
| 1701 | } |
| 1702 | |
| 1703 | { |
| 1704 | lock_guard<SpinLock> l(counter_map_lock_); |
| 1705 | if (time_series_counter_map_.size() != 0) { |
| 1706 | out_node->__isset.time_series_counters = true; |
| 1707 | out_node->time_series_counters.reserve(time_series_counter_map_.size()); |
| 1708 | for (const auto& val : time_series_counter_map_) { |
| 1709 | out_node->time_series_counters.emplace_back(); |
| 1710 | val.second->ToThrift(&out_node->time_series_counters.back()); |
| 1711 | } |
| 1712 | } |
| 1713 | } |
| 1714 | |
| 1715 | { |
| 1716 | vector<EventSequence::Event> events; |
| 1717 | lock_guard<SpinLock> l(event_sequence_lock_); |
| 1718 | if (event_sequence_map_.size() != 0) { |
| 1719 | out_node->__isset.event_sequences = true; |
| 1720 | out_node->event_sequences.reserve(event_sequence_map_.size()); |
| 1721 | for (const auto& val : event_sequence_map_) { |
| 1722 | out_node->event_sequences.emplace_back(); |
| 1723 | TEventSequence& seq = out_node->event_sequences.back(); |
| 1724 | seq.name = val.first; |
| 1725 | val.second->GetEvents(&events); |
| 1726 | seq.labels.reserve(events.size()); |
| 1727 | seq.timestamps.reserve(events.size()); |
| 1728 | for (const EventSequence::Event& ev: events) { |
| 1729 | seq.labels.push_back(move(ev.first)); |
| 1730 | seq.timestamps.push_back(ev.second); |
| 1731 | } |
| 1732 | } |
| 1733 | } |
| 1734 | } |
| 1735 | |
| 1736 | { |
| 1737 | lock_guard<SpinLock> l(summary_stats_map_lock_); |
| 1738 | if (summary_stats_map_.size() != 0) { |
| 1739 | out_node->__isset.summary_stats_counters = true; |
| 1740 | out_node->summary_stats_counters.resize(summary_stats_map_.size()); |
| 1741 | int idx = 0; |
| 1742 | for (const SummaryStatsCounterMap::value_type& val: summary_stats_map_) { |
| 1743 | val.second->ToThrift(&out_node->summary_stats_counters[idx++], val.first); |
| 1744 | } |
| 1745 | } |
| 1746 | } |
| 1747 | } |
| 1748 | |