aboutsummaryrefslogtreecommitdiffstats
path: root/nfvbench/packet_analyzer.py
diff options
context:
space:
mode:
Diffstat (limited to 'nfvbench/packet_analyzer.py')
-rw-r--r--nfvbench/packet_analyzer.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/nfvbench/packet_analyzer.py b/nfvbench/packet_analyzer.py
new file mode 100644
index 0000000..c01675b
--- /dev/null
+++ b/nfvbench/packet_analyzer.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+# Copyright 2016 Cisco Systems, Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+from collections import OrderedDict
+from log import LOG
+
+
+class PacketAnalyzer(object):
+ """Analyze packet drop counter in a chain"""
+
+ def __init__(self):
+ self.last_packet_count = 0
+ self.chain = []
+
+ def record(self, interface, traffic_type):
+ """Records the counter of the next interface with the corresponding traffic type"""
+ if interface.is_no_op():
+ return
+ packet_count = interface.get_packet_count(traffic_type)
+ packet_drop_count = self.last_packet_count - packet_count
+ path_data = OrderedDict()
+ path_data['interface'] = interface.name
+ path_data['device'] = interface.device
+ path_data['packet_count'] = packet_count
+
+ if self.chain:
+ path_data['packet_drop_count'] = packet_drop_count
+
+ self.chain.append(path_data)
+ self.last_packet_count = packet_count
+
+ def get_analysis(self):
+ """Gets the analysis of packet drops"""
+ transmitted_packets = self.chain[0]['packet_count']
+
+ for (index, path_data) in enumerate(self.chain):
+ LOG.info('[Packet Analyze] Interface: %s' % (path_data['interface']))
+ LOG.info('[Packet Analyze] > Count: %d' % (path_data['packet_count']))
+
+ if index:
+ if transmitted_packets:
+ self.chain[index]['packet_drop_percentage'] = \
+ 100.0 * path_data['packet_drop_count'] / transmitted_packets
+ else:
+ self.chain[index]['packet_drop_percentage'] = float('nan')
+ LOG.info('[Packet Analyze] > Packet Drops: %d' %
+ (path_data['packet_drop_count']))
+ LOG.info('[Packet Analyze] > Percentage: %s' %
+ (path_data['packet_drop_percentage']))
+
+ return self.chain