1
2
3
4
5
6
7
8
9
10
11
12
13
14 from Products.ZenModel.Link import ILink
15
17 for iface in dev.os.interfaces():
18 for ip in iface.ipaddresses():
19 net = ip.network()
20 if net is None or net.netmask == 32:
21 continue
22 else:
23 yield net
24
26 for ip in net.ipaddresses():
27 dev = ip.device()
28 if dev is None:
29 continue
30 dcp = dev.getDeviceClassPath()
31 if not ( dcp.startswith(devclass) or
32 dcp.startswith('/Network/Router')):
33 continue
34 else:
35 yield dev
36
45
47 l = [x,y]
48 cmpf = lambda x,y:int(x.meta_type=='Device')-int(y.meta_type=='Device')
49 l.sort(cmpf)
50 return tuple(l)
51
53 """ Depth-first search of the network tree emanating from
54 rootnode, returning (network, device) edges.
55 """
56 if not pairs:
57 pairs = []
58 if depth:
59 for node in _get_related(rootnode, filter):
60 sorted = _sortedpair(rootnode, node)
61 pair = [x.id for x in sorted]
62 if pair not in pairs:
63 pairs.append(pair)
64 yield sorted
65 for childnode in _get_related(node, filter):
66 for n in _get_connections(
67 childnode, depth-1, pairs, filter):
68 yield n
69
70 -def get_edges(rootnode, depth=1, withIcons=False, filter='/'):
85 for nodea, nodeb in g:
86 if withIcons:
87 yield ((nodea.id, nodea.getIconPath(), getColor(nodea)),
88 (nodeb.id, nodeb.getIconPath(), getColor(nodeb)))
89 else:
90 yield (nodea.id, nodeb.id)
91
109
110
111
113 """ Represents a link between two IpInterfaces
114 related by network connectivity.
115 Not a persistent object, so not managed
116 by a LinkManager.
117 Implements Products.ZenModel.Link.ILink.
118 """
119
120 OSI_layer = '3'
121 pointa = None
122 pointb = None
123
125 eps = [x.id for x in self.getEndpoints()]
126 eps.sort()
127 return hash(':'.join(eps))
128
133
135 return self.endpoints
136
138 eps = self.endpoints
139 if max([ep.getPingStatus() for ep in eps]) > 0:
140 return 5
141 zem = eps[0].dmd.ZenEventManager
142 return max(map(zem.getMaxSeverity,eps))
143
146
148 if endpoint==self.pointa: return self.pointb
149 elif endpoint==self.pointb: return self.pointa
150 else: return None
151
164
181 result = map(getancestoraddress, self.endpoints)
182 result = filter(lambda x:x, result)
183 if len(result) < 2: return None
184 if result[0]==result[1]: return None
185 result.sort()
186 return tuple(result)
187