@@ -12,7 +12,23 @@ def __init__(self, outputfile, print_request = True):
1212 self .outputfile = outputfile
1313 self .print_request = print_request
1414 self .messageSearcher .disableCRC = True
15+ self ._indent_level = 0
1516 self .add_subscriber (self )
17+
18+ def __handle_loglist2 (self , message ):
19+ self .write_output (f"Channel: { message .payload .data ['reserved_paramheader' ]} \n " )
20+ for log in message .payload .data ['loglist' ]:
21+ msgid = log ['msgid' ]
22+ if msgid in ixcom .data .MessagePayloadDictionary :
23+ message_class = ixcom .data .MessagePayloadDictionary [msgid ]
24+ zeile = "msgid: %s\n " % (message_class .get_name ())
25+ else :
26+ zeile = f'msgid: { msgid } \n '
27+ self .write_divider ()
28+ self .write_output (zeile )
29+ self .write_output (f'divider: { log ["divider" ]} \n ' )
30+ self .write_output (f'running: { log ["running" ]} \n ' )
31+ self .write_output ('\n \n ' )
1632
1733 def handle_message (self , message , from_device ):
1834 zeile = "Header Time: %.4f\n " % (message .header .get_time ())
@@ -28,30 +44,46 @@ def handle_message(self, message, from_device):
2844 elif message .header .msgID == ixcom .data .MessageID .COMMAND :
2945 zeile = "Command: %s\n " % message .payload .get_name ()
3046 self .write_output (zeile )
31- for key in message .payload .data :
32- if key == 'str' :
33- try :
34- tmp = message .payload .data [key ].decode ('ascii' )
35- tmp = tmp .split ('\0 ' )[0 ]
36- zeile = "%s: %s\n " % (key , tmp )
37- except :
38- zeile = "%s: %s\n " % (key , message .payload .data [key ])
39- elif key in ['ip' , 'subnetmask' , 'gateway' , 'defaultAddress' , 'serverAddress' ]:
40- ipbinary = message .payload .data [key ]
41- zeile = "%s: %s\n " % (key , socket .inet_ntoa (struct .pack ('!L' , ipbinary )))
42- elif message .payload .get_name () == 'PARXCOM_LOGLIST2' and 'msgid' in key :
43- value = message .payload .data [key ]
44- if value in ixcom .data .MessagePayloadDictionary :
45- message_class = ixcom .data .MessagePayloadDictionary [value ]
46- zeile = "%s: %s\n " % (key , message_class .get_name ())
47- else :
48- zeile = "%s: %s\n " % (key , message .payload .data [key ])
47+ if isinstance (message .payload , ixcom .data .PARXCOM_LOGLIST2_Payload ):
48+ self .__handle_loglist2 (message )
49+ else :
50+ self .__convert_dict (message .payload .data )
51+ zeile = "\n \n "
4952 self .write_output (zeile )
50- zeile = "\n \n "
53+
54+ def write_divider (self ):
55+ self .write_output ('-' * 10 + '\n ' )
56+
57+
58+ def __convert_dict (self , d ):
59+ for key in d :
60+ if isinstance (d [key ], list ) and isinstance (d [key ][0 ], dict ):
61+ self .write_output (f'{ key } :\n ' )
62+ self ._indent_level += 1
63+ for new_d in d [key ]:
64+ self .write_divider ()
65+ self .__convert_dict (new_d )
66+ self ._indent_level -= 1
67+ else :
68+ self .__convert_key (key , d )
69+
70+ def __convert_key (self , key , d ):
71+ if key in ['ip' , 'subnetmask' , 'gateway' , 'defaultAddress' , 'serverAddress' , 'ipAddress' , 'destAddr' , 'udpAddr' ]:
72+ ipbinary = d [key ]
73+ zeile = "%s: %s\n " % (key , socket .inet_ntoa (struct .pack ('!L' , ipbinary )))
74+ elif isinstance (d [key ], bytes ):
75+ try :
76+ tmp = d [key ].split (b'\0 ' )[0 ]
77+ tmp = tmp .decode ('ascii' )
78+ zeile = "%s: %s\n " % (key , tmp )
79+ except :
80+ zeile = "%s: %s\n " % (key , d [key ])
81+ else :
82+ zeile = "%s: %s\n " % (key , d [key ])
5183 self .write_output (zeile )
5284
5385 def write_output (self , line ):
54- self .outputfile .write (line )
86+ self .outputfile .write (' \t ' * self . _indent_level + line )
5587
5688 def parse_file (self , inputfile ):
5789 while True :
0 commit comments