Package Products :: Package ZenUtils :: Module NetworkTree
[hide private]
[frames] | no frames]

Source Code for Module Products.ZenUtils.NetworkTree

  1  ############################################################################## 
  2  #  
  3  # Copyright (C) Zenoss, Inc. 2007, all rights reserved. 
  4  #  
  5  # This content is made available according to terms specified in 
  6  # License.zenoss under the directory where your Zenoss product is installed. 
  7  #  
  8  ############################################################################## 
  9   
 10   
 11  from Products.ZenModel.Link import ILink 
 12   
13 -def _fromDeviceToNetworks(dev):
14 for iface in dev.os.interfaces(): 15 for ip in iface.ipaddresses(): 16 net = ip.network() 17 if net is None or net.netmask == 32: 18 continue 19 else: 20 yield net
21
22 -def _fromNetworkToDevices(net, organizer):
23 from Products.Zuul.catalog.global_catalog import IIndexableWrapper 24 for ip in net.ipaddresses(): 25 dev = ip.device() 26 if dev is None: 27 continue 28 paths = map('/'.join, IIndexableWrapper(dev).path()) 29 for path in paths: 30 if path.startswith(organizer) or path.startswith('/zport/dmd/Devices/Network/Router'): 31 yield dev 32 break
33 42
43 -def _sortedpair(x,y):
44 l = [x,y] 45 cmpf = lambda x,y:int(x.meta_type=='Device')-int(y.meta_type=='Device') 46 l.sort(cmpf) 47 return tuple(l)
48
49 -def _get_connections(rootnode, depth=1, pairs=None, filter='/'):
50 """ Depth-first search of the network tree emanating from 51 rootnode, returning (network, device) edges. 52 """ 53 if not pairs: 54 pairs = [] 55 if depth: 56 for node in _get_related(rootnode, filter): 57 sorted = _sortedpair(rootnode, node) 58 pair = [x.id for x in sorted] 59 if pair not in pairs: 60 pairs.append(pair) 61 yield sorted 62 for childnode in _get_related(node, filter): 63 for n in _get_connections( 64 childnode, depth-1, pairs, filter): 65 yield n
66
67 -def get_edges(rootnode, depth=1, withIcons=False, filter='/'):
68 """ Returns some edges """ 69 depth = int(depth) 70 g = _get_connections(rootnode, depth, [], filter) 71 def getColor(node): 72 if node.meta_type=='IpNetwork': 73 return '0xffffff' 74 summary = node.getEventSummary() 75 colors = '0xff0000 0xff8c00 0xffd700 0x00ff00 0x00ff00'.split() 76 color = '0x00ff00' 77 for i in range(5): 78 if summary[i][2]>0: 79 color = colors[i] 80 break 81 return color
82 for nodea, nodeb in g: 83 if withIcons: 84 yield ((nodea.titleOrId(), nodea.getIconPath(), getColor(nodea)), 85 (nodeb.titleOrId(), nodeb.getIconPath(), getColor(nodeb))) 86 else: 87 yield (nodea.titleOrId(), nodeb.titleOrId()) 88 106 107 108 183