@@ -27,29 +27,139 @@ static telemetry::Content get_parser_stats_content(const ParserStats& parserStat
2727
2828 dict[" ipv4_packets" ] = parserStats.ipv4_packets ;
2929 dict[" ipv6_packets" ] = parserStats.ipv6_packets ;
30+ dict[" ipv4_bytes" ] = parserStats.ipv4_bytes ;
31+ dict[" ipv6_bytes" ] = parserStats.ipv6_bytes ;
3032
3133 dict[" tcp_packets" ] = parserStats.tcp_packets ;
3234 dict[" udp_packets" ] = parserStats.udp_packets ;
3335
3436 dict[" seen_packets" ] = parserStats.seen_packets ;
3537 dict[" unknown_packets" ] = parserStats.unknown_packets ;
38+ return dict;
39+ }
3640
41+ static telemetry::Content get_vlan_stats (const VlanStats& vlanStats)
42+ {
43+ telemetry::Dict dict;
44+ dict[" ipv4_packets" ] = vlanStats.ipv4_packets ;
45+ dict[" ipv4_bytes" ] = vlanStats.ipv4_bytes ;
46+ dict[" ipv6_packets" ] = vlanStats.ipv6_packets ;
47+ dict[" ipv6_bytes" ] = vlanStats.ipv6_bytes ;
48+ dict[" tcp_packets" ] = vlanStats.tcp_packets ;
49+ dict[" udp_packets" ] = vlanStats.udp_packets ;
50+ dict[" total_packets" ] = vlanStats.total_packets ;
51+ dict[" total_bytes" ] = vlanStats.total_bytes ;
52+ return dict;
53+ }
54+
55+ static telemetry::Content get_vlan_size_histogram_content (const PacketSizeHistogram& sizeHistogram)
56+ {
57+ telemetry::Dict dict;
58+ for (std::size_t bucket = 0 ; bucket < PacketSizeHistogram::HISTOGRAM_SIZE; ++bucket) {
59+ const PacketSizeHistogram::Value value = sizeHistogram.get_bucket_value (bucket);
60+ dict[" etherPacketCount[" + sizeHistogram.get_bucket_name (bucket) + " ]" ]
61+ = telemetry::ScalarWithUnit {value.packets , " packets" };
62+ dict[" etherPacketSize[" + sizeHistogram.get_bucket_name (bucket) + " ]" ]
63+ = telemetry::ScalarWithUnit {value.bytes , " bytes" };
64+ }
3765 return dict;
3866}
3967
4068void InputPlugin::create_parser_stats_telemetry (
41- std::shared_ptr<telemetry::Directory> queueDirectory)
69+ std::shared_ptr<telemetry::Directory> queueDirectory,
70+ std::shared_ptr<telemetry::Directory> summaryDirectory,
71+ std::shared_ptr<telemetry::Directory> pipelineDirectory)
4272{
73+ auto parserDir = queueDirectory->addDir (" parser" );
74+ auto summaryParserDir = summaryDirectory->addDir (" parser" );
75+
4376 telemetry::FileOps statsOps
4477 = {[this ]() { return get_parser_stats_content (m_parser_stats); }, nullptr };
45- register_file (queueDirectory, " parser-stats" , statsOps);
78+
79+ auto vlanStatsDir = parserDir->addDir (" vlan-stats" );
80+ for (std::size_t vlan_id = 0 ; vlan_id < MAX_VLAN_ID; ++vlan_id) {
81+ telemetry::FileOps vlanStatsOps
82+ = {[this , vlan_id]() { return get_vlan_stats (m_parser_stats.vlan_stats [vlan_id]); },
83+ nullptr };
84+ telemetry::FileOps vlanHistogramOps
85+ = {[this , vlan_id]() {
86+ return get_vlan_size_histogram_content (
87+ m_parser_stats.vlan_stats [vlan_id].size_histogram );
88+ },
89+ nullptr };
90+ auto vlanIDDir = vlanStatsDir->addDir (std::to_string (vlan_id));
91+ auto vlanSummaryDir = summaryParserDir->addDirs (" vlan-stats/" + std::to_string (vlan_id));
92+ register_file (vlanIDDir, " stats" , vlanStatsOps);
93+ register_file (vlanIDDir, " histogram" , vlanHistogramOps);
94+
95+ const std::vector<telemetry::AggOperation> aggOps {
96+ {telemetry::AggMethodType::SUM, " ipv4_packets" },
97+ {telemetry::AggMethodType::SUM, " ipv4_bytes" },
98+ {telemetry::AggMethodType::SUM, " ipv6_packets" },
99+ {telemetry::AggMethodType::SUM, " ipv6_bytes" },
100+ {telemetry::AggMethodType::SUM, " tcp_packets" },
101+ {telemetry::AggMethodType::SUM, " udp_packets" },
102+ {telemetry::AggMethodType::SUM, " total_packets" },
103+ {telemetry::AggMethodType::SUM, " total_bytes" },
104+ };
105+
106+ register_agg_file (
107+ vlanSummaryDir,
108+ " stats" ,
109+ R"( queues/\d+/parser/vlan-stats/)" + std::to_string (vlan_id) + R"( /stats)" ,
110+ aggOps,
111+ pipelineDirectory);
112+
113+ std::vector<telemetry::AggOperation> aggHistogramSummaryOps;
114+ for (std::size_t bucket = 0 ; bucket < PacketSizeHistogram::HISTOGRAM_SIZE; ++bucket) {
115+ auto histogram = m_parser_stats.vlan_stats [vlan_id].size_histogram ;
116+ aggHistogramSummaryOps.push_back (
117+ {telemetry::AggMethodType::SUM,
118+ " etherPacketCount[" + histogram.get_bucket_name (bucket) + " ]" });
119+ aggHistogramSummaryOps.push_back (
120+ {telemetry::AggMethodType::SUM,
121+ " etherPacketSize[" + histogram.get_bucket_name (bucket) + " ]" });
122+ }
123+ register_agg_file (
124+ vlanSummaryDir,
125+ " histogram" ,
126+ R"( queues/\d+/parser/vlan-stats/)" + std::to_string (vlan_id) + R"( /histogram)" ,
127+ aggHistogramSummaryOps,
128+ pipelineDirectory);
129+ }
130+
131+ const std::vector<telemetry::AggOperation> aggOps {
132+ {telemetry::AggMethodType::SUM, " ipv4_bytes" },
133+ {telemetry::AggMethodType::SUM, " ipv4_packets" },
134+ {telemetry::AggMethodType::SUM, " ipv6_bytes" },
135+ {telemetry::AggMethodType::SUM, " ipv6_packets" },
136+ {telemetry::AggMethodType::SUM, " mpls_packets" },
137+ {telemetry::AggMethodType::SUM, " pppoe_packets" },
138+ {telemetry::AggMethodType::SUM, " seen_packets" },
139+ {telemetry::AggMethodType::SUM, " tcp_packets" },
140+ {telemetry::AggMethodType::SUM, " trill_packets" },
141+ {telemetry::AggMethodType::SUM, " udp_packets" },
142+ {telemetry::AggMethodType::SUM, " unknown_packets" },
143+ {telemetry::AggMethodType::SUM, " vlan_packets" },
144+ };
145+
146+ register_agg_file (
147+ summaryParserDir,
148+ " parser-stats" ,
149+ R"( queues/\d+/parser/parser-stats)" ,
150+ aggOps,
151+ pipelineDirectory);
152+
153+ register_file (parserDir, " parser-stats" , statsOps);
46154}
47155
48156void InputPlugin::set_telemetry_dirs (
49157 std::shared_ptr<telemetry::Directory> plugin_dir,
50- std::shared_ptr<telemetry::Directory> queues_dir)
158+ std::shared_ptr<telemetry::Directory> queues_dir,
159+ std::shared_ptr<telemetry::Directory> summary_dir,
160+ std::shared_ptr<telemetry::Directory> pipeline_dir)
51161{
52- create_parser_stats_telemetry (queues_dir);
162+ create_parser_stats_telemetry (queues_dir, summary_dir, pipeline_dir );
53163 configure_telemetry_dirs (plugin_dir, queues_dir);
54164}
55165
0 commit comments