1515from pytrie import StringTrie as Trie
1616
1717from netengine .backends .snmp import SNMP
18+ from netengine .exceptions import NetEngineError
1819
1920logger = logging .getLogger (__name__ )
2021
@@ -77,6 +78,7 @@ def uptime_tuple(self, snmpdump=None):
7778 return td .days , td .seconds // 3600 , (td .seconds // 60 ) % 60
7879
7980 _interfaces = None
81+ _wireless_interfaces = None
8082
8183 def get_interfaces (self , snmpdump = None ):
8284 """
@@ -96,6 +98,32 @@ def get_interfaces(self, snmpdump=None):
9698
9799 return self ._interfaces
98100
101+ def get_wireless_interfaces (self , snmpdump = None ):
102+ """
103+ returns the list of all the wireless interfaces of the device
104+ """
105+ if self ._wireless_interfaces is None :
106+ interfaces = []
107+ wireless_if_oid = '1.2.840.10036.1.1.1.1.'
108+ interfaces_oid = '1.3.6.1.2.1.2.2.1.2.'
109+
110+ for i in self ._value_to_retrieve (snmpdump = snmpdump ):
111+ try :
112+ value_to_get1 = self .get_value (
113+ wireless_if_oid + str (i ), snmpdump = snmpdump
114+ )
115+
116+ if value_to_get1 :
117+ interfaces .append (
118+ self .get_value (interfaces_oid + str (i ), snmpdump = snmpdump )
119+ )
120+ except (NetEngineError , KeyError ):
121+ pass
122+
123+ self ._wireless_interfaces = [_f for _f in interfaces if _f ]
124+
125+ return self ._wireless_interfaces
126+
99127 _interfaces_MAC = None
100128
101129 def interfaces_MAC (self , snmpdump = None ):
@@ -320,15 +348,19 @@ def interface_addr_and_mask(self, snmpdump=None):
320348
321349 results = {}
322350
351+ # TODO: Add ipv6 addresses
323352 for i in range (0 , len (interface_ip_address )):
324353 a = interface_ip_address [i ][0 ][1 ].asNumbers ()
325354 ip_address = '.' .join (str (a [i ]) for i in range (0 , len (a )))
326355 b = interface_netmask [i ][0 ][1 ].asNumbers ()
327356 netmask = '.' .join (str (b [i ]) for i in range (0 , len (b )))
328357
329358 name = self ._interface_dict [int (interface_index [i ][0 ][1 ])]
330-
331- results [name ] = {'address' : ip_address , 'netmask' : netmask }
359+ results [name ] = {
360+ 'family' : 'ipv4' ,
361+ 'address' : ip_address ,
362+ 'mask' : netmask ,
363+ }
332364
333365 self ._interface_addr_and_mask = results
334366
@@ -339,6 +371,7 @@ def interfaces_to_dict(self, snmpdump=None):
339371 Returns an ordered dict with all the information available about the interface
340372 """
341373 results = []
374+ wireless_if = self .get_wireless_interfaces ()
342375 for i in range (0 , len (self .get_interfaces (snmpdump = snmpdump ))):
343376
344377 logger .info (f'====== { i } ======' )
@@ -358,11 +391,11 @@ def interfaces_to_dict(self, snmpdump=None):
358391 logger .info ('... mtu ...' )
359392 mtu = int (self .interfaces_mtu (snmpdump = snmpdump )[i ]['mtu' ])
360393 logger .info ('... if_ip ...' )
361- if_ip = (
362- self . interface_addr_and_mask ( snmpdump = snmpdump )
363- . get ( name , {})
364- . get ( 'address' , '' )
365- )
394+ addr = self . interface_addr_and_mask ( snmpdump = snmpdump ). get ( name )
395+ addresses = [ addr ] if addr is not None else []
396+
397+ if name in wireless_if :
398+ if_type = 'wireless'
366399
367400 result = self ._dict (
368401 {
@@ -374,7 +407,7 @@ def interfaces_to_dict(self, snmpdump=None):
374407 'rx_bytes' : rx_bytes ,
375408 'tx_bytes' : tx_bytes ,
376409 "mtu" : mtu ,
377- "ip " : if_ip ,
410+ "addresses " : addresses ,
378411 },
379412 }
380413 )
@@ -435,82 +468,81 @@ def local_time(self, snmpdump=None):
435468
436469 def RAM_total (self , snmpdump = None ):
437470 """
438- returns the total RAM of the device
471+ returns the total RAM of the device in bytes
439472 """
440- return int (self .get_value ('1.3.6.1.2 .1.25.2.3.1.5.1 ' , snmpdump = snmpdump ))
473+ return int (self .get_value ('1.3.6.1.4 .1.2021.4.5.0 ' , snmpdump = snmpdump )) * 1024
441474
442475 def RAM_shared (self , snmpdump = None ):
443476 """
444- returns the shared RAM of the device
477+ returns the shared RAM of the device in bytes
445478 """
446- return int (self .get_value ('1.3.6.1.2 .1.25.2.3.1.6.8 ' , snmpdump = snmpdump ))
479+ return int (self .get_value ('1.3.6.1.4 .1.2021.4.13.0 ' , snmpdump = snmpdump )) * 1024
447480
448481 def RAM_cached (self , snmpdump = None ):
449482 """
450- returns the cached RAM of the device
451- """
452- return int (self .get_value ('1.3.6.1.2.1.25.2.3.1.5.7' , snmpdump = snmpdump ))
453-
454- def RAM_used (self , snmpdump = None ):
455- """
456- returns the used RAM of the device
483+ returns the cached RAM of the device in bytes
457484 """
458- return int (self .get_value ('1.3.6.1.2 .1.25.2.3.1.6.1 ' , snmpdump = snmpdump ))
485+ return int (self .get_value ('1.3.6.1.4 .1.2021.4.15.0 ' , snmpdump = snmpdump )) * 1024
459486
460487 def RAM_free (self , snmpdump = None ):
461488 """
462- returns the free RAM of the device
489+ returns the free RAM of the device in bytes
463490 """
464- return int (
465- self .RAM_total (snmpdump = snmpdump )
466- - (self .RAM_used (snmpdump = snmpdump ) - self .RAM_cached (snmpdump = snmpdump ))
467- )
491+ return int (self .get_value ('1.3.6.1.4.1.2021.4.11.0' , snmpdump = snmpdump )) * 1024
468492
469- def SWAP_total (self , snmpdump = None ):
493+ def RAM_buffered (self , snmpdump = None ):
470494 """
471- returns the total SWAP of the device
495+ returns the buffered RAM of the device in bytes
472496 """
473- return int (self .get_value ('1.3.6.1.2 .1.25.2.3.1.5.10 ' , snmpdump = snmpdump ))
497+ return int (self .get_value ('1.3.6.1.4 .1.2021.4.14.0 ' , snmpdump = snmpdump )) * 1024
474498
475- def SWAP_used (self , snmpdump = None ):
499+ def SWAP_total (self , snmpdump = None ):
476500 """
477- returns the used SWAP of the device
501+ returns the total SWAP of the device in bytes
478502 """
479- return int (self .get_value ('1.3.6.1.2 .1.25.2 .3.1.6.10 ' , snmpdump = snmpdump ))
503+ return int (self .get_value ('1.3.6.1.4 .1.2021.4 .3.0 ' , snmpdump = snmpdump )) * 1024
480504
481505 def SWAP_free (self , snmpdump = None ):
482506 """
483- returns the free SWAP of the device
507+ returns the free SWAP of the device in bytes
484508 """
485- SWAP_free = self .SWAP_total (snmpdump = snmpdump ) - self .SWAP_used (
486- snmpdump = snmpdump
487- )
488- return SWAP_free
509+ return int (self .get_value ('1.3.6.1.4.1.2021.4.4.0' , snmpdump = snmpdump )) * 1024
489510
490511 def CPU_count (self , snmpdump = None ):
491512 """
492513 returns the count of CPUs of the device
493514 """
494515 return len (self .next ('1.3.6.1.2.1.25.3.3.1.2.' , snmpdump = snmpdump )[3 ])
495516
517+ def load (self , snmpdump = None ):
518+ """
519+ Returns an array with load average values respectively in the last
520+ minute, in the last 5 minutes and in the last 15 minutes
521+ """
522+ array = self .next ('1.3.6.1.4.1.2021.10.1.3.' , snmpdump = snmpdump )[3 ]
523+ one = float (array [0 ][0 ][1 ])
524+ five = float (array [1 ][0 ][1 ])
525+ fifteen = float (array [2 ][0 ][1 ])
526+ return [one , five , fifteen ]
527+
496528 def resources_to_dict (self , snmpdump = None ):
497529 """
498530 returns an ordered dict with hardware resources information
499531 """
500532 result = self ._dict (
501533 {
534+ 'load' : self .load (snmpdump = snmpdump ),
502535 'cpus' : self .CPU_count (snmpdump = snmpdump ),
503536 'memory' : {
504537 'total' : self .RAM_total (snmpdump = snmpdump ),
505538 'shared' : self .RAM_shared (snmpdump = snmpdump ),
506- 'used' : self .RAM_used (snmpdump = snmpdump ),
507539 'free' : self .RAM_free (snmpdump = snmpdump ),
508540 'cached' : self .RAM_cached (snmpdump = snmpdump ),
541+ 'buffered' : self .RAM_buffered (snmpdump = snmpdump ),
509542 },
510543 'swap' : {
511544 'total' : self .SWAP_total (snmpdump = snmpdump ),
512545 'free' : self .SWAP_free (snmpdump = snmpdump ),
513- 'used' : self .SWAP_used (snmpdump = snmpdump ),
514546 },
515547 }
516548 )
@@ -574,12 +606,12 @@ def neighbors(self, snmpdump=None):
574606
575607 def to_dict (self , snmpdump = None , autowalk = True ):
576608 if autowalk :
577- snmpdump = Trie (self .walk ('1.3.6 ' ))
609+ snmpdump = Trie (self .walk ('1.2 ' ))
578610 result = self ._dict (
579611 {
580612 'type' : 'DeviceMonitoring' ,
581613 'general' : {
582- 'name ' : self .name (snmpdump = snmpdump ),
614+ 'hostname ' : self .name (snmpdump = snmpdump ),
583615 'uptime' : self .uptime (snmpdump = snmpdump ),
584616 'local_time' : self .local_time (snmpdump = snmpdump ),
585617 },
0 commit comments