Skip to content
This repository has been archived by the owner on Sep 6, 2021. It is now read-only.

Latest commit

 

History

History
55 lines (34 loc) · 1.75 KB

README.md

File metadata and controls

55 lines (34 loc) · 1.75 KB

Frappe Traceback Collector

A Collector and Formatter for Tracebacks in Frappe

Motivation

Get detailed tracebacks is much more important than get a simple traceback, while you are trying to debug a async routine, with the traceback collector, you can get a full post-mortem report of of the execution of a routine

alt Traceback

How to use?

Usually frappe_traceback_collector will collect all tracebacks raised in the web context, without touch the error handling, thanks to sys.excepthook, you only need install this app in the sites that do you want to collect the tracebacks

Async tasks run in a different context, so for collect tracebacks in async context you need import the collector, and run your function inside a try statement, see the example

from frappe.celery_app import celery_task
from frapee_traceback_collector.collector import collect

@celery_task()
def collect_tickets():
	try:
		path = frappe.get_site_path('tickets')
		if not os.path.exists(path):
			return

		for fname in os.listdir(path):
			fullpath = os.path.join(path, fname)

			with open(fullpath, 'rb') as fcontent:
				data = json.load(fcontent)

			for field in ['locals', 'exception', 'frames']:
				data[field] = json.dumps(data[field])

			doc = frappe.new_doc('Traceback')
			
			doc.update(data)
			doc.save()

			os.remove(fullpath)
	
	except Exception as e:
		collect(e)
		# optionally you can re-raise the error, if you want.
		

This code is present here, and is used by this app to move the file from the disk to the db.

License

MIT