Good idea!

On Oct 25, 6:37 am, selecta <gr...@delarue-berlin.de> wrote:
> Quite a while ago I wrote some code for my issue tracker to show error
> tickets by their number of occurrence.
> The Idea behind this is that you will see the error that appears most
> frequently and that needs fixing immediately. Since I am too busy to
> finish the issue tracker I will just share the relevant code
>
> screenshothttp://jaguar.biologie.hu-berlin.de/~fkrause/screenshot_error_frequec...
>
> the controller
>
> error_files_base =
> os.path.join(request.env.web2py_path,'applications',request.application,'errors')
> def errors():
>    import operator
>    import os.path
>    import hashlib
>    import os
>    import pickle
>     #------------------------------------------
>     if request.vars.has_key('del'):
>         for fn in os.listdir(error_files_base):
>             try:
>                 error =
> pickle.load(open(os.path.join(error_files_base,fn),'r'))
>             except IOError:
>                 continue
>             hash = hashlib.md5(error['traceback']).hexdigest()
>             if request.vars['del'] == hash:
>                 os.remove( os.path.join(error_files_base,fn) )
>     #------------------------------------------
>
>     hash2error = dict()
>     for fn in os.listdir(error_files_base):
>         try:
>             error =
> pickle.load(open(os.path.join(error_files_base,fn),'r'))
>         except IOError:
>             continue
>         hash = hashlib.md5(error['traceback']).hexdigest()
>         try:
>             hash2error[hash]['count'] += 1
>         except KeyError:
>             error_lines = error['traceback'].split("\n")
>             last_line = error_lines[-2]
>             error_causer = os.path.split(error['layer'])[1]
>             hash2error[hash] = dict(count = 1, pickel = error, causer
> = error_causer, last_line = last_line, hash = hash)
>
>     decorated = [(x['count'],x) for x in hash2error.values()]
>     decorated.sort(key=operator.itemgetter(0), reverse=True)
>     return dict(errors = [x[1] for x in decorated])
>
> the view
>
> <table id='trck_errors'>
> {{=THEAD(TR(TH('Delete'), TH('Count'), TH('File'), TH('Error')))}}
> <tbody>
> {{for e in errors:}}
> {{=TR(TD(BUTTON_DELETE(e['hash'])),
> TH(e['count']),TD(e['causer']),TD(e['last_line']),
> _onclick="collapse('%s');"%e['hash'])}}{{=TR(TD(DIV(CODE(e['pickel']
> ['traceback']), _id=e['hash']),_colspan=4 ))}}
> {{pass}}
> </tbody>
> </table>
> <script> $(document).ready(function(){
>     $('{{for e in errors:}}#{{=e['hash']}}, {{pass}}').hide();
>     }); </script>
>
> feel free to use and improve

Reply via email to