Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
event-tracking
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
event-tracking
Commits
ff00c87e
Commit
ff00c87e
authored
Sep 30, 2013
by
Gabe Mulley
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rename event to emit
parent
f7d1bd88
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
22 additions
and
21 deletions
+22
-21
README.rst
+4
-3
eventtracking/backends/tests/test_mongodb_integration.py
+1
-1
eventtracking/backends/tests/test_mongodb_performance.py
+1
-1
eventtracking/django/middleware.py
+1
-1
eventtracking/django/tests/test_middleware.py
+1
-1
eventtracking/tests/test_track.py
+9
-9
eventtracking/track.py
+5
-5
No files found.
README.rst
View file @
ff00c87e
...
@@ -13,6 +13,7 @@ backends for persisting the event data. When the application emits an event
...
@@ -13,6 +13,7 @@ backends for persisting the event data. When the application emits an event
each backend will be given an opportunity to save the event to stable storage.
each backend will be given an opportunity to save the event to stable storage.
It currently provides:
It currently provides:
* Nested contexts - allows data to be injected into events even without
* Nested contexts - allows data to be injected into events even without
having to pass around all of said data to every location where the events
having to pass around all of said data to every location where the events
are emitted.
are emitted.
...
@@ -25,12 +26,12 @@ Example::
...
@@ -25,12 +26,12 @@ Example::
tracker = track.get_tracker()
tracker = track.get_tracker()
tracker.enter_context('outer', {'user_id': 10938})
tracker.enter_context('outer', {'user_id': 10938})
tracker.e
ven
t('navigation.request', {'url': 'http://www.edx.org/some/path/1'})
tracker.e
mi
t('navigation.request', {'url': 'http://www.edx.org/some/path/1'})
with tracker.context({'user_id': 11111, 'session_id': '2987lkjdyoioey'}):
with tracker.context({'user_id': 11111, 'session_id': '2987lkjdyoioey'}):
tracker.e
ven
t('navigation.request', {'url': 'http://www.edx.org/some/path/2'})
tracker.e
mi
t('navigation.request', {'url': 'http://www.edx.org/some/path/2'})
tracker.e
ven
t('navigation.request', {'url': 'http://www.edx.org/some/path/3'})
tracker.e
mi
t('navigation.request', {'url': 'http://www.edx.org/some/path/3'})
# The following list shows the contexts and data for the three events that
# The following list shows the contexts and data for the three events that
# are emitted
# are emitted
...
...
eventtracking/backends/tests/test_mongodb_integration.py
View file @
ff00c87e
...
@@ -38,7 +38,7 @@ class TestMongoIntegration(IntegrationTestCase):
...
@@ -38,7 +38,7 @@ class TestMongoIntegration(IntegrationTestCase):
def
test_sequential_events
(
self
):
def
test_sequential_events
(
self
):
now
=
datetime
.
now
(
UTC
)
now
=
datetime
.
now
(
UTC
)
for
i
in
range
(
10
):
for
i
in
range
(
10
):
self
.
tracker
.
e
ven
t
(
'org.test.user.login'
,
{
self
.
tracker
.
e
mi
t
(
'org.test.user.login'
,
{
'username'
:
'tester'
,
'username'
:
'tester'
,
'user_id'
:
10
,
'user_id'
:
10
,
'email'
:
'tester@eventtracking.org'
,
'email'
:
'tester@eventtracking.org'
,
...
...
eventtracking/backends/tests/test_mongodb_performance.py
View file @
ff00c87e
...
@@ -31,7 +31,7 @@ class TestBackendPerformance(PerformanceTestCase):
...
@@ -31,7 +31,7 @@ class TestBackendPerformance(PerformanceTestCase):
def
test_sequential_events
(
self
):
def
test_sequential_events
(
self
):
with
self
.
assert_execution_time_less_than_threshold
():
with
self
.
assert_execution_time_less_than_threshold
():
for
i
in
range
(
self
.
num_events
):
for
i
in
range
(
self
.
num_events
):
self
.
tracker
.
e
ven
t
(
'perf.event'
,
{
self
.
tracker
.
e
mi
t
(
'perf.event'
,
{
'sequence'
:
i
,
'sequence'
:
i
,
'payload'
:
self
.
random_payload
'payload'
:
self
.
random_payload
})
})
eventtracking/django/middleware.py
View file @
ff00c87e
...
@@ -133,7 +133,7 @@ class TrackRequestMiddleware(object):
...
@@ -133,7 +133,7 @@ class TrackRequestMiddleware(object):
'query'
:
self
.
_remove_sensitive_request_variables
(
request
.
GET
),
'query'
:
self
.
_remove_sensitive_request_variables
(
request
.
GET
),
'body'
:
self
.
_remove_sensitive_request_variables
(
request
.
POST
)
'body'
:
self
.
_remove_sensitive_request_variables
(
request
.
POST
)
}
}
track
.
e
ven
t
(
event_type
,
event
)
track
.
e
mi
t
(
event_type
,
event
)
return
response
return
response
...
...
eventtracking/django/tests/test_middleware.py
View file @
ff00c87e
...
@@ -55,7 +55,7 @@ class TestTrackRequestMiddleware(TestCase):
...
@@ -55,7 +55,7 @@ class TestTrackRequestMiddleware(TestCase):
self
.
track_middleware
=
TrackRequestMiddleware
()
self
.
track_middleware
=
TrackRequestMiddleware
()
self
.
request_factory
=
RequestFactory
()
self
.
request_factory
=
RequestFactory
()
track_patcher
=
patch
(
'eventtracking.django.middleware.track.e
ven
t'
)
track_patcher
=
patch
(
'eventtracking.django.middleware.track.e
mi
t'
)
self
.
mock_track
=
track_patcher
.
start
()
self
.
mock_track
=
track_patcher
.
start
()
self
.
addCleanup
(
track_patcher
.
stop
)
self
.
addCleanup
(
track_patcher
.
stop
)
...
...
eventtracking/tests/test_track.py
View file @
ff00c87e
...
@@ -48,7 +48,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
...
@@ -48,7 +48,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
return
self
.
tracker
.
get_backend
(
'mock{0}'
.
format
(
index
))
return
self
.
tracker
.
get_backend
(
'mock{0}'
.
format
(
index
))
def
test_event_simple_event_without_data
(
self
):
def
test_event_simple_event_without_data
(
self
):
self
.
tracker
.
e
ven
t
(
sentinel
.
event_type
)
self
.
tracker
.
e
mi
t
(
sentinel
.
event_type
)
self
.
assert_backend_called_with
(
sentinel
.
event_type
)
self
.
assert_backend_called_with
(
sentinel
.
event_type
)
...
@@ -85,7 +85,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
...
@@ -85,7 +85,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
)
)
def
test_event_simple_event_without_type
(
self
):
def
test_event_simple_event_without_type
(
self
):
self
.
tracker
.
e
ven
t
(
data
=
{
sentinel
.
key
:
sentinel
.
value
})
self
.
tracker
.
e
mi
t
(
data
=
{
sentinel
.
key
:
sentinel
.
value
})
self
.
assert_backend_called_with
(
self
.
assert_backend_called_with
(
'unknown'
,
'unknown'
,
...
@@ -95,14 +95,14 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
...
@@ -95,14 +95,14 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
)
)
def
test_event_simple_event_without_type_or_data
(
self
):
def
test_event_simple_event_without_type_or_data
(
self
):
self
.
tracker
.
e
ven
t
()
self
.
tracker
.
e
mi
t
()
self
.
assert_backend_called_with
(
self
.
assert_backend_called_with
(
'unknown'
,
'unknown'
,
{}
{}
)
)
def
test_event_simple_event_with_data
(
self
):
def
test_event_simple_event_with_data
(
self
):
self
.
tracker
.
e
ven
t
(
self
.
tracker
.
e
mi
t
(
sentinel
.
event_type
,
sentinel
.
event_type
,
{
{
sentinel
.
key
:
sentinel
.
value
sentinel
.
key
:
sentinel
.
value
...
@@ -118,7 +118,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
...
@@ -118,7 +118,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
def
test_multiple_backends
(
self
):
def
test_multiple_backends
(
self
):
self
.
configure_mock_backends
(
2
)
self
.
configure_mock_backends
(
2
)
self
.
tracker
.
e
ven
t
(
sentinel
.
event_type
)
self
.
tracker
.
e
mi
t
(
sentinel
.
event_type
)
for
backend
in
self
.
_mock_backends
:
for
backend
in
self
.
_mock_backends
:
self
.
assert_backend_called_with
(
self
.
assert_backend_called_with
(
...
@@ -128,13 +128,13 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
...
@@ -128,13 +128,13 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
self
.
configure_mock_backends
(
2
)
self
.
configure_mock_backends
(
2
)
self
.
get_mock_backend
(
0
)
.
send
.
side_effect
=
Exception
self
.
get_mock_backend
(
0
)
.
send
.
side_effect
=
Exception
self
.
tracker
.
e
ven
t
(
sentinel
.
event_type
)
self
.
tracker
.
e
mi
t
(
sentinel
.
event_type
)
self
.
assert_backend_called_with
(
self
.
assert_backend_called_with
(
sentinel
.
event_type
,
backend
=
self
.
get_mock_backend
(
1
))
sentinel
.
event_type
,
backend
=
self
.
get_mock_backend
(
1
))
def
test_global_tracker
(
self
):
def
test_global_tracker
(
self
):
track
.
e
ven
t
(
sentinel
.
event_type
)
track
.
e
mi
t
(
sentinel
.
event_type
)
self
.
assert_backend_called_with
(
self
.
assert_backend_called_with
(
sentinel
.
event_type
)
sentinel
.
event_type
)
...
@@ -147,7 +147,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
...
@@ -147,7 +147,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
data
=
{
sentinel
.
key
:
sentinel
.
value
}
data
=
{
sentinel
.
key
:
sentinel
.
value
}
self
.
tracker
.
enter_context
(
'single'
,
context
)
self
.
tracker
.
enter_context
(
'single'
,
context
)
self
.
tracker
.
e
ven
t
(
sentinel
.
event_type
,
data
)
self
.
tracker
.
e
mi
t
(
sentinel
.
event_type
,
data
)
self
.
tracker
.
exit_context
(
'single'
)
self
.
tracker
.
exit_context
(
'single'
)
self
.
assert_backend_called_with
(
self
.
assert_backend_called_with
(
...
@@ -166,7 +166,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
...
@@ -166,7 +166,7 @@ class TestTrack(TestCase): # pylint: disable=missing-docstring
}
}
self
.
tracker
.
enter_context
(
'outer'
,
context
)
self
.
tracker
.
enter_context
(
'outer'
,
context
)
self
.
tracker
.
enter_context
(
'inner'
,
override_context
)
self
.
tracker
.
enter_context
(
'inner'
,
override_context
)
self
.
tracker
.
e
ven
t
(
sentinel
.
event_type
)
self
.
tracker
.
e
mi
t
(
sentinel
.
event_type
)
self
.
tracker
.
exit_context
(
'inner'
)
self
.
tracker
.
exit_context
(
'inner'
)
self
.
tracker
.
exit_context
(
'outer'
)
self
.
tracker
.
exit_context
(
'outer'
)
...
...
eventtracking/track.py
View file @
ff00c87e
...
@@ -49,7 +49,7 @@ class Tracker(object):
...
@@ -49,7 +49,7 @@ class Tracker(object):
"""Gets the backend that was configured with `name`"""
"""Gets the backend that was configured with `name`"""
return
self
.
backends
[
name
]
return
self
.
backends
[
name
]
def
e
ven
t
(
self
,
event_type
=
None
,
data
=
None
):
def
e
mi
t
(
self
,
event_type
=
None
,
data
=
None
):
"""
"""
Emit an event annotated with the UTC time when this function was called.
Emit an event annotated with the UTC time when this function was called.
...
@@ -105,7 +105,7 @@ def register_tracker(tracker, name=DEFAULT_TRACKER_NAME):
...
@@ -105,7 +105,7 @@ def register_tracker(tracker, name=DEFAULT_TRACKER_NAME):
"""
"""
Makes a tracker globally accessible. Providing no `name` parameter
Makes a tracker globally accessible. Providing no `name` parameter
allows you to register the global default tracker that will be used
allows you to register the global default tracker that will be used
by subsequent calls to `track.e
ven
t`.
by subsequent calls to `track.e
mi
t`.
"""
"""
TRACKERS
[
name
]
=
tracker
TRACKERS
[
name
]
=
tracker
...
@@ -119,6 +119,6 @@ def get_tracker(name=DEFAULT_TRACKER_NAME):
...
@@ -119,6 +119,6 @@ def get_tracker(name=DEFAULT_TRACKER_NAME):
return
TRACKERS
[
name
]
return
TRACKERS
[
name
]
def
e
ven
t
(
event_type
=
None
,
data
=
None
):
def
e
mi
t
(
event_type
=
None
,
data
=
None
):
"""Calls `Tracker.e
ven
t` on the default global tracker"""
"""Calls `Tracker.e
mi
t` on the default global tracker"""
return
get_tracker
()
.
e
ven
t
(
event_type
=
event_type
,
data
=
data
)
return
get_tracker
()
.
e
mi
t
(
event_type
=
event_type
,
data
=
data
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment