Skip to content

Commit

Permalink
Merge pull request #3 from StreamsTech/error-reporting
Browse files Browse the repository at this point in the history
Error reporting
  • Loading branch information
atiq1589 authored Nov 14, 2017
2 parents b4e2886 + cc89554 commit 22f4c87
Show file tree
Hide file tree
Showing 13 changed files with 234 additions and 0 deletions.
Empty file.
3 changes: 3 additions & 0 deletions geonode/error_reporting/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
Empty file.
1 change: 1 addition & 0 deletions geonode/error_reporting/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from django.db import models
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
{% extends "site_base.html" %}
{% load activity_tags social_tags i18n %}

{% block title %}{% trans "Error Logs" %}{% endblock %}

{% block body_outer %}
<br>
<h1>Error Logs</h1>
{% if object_list %}
<div class="table-responsive">
<table class="table table-bordered">
<tr>
<th><b>{% trans "User Name" %}</b></th>
<th><b>{% trans "Level" %}</b></th>
{% comment %}<th><b>Custom Message</b></th>{% endcomment %}
<th><b>{% trans "System Message" %}</b></th>
<th><b>{% trans "Traceback" %}</b></th>
<th><b>{% trans "Created Time" %}</b></th>
</tr>
{% for error in object_list %}
<tr>
<td>{{ error.logger_name }}</td>
<td class="error-level">{{ error.level }}</td>
{% comment %}<td>{{ error.custom_msg }}</td>{% endcomment %}
<td>{{ error.msg }}</td>
<td>{{ error.trace }}</td>
<td>{{ error.create_datetime }}</td>

</tr>
{% endfor %}
</table>
</div>
<div class="text-center">
<nav aria-label="Page navigation">
{% if is_paginated %}
<ul class="pagination">
{% if page_obj.has_previous %}
<li>
<a href="/error/reporting/?page={{ page_obj.previous_page_number }}" aria-label="Previous">
<span aria-hidden="true"><i class="fa fa-angle-double-left" aria-hidden="true"></i></span>
</a>

</li>
{% endif %}
<li>
<span>
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}
</span>
</li>
{% if page_obj.has_next %}
<li>
<a href="/error/reporting/?page={{ page_obj.next_page_number }}" aria-label="Next">
<span aria-hidden="true"><i class="fa fa-angle-double-right" aria-hidden="true"></i></span>
</a>
</li>
{% endif %}
</ul>
{% endif %}
</nav>
</div>
{% else %}
<p>No Error Found!!! &#9786;</p>
{% endif %}

{% endblock %}

{% block extra_head %}
{% endblock %}

{% block extra_script %}
{% endblock %}
3 changes: 3 additions & 0 deletions geonode/error_reporting/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
10 changes: 10 additions & 0 deletions geonode/error_reporting/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

from django.conf.urls import url, include

from .views import ErrorReportingListView

urlpatterns = [

url(r'^', ErrorReportingListView.as_view(), name='error_reporting'),

]
70 changes: 70 additions & 0 deletions geonode/error_reporting/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
from django.views.generic.list import ListView
from django_db_logger.models import StatusLog
from django.utils.html import format_html


# Create your views here.
class ErrorReportingListView(ListView):

template_name = 'error_reporting/error_reporting.html'
model = StatusLog
paginate_by = 50

def get_context_data(self, **kwargs):
context = super(ErrorReportingListView, self).get_context_data(**kwargs)

"""
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
"""

error_object = {
50: format_html(
"<span style='color:{color}; font-weight:{weight}'>{msg}</span>",
color='red',
weight='bold',
msg='CRITICAL'
),
40: format_html(
"<span style='color:{color}; font-weight:{weight}'>{msg}</span>",
color='red',
weight='bold',
msg='ERROR'
),
30: format_html(
"<span style='color:{color}; font-weight:{weight}'>{msg}</span>",
color='orange',
weight='bold',
msg='WARNING'
),
20: format_html(
"<span style='color:{color}; font-weight:{weight}'>{msg}</span>",
color='green',
weight='bold',
msg='INFO'
),
10: format_html(
"<span style='color:{color}; font-weight:{weight}'>{msg}</span>",
color='orange',
weight='bold',
msg='DEBUG'
),
0: format_html(
"<span style='color:{color}; font-weight:{weight}'>{msg}</span>",
color='green',
weight='bold',
msg='NOTSET'
),
}

if context['object_list']:
for error in context['object_list']:
error.level = error_object[int(error.level)]

