76 # We don't do passphrase input etc. |
76 # We don't do passphrase input etc. |
77 self.proc.stdin.close() |
77 self.proc.stdin.close() |
78 |
78 |
79 def read_result(self): |
79 def read_result(self): |
80 stream=self.proc.stdout |
80 stream=self.proc.stdout |
81 line=stream.read(-1) |
81 try: |
|
82 line=stream.read(-1) |
|
83 except Exception: |
|
84 logger.exception('Borg stdout pipe read failed') |
|
85 |
82 if line==b'': |
86 if line==b'': |
83 logger.debug('Borg stdout pipe EOF?') |
87 #logger.debug('Borg stdout pipe EOF?') |
84 return None |
88 return None |
85 |
89 |
86 try: |
90 try: |
87 return json.loads(line) |
91 return json.loads(line.decode()) |
88 except Exception as err: |
92 except Exception: |
89 logger.warning('JSON parse failed on: "%s"' % line) |
93 logger.exception('JSON parse failed on: %s' % str(line)) |
90 return None |
94 return None |
91 |
95 |
92 def read_log(self): |
96 def read_log(self): |
93 stream=self.proc.stderr |
97 stream=self.proc.stderr |
94 try: |
98 try: |
95 line=stream.readline() |
99 line=stream.readline() |
96 except err: |
100 except Exception: |
97 logger.debug('Pipe read failed: %s' % str(err)) |
101 logger.exception('Pipe stderr pipe read failed') |
98 |
102 |
99 return {'type': 'log_message', |
103 return {'type': 'log_message', |
100 'levelname': 'CRITICAL', |
104 'levelname': 'CRITICAL', |
101 'name': 'borgend.instance.BorgInstance', |
105 'name': 'borgend.instance.BorgInstance', |
102 'msgid': 'Borgend.Exception', |
106 'msgid': 'Borgend.Exception', |
103 'message': err} |
107 'message': err} |
104 |
108 |
105 if line==b'': |
109 if line==b'': |
106 |
110 #logger.debug('Borg stderr pipe EOF?') |
107 logger.debug('Borg stderr pipe EOF?') |
|
108 |
|
109 return None |
111 return None |
110 |
112 |
|
113 |
111 try: |
114 try: |
112 res=json.loads(line) |
115 res=json.loads(line.decode()) |
113 if 'type' not in res: |
116 if 'type' not in res: |
114 res['type']='UNKNOWN' |
117 res['type']='UNKNOWN' |
115 return res |
118 return res |
116 except: |
119 except: |
117 logger.debug('JSON parse failed on: "%s"' % str(line)) |
120 logger.exception('JSON parse failed on: %s' % str(line)) |
118 |
121 |
119 errmsg=line |
122 errmsg=line |
120 for line in iter(stream.readline, b''): |
123 for line in iter(stream.readline, b''): |
121 errmsg=errmsg+line |
124 errmsg=errmsg+line |
122 |
125 |