Skip to content

Commit 3fd7647

Browse files
author
Alessio Fabiani
authored
[Fixes GeoNode#7948] Error handling monitoring module (GeoNode#7995)
* [Fixes GeoNode#7948] Error handling monitoring module * [Fixes GeoNode#7948] Error handling monitoring module
1 parent 39484ba commit 3fd7647

File tree

18 files changed

+84
-79
lines changed

18 files changed

+84
-79
lines changed

geonode/base/__init__.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1717
#
1818
#########################################################################
19+
from functools import wraps
1920

21+
from django.conf import settings
2022
from django.utils.translation import ugettext_noop as _
23+
2124
from geonode.notifications_helper import NotificationsAppConfigBase
2225

2326

@@ -28,3 +31,58 @@ class BaseAppConfig(NotificationsAppConfigBase):
2831
("request_resource_edit", _("Request resource change"),
2932
_("Owner has requested permissions to modify a resource")),
3033
)
34+
35+
36+
def register_url_event(event_type=None):
37+
"""
38+
Decorator on views, which will register url event
39+
40+
usage:
41+
>> register_url_event()(TemplateView.view_as_view())
42+
43+
"""
44+
def _register_url_event(view):
45+
@wraps(view)
46+
def inner(*args, **kwargs):
47+
if settings.MONITORING_ENABLED:
48+
request = args[0]
49+
register_event(request, event_type or 'view', request.path)
50+
return view(*args, **kwargs)
51+
return inner
52+
return _register_url_event
53+
54+
55+
def register_event(request, event_type, resource):
56+
"""
57+
Wrapper function to be used inside views to collect event and resource
58+
59+
@param request Request object
60+
@param event_type name of event type
61+
@param resource string (then resource type will be url) or Resource instance
62+
63+
>>> from geonode.base import register_event
64+
>>> def view(request):
65+
register_event(request, 'view', layer)
66+
"""
67+
if not settings.MONITORING_ENABLED:
68+
return
69+
70+
from geonode.base.models import ResourceBase
71+
if isinstance(resource, str):
72+
resource_type = 'url'
73+
resource_name = request.path
74+
resource_id = None
75+
elif isinstance(resource, ResourceBase):
76+
resource_type = resource.__class__._meta.verbose_name_raw
77+
resource_name = getattr(resource, 'alternate', None) or resource.title
78+
resource_id = resource.id
79+
else:
80+
raise ValueError(f"Invalid resource: {resource}")
81+
if request and hasattr(request, 'register_event'):
82+
request.register_event(event_type, resource_type, resource_name, resource_id)
83+
84+
85+
def register_proxy_event(request):
86+
"""
87+
Process request to geoserver proxy. Extract layer and ows type
88+
"""

geonode/base/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
from geonode.maps.models import Map
4141
from geonode.layers.models import Dataset
4242
from geonode.utils import resolve_object
43-
from geonode.monitoring import register_event
43+
from geonode.base import register_event
4444
from geonode.documents.models import Document
4545
from geonode.groups.models import GroupProfile
4646
from geonode.tasks.tasks import set_permissions

geonode/documents/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from .views import DocumentUploadView, DocumentUpdateView
2424
from .views import DocumentAutocomplete
2525
from . import views
26-
from geonode.monitoring import register_url_event
26+
from geonode.base import register_url_event
2727

2828
js_info_dict = {
2929
'packages': ('geonode.documents',),

geonode/documents/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434

3535
# Geonode functionality
3636
from geonode.documents.models import Document
37-
from geonode.monitoring import register_event
37+
from geonode.base import register_event
3838
from geonode.monitoring.models import EventType
3939

4040
logger = logging.getLogger(__name__)

geonode/documents/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
from geonode.base.views import batch_modify
4545
from geonode.utils import build_social_links
4646
from geonode.people.forms import ProfileForm
47-
from geonode.monitoring import register_event
47+
from geonode.base import register_event
4848
from geonode.base.bbox_utils import BBOXHelper
4949
from geonode.groups.models import GroupProfile
5050
from geonode.monitoring.models import EventType

geonode/geoapps/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from django.conf.urls import url, include
2020
from django.views.generic import TemplateView
2121

22-
from geonode.monitoring import register_url_event
22+
from geonode.base import register_url_event
2323

2424
from . import views
2525

geonode/geoapps/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from django.views.decorators.clickjacking import xframe_options_sameorigin
3636

3737
from geonode.people.forms import ProfileForm
38-
from geonode.monitoring import register_event
38+
from geonode.base import register_event
3939
from geonode.groups.models import GroupProfile
4040
from geonode.monitoring.models import EventType
4141
from geonode.base.auth import get_or_create_token

geonode/layers/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from geonode.utils import check_ogc_backend
2222
from django.conf.urls import url, include
2323
from django.views.generic import TemplateView
24-
from geonode.monitoring import register_url_event
24+
from geonode.base import register_url_event
2525

2626
from . import views
2727

geonode/layers/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282
validate_input_source)
8383
from geonode.maps.models import Map
8484
from geonode.services.models import Service
85-
from geonode.monitoring import register_event
85+
from geonode.base import register_event
8686
from geonode.monitoring.models import EventType
8787
from geonode.groups.models import GroupProfile
8888
from geonode.security.views import _perms_info_json

geonode/maps/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from django.conf.urls import url, include
2121
from django.views.generic import TemplateView
22-
from geonode.monitoring import register_url_event
22+
from geonode.base import register_url_event
2323

2424
from . import views
2525

0 commit comments

Comments
 (0)