@@ -207,25 +207,34 @@ def get_message(self):
207207 capture_start = capture .get_start_time (r_str = False )
208208 if capture_start == 0 :
209209 task = capture .get_task ()
210+ error_message = f'Lacus returned an unknown capture state for task { task .uuid } '
211+ crawlers .set_interactive_session_error_by_capture (capture .uuid , error_message )
210212 task .delete ()
211213 capture .delete ()
212214 self .logger .warning (f'capture UNKNOWN ERROR STATE, { task .uuid } Removed from queue' )
213215 return None
214216 if int (time .time ()) - capture_start > 600 : # TODO ADD in new crawler config
215217 task = capture .get_task ()
216- task .reset ()
217- capture .delete ()
218- self .logger .warning (f'capture UNKNOWN Timeout, { task .uuid } Send back in queue' )
218+ error_message = f'Lacus capture UNKNOWN timeout for task { task .uuid } '
219+ if crawlers .set_interactive_session_error_by_capture (capture .uuid , error_message ):
220+ self .logger .warning (f'capture UNKNOWN Timeout, { task .uuid } Interactive session failed' )
221+ else :
222+ task .reset ()
223+ capture .delete ()
224+ self .logger .warning (f'capture UNKNOWN Timeout, { task .uuid } Send back in queue' )
219225 else :
220226 capture .update (status )
221227 elif status == crawlers .CaptureStatus .QUEUED :
222228 capture_start = capture .get_start_time (r_str = False )
223229 if int (time .time ()) - capture_start > 36000 : # TODO ADD in new crawler config
224230 task = capture .get_task ()
225- task .reset ()
226- capture .delete ()
227- self .logger .warning (
228- f'capture QUEUED Timeout, { task .uuid } , { task .get_url ()} Send back in queue, start_time={ capture_start } ' )
231+ error_message = f'Lacus capture QUEUED timeout for task { task .uuid } '
232+ if crawlers .set_interactive_session_error_by_capture (capture .uuid , error_message ):
233+ self .logger .warning (f'capture QUEUED Timeout, { task .uuid } , { task .get_url ()} Interactive session failed, start_time={ capture_start } ' )
234+ else :
235+ task .reset ()
236+ capture .delete ()
237+ self .logger .warning (f'capture QUEUED Timeout, { task .uuid } , { task .get_url ()} Send back in queue, start_time={ capture_start } ' )
229238 else :
230239 capture .update (status )
231240 print (capture .uuid , crawlers .CaptureStatus (status ).name , int (time .time ()))
@@ -235,9 +244,13 @@ def get_message(self):
235244 # Invalid State
236245 else :
237246 task = capture .get_task ()
238- task .reset ()
239- capture .delete ()
240- self .logger .warning (f'ERROR INVALID CAPTURE STATUS { status } , { task .uuid } Send back in queue' )
247+ error_message = f'Lacus returned invalid capture status { status } for task { task .uuid } '
248+ if crawlers .set_interactive_session_error_by_capture (capture .uuid , error_message ):
249+ self .logger .warning (f'ERROR INVALID CAPTURE STATUS { status } , { task .uuid } Interactive session failed' )
250+ else :
251+ task .reset ()
252+ capture .delete ()
253+ self .logger .warning (f'ERROR INVALID CAPTURE STATUS { status } , { task .uuid } Send back in queue' )
241254
242255 except ConnectionError :
243256 self .logger .warning (f'Lacus ConnectionError, capture { capture .uuid } ' )
@@ -334,6 +347,20 @@ def compute(self, capture): # TODO ADD FUNCTION TO MANUALLY IMPORT ???
334347 entries = self .lacus .get_capture (capture .uuid )
335348
336349 print (entries .get ('status' ))
350+ if task .is_cookiejar_only ():
351+ if entries .get ('error' ):
352+ error_message = str (entries ['error' ])
353+ self .logger .warning (error_message )
354+ crawlers .set_interactive_session_error_by_capture (capture .uuid , error_message )
355+ else :
356+ cookiejar_saved = crawlers .finalize_interactive_cookiejar_session (capture .uuid , entries .get ('storage' , {}))
357+ if cookiejar_saved is False :
358+ crawlers .release_interactive_session_by_capture (capture .uuid , status = 'error' )
359+ else :
360+ crawlers .release_interactive_session_by_capture (capture .uuid , status = 'completed' )
361+ task .remove ()
362+ self .root_item = None
363+ return None
337364 self .har = task .get_har ()
338365 self .screenshot = task .get_screenshot ()
339366 # DEBUG
@@ -399,11 +426,15 @@ def compute(self, capture): # TODO ADD FUNCTION TO MANUALLY IMPORT ???
399426
400427 def save_capture_response (self , capture , task , parent_id , entries ):
401428 filter_page = False
429+ crawled_domain = None
430+ crawled_url = None
402431 print (entries .keys ())
403432 if 'error' in entries :
404433 # TODO IMPROVE ERROR MESSAGE
405434 error_message = str (entries ['error' ])
406435 self .logger .warning (str (entries ['error' ]))
436+ if crawlers .set_interactive_session_error_by_capture (capture .uuid , error_message ):
437+ return False
407438 if error_message .startswith ('Something went poorly' ):
408439 # Timeout, require restart of lacus
409440 if 'Too many open files' in error_message :
@@ -559,11 +590,16 @@ def save_capture_response(self, capture, task, parent_id, entries):
559590 fav = Favicons .create (favicon )
560591 fav .add (item .get_date (), item )
561592
593+ crawled_domain = self .domain .id
594+ crawled_url = last_url
595+
562596 # Next Children
563597 entries_children = entries .get ('children' )
564598 if entries_children :
565599 for children in entries_children :
566600 self .save_capture_response (capture , task , parent_id , children )
601+ if crawled_domain :
602+ crawlers .set_interactive_session_crawled_domain_by_capture (capture .uuid , crawled_domain , url = crawled_url )
567603 return True
568604
569605
0 commit comments