1
1
import networkx
2
2
from openvpn_status import parse_status
3
+ from openvpn_status .parser import ParsingError
3
4
4
5
from .base import BaseParser
5
6
@@ -13,7 +14,10 @@ class OpenvpnParser(BaseParser):
13
14
_server_common_name = 'openvpn-server'
14
15
15
16
def to_python (self , data ):
16
- return parse_status (data )
17
+ try :
18
+ return parse_status (data )
19
+ except (AttributeError , ParsingError ):
20
+ return None
17
21
18
22
def parse (self , data ):
19
23
"""
@@ -25,8 +29,15 @@ def parse(self, data):
25
29
server = self ._server_common_name
26
30
# add server (central node) to graph
27
31
graph .add_node (server )
32
+ # data may be empty
33
+ if data is None :
34
+ clients = []
35
+ links = []
36
+ else :
37
+ clients = data .client_list .values ()
38
+ links = data .routing_table .values ()
28
39
# add clients in graph as nodes
29
- for client in data . client_list . values () :
40
+ for client in clients :
30
41
client_properties = {
31
42
'label' : client .common_name ,
32
43
'real_address' : str (client .real_address .host ),
@@ -44,6 +55,6 @@ def parse(self, data):
44
55
client_properties ['local_addresses' ] = local_addresses
45
56
graph .add_node (str (client .real_address .host ), ** client_properties )
46
57
# add links in routing table to graph
47
- for link in data . routing_table . values () :
58
+ for link in links :
48
59
graph .add_edge (server , str (link .real_address .host ), weight = 1 )
49
60
return graph
0 commit comments