@@ -21,6 +21,7 @@ from collections import namedtuple, OrderedDict
21
21
from natsort import natsorted
22
22
from tabulate import tabulate
23
23
from utilities_common .netstat import ns_diff , ns_brate , ns_prate , ns_util , table_as_json
24
+ from utilities_common import get_uptime
24
25
25
26
PORT_RATE = 40
26
27
@@ -32,6 +33,7 @@ header_all = ['IFACE', 'STATE', 'RX_OK', 'RX_BPS', 'RX_PPS', 'RX_UTIL', 'RX_ERR'
32
33
header = ['IFACE' , 'STATE' , 'RX_OK' , 'RX_BPS' , 'RX_UTIL' , 'RX_ERR' , 'RX_DRP' , 'RX_OVR' ,
33
34
'TX_OK' , 'TX_BPS' , 'TX_UTIL' , 'TX_ERR' , 'TX_DRP' , 'TX_OVR' ]
34
35
36
+ BUCKET_NUM = 10
35
37
counter_bucket_dict = {
36
38
'SAI_PORT_STAT_IF_IN_UCAST_PKTS' : 0 ,
37
39
'SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS' : 0 ,
@@ -116,36 +118,7 @@ class Portstat(object):
116
118
else :
117
119
return STATUS_NA
118
120
119
- def cnstat_print (self , cnstat_dict , use_json , print_all ):
120
- """
121
- Print the cnstat.
122
- """
123
- table = []
124
-
125
- for key , data in cnstat_dict .iteritems ():
126
- if key == 'time' :
127
- continue
128
-
129
- if print_all :
130
- table .append ((key , self .get_port_state (key ),
131
- data .rx_ok , STATUS_NA , STATUS_NA , STATUS_NA , data .rx_err ,
132
- data .rx_drop , data .rx_ovr ,
133
- data .tx_ok , STATUS_NA , STATUS_NA , STATUS_NA , data .tx_err ,
134
- data .tx_drop , data .tx_ovr ))
135
- else :
136
- table .append ((key , self .get_port_state (key ),
137
- data .rx_ok , STATUS_NA , STATUS_NA , data .rx_err ,
138
- data .rx_drop , data .rx_ovr ,
139
- data .tx_ok , STATUS_NA , STATUS_NA , data .tx_err ,
140
- data .tx_drop , data .tx_ovr ))
141
-
142
-
143
- if use_json :
144
- table_as_json (table , header_all if print_all else header )
145
- else :
146
- print tabulate (table , header_all , tablefmt = 'simple' , stralign = 'right' ) # if print_all else header
147
-
148
- def cnstat_diff_print (self , cnstat_new_dict , cnstat_old_dict , use_json , print_all ):
121
+ def cnstat_diff_print (self , cnstat_new_dict , cnstat_old_dict , use_json = False , print_all = False ):
149
122
"""
150
123
Print the difference between two cnstat results.
151
124
"""
@@ -154,75 +127,47 @@ class Portstat(object):
154
127
155
128
for key , cntr in cnstat_new_dict .iteritems ():
156
129
if key == 'time' :
157
- time_gap = cnstat_new_dict .get ('time' ) - cnstat_old_dict .get ('time' )
158
- time_gap = time_gap .total_seconds ()
130
+ if 'time' in cnstat_old_dict :
131
+ time_gap = cnstat_new_dict .get ('time' ) - cnstat_old_dict .get ('time' )
132
+ time_gap = time_gap .total_seconds ()
133
+ else :
134
+ time_gap = get_uptime ()
159
135
continue
160
- old_cntr = None
161
136
if key in cnstat_old_dict :
162
137
old_cntr = cnstat_old_dict .get (key )
138
+ else :
139
+ old_cntr = NStats ._make ([0 ] * BUCKET_NUM )
163
140
164
141
if print_all :
165
- if old_cntr is not None :
166
- table .append ((key , self .get_port_state (key ),
167
- ns_diff (cntr .rx_ok , old_cntr .rx_ok ),
168
- ns_brate (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
169
- ns_prate (cntr .rx_ok , old_cntr .rx_ok , time_gap ),
170
- ns_util (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
171
- ns_diff (cntr .rx_err , old_cntr .rx_err ),
172
- ns_diff (cntr .rx_drop , old_cntr .rx_drop ),
173
- ns_diff (cntr .rx_ovr , old_cntr .rx_ovr ),
174
- ns_diff (cntr .tx_ok , old_cntr .tx_ok ),
175
- ns_brate (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
176
- ns_prate (cntr .tx_ok , old_cntr .tx_ok , time_gap ),
177
- ns_util (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
178
- ns_diff (cntr .tx_err , old_cntr .tx_err ),
179
- ns_diff (cntr .tx_drop , old_cntr .tx_drop ),
180
- ns_diff (cntr .tx_ovr , old_cntr .tx_ovr )))
181
- else :
182
- table .append ((key , self .get_port_state (key ),
183
- cntr .rx_ok ,
184
- STATUS_NA ,
185
- STATUS_NA ,
186
- STATUS_NA ,
187
- cntr .rx_err ,
188
- cntr .rx_drop ,
189
- cntr .rx_ovr ,
190
- cntr .tx_ok ,
191
- STATUS_NA ,
192
- STATUS_NA ,
193
- STATUS_NA ,
194
- cntr .tx_err ,
195
- cntr .tx_drop ,
196
- cntr .tx_err ))
142
+ table .append ((key , self .get_port_state (key ),
143
+ ns_diff (cntr .rx_ok , old_cntr .rx_ok ),
144
+ ns_brate (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
145
+ ns_prate (cntr .rx_ok , old_cntr .rx_ok , time_gap ),
146
+ ns_util (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
147
+ ns_diff (cntr .rx_err , old_cntr .rx_err ),
148
+ ns_diff (cntr .rx_drop , old_cntr .rx_drop ),
149
+ ns_diff (cntr .rx_ovr , old_cntr .rx_ovr ),
150
+ ns_diff (cntr .tx_ok , old_cntr .tx_ok ),
151
+ ns_brate (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
152
+ ns_prate (cntr .tx_ok , old_cntr .tx_ok , time_gap ),
153
+ ns_util (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
154
+ ns_diff (cntr .tx_err , old_cntr .tx_err ),
155
+ ns_diff (cntr .tx_drop , old_cntr .tx_drop ),
156
+ ns_diff (cntr .tx_ovr , old_cntr .tx_ovr )))
197
157
else :
198
- if old_cntr is not None :
199
- table .append ((key , self .get_port_state (key ),
200
- ns_diff (cntr .rx_ok , old_cntr .rx_ok ),
201
- ns_brate (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
202
- ns_util (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
203
- ns_diff (cntr .rx_err , old_cntr .rx_err ),
204
- ns_diff (cntr .rx_drop , old_cntr .rx_drop ),
205
- ns_diff (cntr .rx_ovr , old_cntr .rx_ovr ),
206
- ns_diff (cntr .tx_ok , old_cntr .tx_ok ),
207
- ns_brate (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
208
- ns_util (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
209
- ns_diff (cntr .tx_err , old_cntr .tx_err ),
210
- ns_diff (cntr .tx_drop , old_cntr .tx_drop ),
211
- ns_diff (cntr .tx_ovr , old_cntr .tx_ovr )))
212
- else :
213
- table .append ((key , self .get_port_state (key ),
214
- cntr .rx_ok ,
215
- STATUS_NA ,
216
- STATUS_NA ,
217
- cntr .rx_err ,
218
- cntr .rx_drop ,
219
- cntr .rx_ovr ,
220
- cntr .tx_ok ,
221
- STATUS_NA ,
222
- STATUS_NA ,
223
- cntr .tx_err ,
224
- cntr .tx_drop ,
225
- cntr .tx_err ))
158
+ table .append ((key , self .get_port_state (key ),
159
+ ns_diff (cntr .rx_ok , old_cntr .rx_ok ),
160
+ ns_brate (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
161
+ ns_util (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
162
+ ns_diff (cntr .rx_err , old_cntr .rx_err ),
163
+ ns_diff (cntr .rx_drop , old_cntr .rx_drop ),
164
+ ns_diff (cntr .rx_ovr , old_cntr .rx_ovr ),
165
+ ns_diff (cntr .tx_ok , old_cntr .tx_ok ),
166
+ ns_brate (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
167
+ ns_util (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
168
+ ns_diff (cntr .tx_err , old_cntr .tx_err ),
169
+ ns_diff (cntr .tx_drop , old_cntr .tx_drop ),
170
+ ns_diff (cntr .tx_ovr , old_cntr .tx_ovr )))
226
171
227
172
if use_json :
228
173
print self .table_as_json (table , print_all )
@@ -340,7 +285,7 @@ Examples:
340
285
print "\n File '%s' does not exist" % cnstat_fqn_file
341
286
print "Did you run 'portstat -c -t %s' to record the counters via tag %s?\n " % (tag_name , tag_name )
342
287
else :
343
- portstat .cnstat_print (cnstat_dict , use_json , print_all )
288
+ portstat .cnstat_diff_print (cnstat_dict , {} , use_json , print_all )
344
289
else :
345
290
#wait for the specified time and then gather the new stats and output the difference.
346
291
time .sleep (wait_time_in_seconds )
0 commit comments