return context
6 changes: 6 additions & 0 deletions geonode/layers/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ def _resolve_layer(request, typename, permission='base.view_resourcebase',
@login_required
@user_passes_test(manager_or_member)
def layer_upload(request, template='upload/layer_upload.html'):
db_logger = logging.getLogger('db')
if request.method == 'GET':
mosaics = Layer.objects.filter(is_mosaic=True).order_by('name')
ctx = {
Expand Down Expand Up @@ -208,6 +209,7 @@ def layer_upload(request, template='upload/layer_upload.html'):
saved_layer.save()

except Exception as e:
db_logger.exception(e)
exception_type, error, tb = sys.exc_info()
logger.exception(e)
out['success'] = False
Expand Down Expand Up @@ -672,6 +674,7 @@ def layer_change_poc(request, ids, template='layers/layer_change_poc.html'):

@login_required
def layer_replace(request, layername, template='layers/layer_replace.html'):
db_logger = logging.getLogger('db')
layer = _resolve_layer(
request,
layername,
Expand Down Expand Up @@ -718,6 +721,7 @@ def layer_replace(request, layername, template='layers/layer_replace.html'):
'layer_detail', args=[
saved_layer.service_typename])
except Exception as e:
db_logger.exception(e)
out['success'] = False
out['errors'] = str(e)
finally:
Expand All @@ -743,6 +747,7 @@ def layer_replace(request, layername, template='layers/layer_replace.html'):

@login_required
def layer_remove(request, layername, template='layers/layer_remove.html'):
db_logger = logging.getLogger('db')
layer = _resolve_layer(
request,
layername,
Expand All @@ -764,6 +769,7 @@ def layer_remove(request, layername, template='layers/layer_remove.html'):
notify.send(request.user, recipient=recipient, actor=request.user,
target=layer, verb='deleted your layer')
except Exception as e:
db_logger.exception(e)
message = '{0}: {1}.'.format(_('Unable to delete layer'), layer.typename)

if 'referenced by layer group' in getattr(e, 'message', ''):
Expand Down
60 changes: 60 additions & 0 deletions geonode/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,7 @@
'rest_framework_gis',

'geonode.analytics',
'geonode.error_reporting',

#end

Expand Down Expand Up @@ -376,11 +377,15 @@
'suit',
#end

'django_db_logger',


'oauth2_provider',

) + GEONODE_APPS

# TODO: Old settings. Need to delete in future
"""
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
Expand Down Expand Up @@ -426,7 +431,62 @@
"handlers": ["console"], "level": "ERROR", },
},
}
"""

# WARNING: New settings for error logging
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d '
'%(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(asctime)s %(message)s',
},
},
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'null': {
'level': 'ERROR',
'class': 'django.utils.log.NullHandler',
},
'console': {
'level': 'ERROR',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'mail_admins': {
'level': 'ERROR', 'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
},
'db_log': {
'level': 'DEBUG',
'class': 'django_db_logger.db_log_handler.DatabaseLogHandler',
},
},
"loggers": {
'db': {
'handlers': ['db_log'],
'level': 'DEBUG',
},
"django": {
"handlers": ["console"], "level": "ERROR", },
"geonode": {
"handlers": ["console"], "level": "ERROR", },
"gsconfig.catalog": {
"handlers": ["console"], "level": "ERROR", },
"owslib": {
"handlers": ["console"], "level": "ERROR", },
"pycsw": {
"handlers": ["console"], "level": "ERROR", },
},
}
#
# Customizations to built in Django settings required by GeoNode
#
Expand Down
6 changes: 6 additions & 0 deletions geonode/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -842,6 +842,12 @@ <h4 class="modal-title" id="exampleModalLabel"></h4>
<span style="text-align:left;color:#fff;margin-left:-10px;">{% trans "Analytics" %}</span>
</a>
</li>
<li class="c-menu__item">
<a href="{% url "error_reporting" %}" class="c-menu__link">
<img src="{{ STATIC_URL }}geonode/images/user-icon/help.png" alt="Help">
<span style="text-align:left;color:#fff;margin-left:-10px;">{% trans "Error Reporting" %}</span>
</a>
</li>
<li class="c-menu__item">
<a href="{% url "data-folder-backup" %}" class="c-menu__link">
<img src="{{ STATIC_URL }}geonode/images/user-icon/help.png" alt="Help">
Expand Down
3 changes: 3 additions & 0 deletions geonode/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,9 @@

# Analytics
url(r'^analytics/', include('geonode.analytics.urls')),

# Logging and Error Reporting
url(r'^error/reporting/', include('geonode.error_reporting.urls')),
)

if "geonode.contrib.dynamic" in settings.INSTALLED_APPS:
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,4 @@ xmltodict==0.9.2
django-filter==1.0.4
djangorestframework==3.6
djangorestframework-gis==0.11.2
django-db-logger==0.1.6

0 comments on commit 22f4c87

Please sign in to comment.