@@ -21,7 +21,6 @@ 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
25
24
26
25
PORT_RATE = 40
27
26
@@ -33,7 +32,6 @@ header_all = ['IFACE', 'STATE', 'RX_OK', 'RX_BPS', 'RX_PPS', 'RX_UTIL', 'RX_ERR'
33
32
header = ['IFACE' , 'STATE' , 'RX_OK' , 'RX_BPS' , 'RX_UTIL' , 'RX_ERR' , 'RX_DRP' , 'RX_OVR' ,
34
33
'TX_OK' , 'TX_BPS' , 'TX_UTIL' , 'TX_ERR' , 'TX_DRP' , 'TX_OVR' ]
35
34
36
- BUCKET_NUM = 10
37
35
counter_bucket_dict = {
38
36
'SAI_PORT_STAT_IF_IN_UCAST_PKTS' : 0 ,
39
37
'SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS' : 0 ,
@@ -132,7 +130,36 @@ class Portstat(object):
132
130
else :
133
131
return STATUS_NA
134
132
135
- def cnstat_diff_print (self , cnstat_new_dict , cnstat_old_dict , use_json = False , print_all = False ):
133
+ def cnstat_print (self , cnstat_dict , use_json , print_all ):
134
+ """
135
+ Print the cnstat.
136
+ """
137
+ table = []
138
+
139
+ for key , data in cnstat_dict .iteritems ():
140
+ if key == 'time' :
141
+ continue
142
+
143
+ if print_all :
144
+ table .append ((key , self .get_port_state (key ),
145
+ data .rx_ok , STATUS_NA , STATUS_NA , STATUS_NA , data .rx_err ,
146
+ data .rx_drop , data .rx_ovr ,
147
+ data .tx_ok , STATUS_NA , STATUS_NA , STATUS_NA , data .tx_err ,
148
+ data .tx_drop , data .tx_ovr ))
149
+ else :
150
+ table .append ((key , self .get_port_state (key ),
151
+ data .rx_ok , STATUS_NA , STATUS_NA , data .rx_err ,
152
+ data .rx_drop , data .rx_ovr ,
153
+ data .tx_ok , STATUS_NA , STATUS_NA , data .tx_err ,
154
+ data .tx_drop , data .tx_ovr ))
155
+
156
+
157
+ if use_json :
158
+ table_as_json (table , header_all if print_all else header )
159
+ else :
160
+ print tabulate (table , header_all , tablefmt = 'simple' , stralign = 'right' ) # if print_all else header
161
+
162
+ def cnstat_diff_print (self , cnstat_new_dict , cnstat_old_dict , use_json , print_all ):
136
163
"""
137
164
Print the difference between two cnstat results.
138
165
"""
@@ -141,47 +168,76 @@ class Portstat(object):
141
168
142
169
for key , cntr in cnstat_new_dict .iteritems ():
143
170
if key == 'time' :
144
- if 'time' in cnstat_old_dict :
145
- time_gap = cnstat_new_dict .get ('time' ) - cnstat_old_dict .get ('time' )
146
- time_gap = time_gap .total_seconds ()
147
- else :
148
- time_gap = get_uptime ()
171
+ time_gap = cnstat_new_dict .get ('time' ) - cnstat_old_dict .get ('time' )
172
+ time_gap = time_gap .total_seconds ()
149
173
continue
174
+ old_cntr = None
150
175
if key in cnstat_old_dict :
151
176
old_cntr = cnstat_old_dict .get (key )
152
- else :
153
- old_cntr = NStats ._make ([0 ] * BUCKET_NUM )
177
+
154
178
port_speed = self .get_port_speed (key )
155
179
if print_all :
156
- table .append ((key , self .get_port_state (key ),
157
- ns_diff (cntr .rx_ok , old_cntr .rx_ok ),
158
- ns_brate (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
159
- ns_prate (cntr .rx_ok , old_cntr .rx_ok , time_gap ),
160
- ns_util (cntr .rx_byt , old_cntr .rx_byt , time_gap , port_speed ),
161
- ns_diff (cntr .rx_err , old_cntr .rx_err ),
162
- ns_diff (cntr .rx_drop , old_cntr .rx_drop ),
163
- ns_diff (cntr .rx_ovr , old_cntr .rx_ovr ),
164
- ns_diff (cntr .tx_ok , old_cntr .tx_ok ),
165
- ns_brate (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
166
- ns_prate (cntr .tx_ok , old_cntr .tx_ok , time_gap ),
167
- ns_util (cntr .tx_byt , old_cntr .tx_byt , time_gap , port_speed ),
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 )))
180
+ if old_cntr is not None :
181
+ table .append ((key , self .get_port_state (key ),
182
+ ns_diff (cntr .rx_ok , old_cntr .rx_ok ),
183
+ ns_brate (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
184
+ ns_prate (cntr .rx_ok , old_cntr .rx_ok , time_gap ),
185
+ ns_util (cntr .rx_byt , old_cntr .rx_byt , time_gap , port_speed ),
186
+ ns_diff (cntr .rx_err , old_cntr .rx_err ),
187
+ ns_diff (cntr .rx_drop , old_cntr .rx_drop ),
188
+ ns_diff (cntr .rx_ovr , old_cntr .rx_ovr ),
189
+ ns_diff (cntr .tx_ok , old_cntr .tx_ok ),
190
+ ns_brate (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
191
+ ns_prate (cntr .tx_ok , old_cntr .tx_ok , time_gap ),
192
+ ns_util (cntr .tx_byt , old_cntr .tx_byt , time_gap , port_speed ),
193
+ ns_diff (cntr .tx_err , old_cntr .tx_err ),
194
+ ns_diff (cntr .tx_drop , old_cntr .tx_drop ),
195
+ ns_diff (cntr .tx_ovr , old_cntr .tx_ovr )))
196
+ else :
197
+ table .append ((key , self .get_port_state (key ),
198
+ cntr .rx_ok ,
199
+ STATUS_NA ,
200
+ STATUS_NA ,
201
+ STATUS_NA ,
202
+ cntr .rx_err ,
203
+ cntr .rx_drop ,
204
+ cntr .rx_ovr ,
205
+ cntr .tx_ok ,
206
+ STATUS_NA ,
207
+ STATUS_NA ,
208
+ STATUS_NA ,
209
+ cntr .tx_err ,
210
+ cntr .tx_drop ,
211
+ cntr .tx_err ))
171
212
else :
172
- table .append ((key , self .get_port_state (key ),
173
- ns_diff (cntr .rx_ok , old_cntr .rx_ok ),
174
- ns_brate (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
175
- ns_util (cntr .rx_byt , old_cntr .rx_byt , time_gap , port_speed ),
176
- ns_diff (cntr .rx_err , old_cntr .rx_err ),
177
- ns_diff (cntr .rx_drop , old_cntr .rx_drop ),
178
- ns_diff (cntr .rx_ovr , old_cntr .rx_ovr ),
179
- ns_diff (cntr .tx_ok , old_cntr .tx_ok ),
180
- ns_brate (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
181
- ns_util (cntr .tx_byt , old_cntr .tx_byt , time_gap , port_speed ),
182
- ns_diff (cntr .tx_err , old_cntr .tx_err ),
183
- ns_diff (cntr .tx_drop , old_cntr .tx_drop ),
184
- ns_diff (cntr .tx_ovr , old_cntr .tx_ovr )))
213
+ if old_cntr is not None :
214
+ table .append ((key , self .get_port_state (key ),
215
+ ns_diff (cntr .rx_ok , old_cntr .rx_ok ),
216
+ ns_brate (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
217
+ ns_util (cntr .rx_byt , old_cntr .rx_byt , time_gap ),
218
+ ns_diff (cntr .rx_err , old_cntr .rx_err ),
219
+ ns_diff (cntr .rx_drop , old_cntr .rx_drop ),
220
+ ns_diff (cntr .rx_ovr , old_cntr .rx_ovr ),
221
+ ns_diff (cntr .tx_ok , old_cntr .tx_ok ),
222
+ ns_brate (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
223
+ ns_util (cntr .tx_byt , old_cntr .tx_byt , time_gap ),
224
+ ns_diff (cntr .tx_err , old_cntr .tx_err ),
225
+ ns_diff (cntr .tx_drop , old_cntr .tx_drop ),
226
+ ns_diff (cntr .tx_ovr , old_cntr .tx_ovr )))
227
+ else :
228
+ table .append ((key , self .get_port_state (key ),
229
+ cntr .rx_ok ,
230
+ STATUS_NA ,
231
+ STATUS_NA ,
232
+ cntr .rx_err ,
233
+ cntr .rx_drop ,
234
+ cntr .rx_ovr ,
235
+ cntr .tx_ok ,
236
+ STATUS_NA ,
237
+ STATUS_NA ,
238
+ cntr .tx_err ,
239
+ cntr .tx_drop ,
240
+ cntr .tx_err ))
185
241
186
242
if use_json :
187
243
print table_as_json (table , header )
@@ -299,7 +355,7 @@ Examples:
299
355
print "\n File '%s' does not exist" % cnstat_fqn_file
300
356
print "Did you run 'portstat -c -t %s' to record the counters via tag %s?\n " % (tag_name , tag_name )
301
357
else :
302
- portstat .cnstat_diff_print (cnstat_dict , {} , use_json , print_all )
358
+ portstat .cnstat_print (cnstat_dict , use_json , print_all )
303
359
else :
304
360
#wait for the specified time and then gather the new stats and output the difference.
305
361
time .sleep (wait_time_in_seconds )
0 commit comments