Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ <h3 class="mb-0">{{ all_versions_views_count }}</h3>
<small class="text-muted">All Versions</small>
</div>
</div>
<small class="text-muted"><em>Total number of unique registered users who have viewed this project</em></small>
<small class="text-muted"><em>Total number of unique registered users who have viewed this project.{% if tracking_start_date %} Views tracked since {{ tracking_start_date|date:"F Y" }}.{% endif %}</em></small>
</div>
</div>
</div>
Expand Down
25 changes: 25 additions & 0 deletions physionet-django/project/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1847,6 +1847,7 @@ def test_metrics_detail_page_context(self):
self.assertIn('project_views_count', response.context)
self.assertIn('views_over_time', response.context)
self.assertIn('views_by_version', response.context)
self.assertIn('tracking_start_date', response.context)

def test_metrics_link_on_project_page(self):
"""Project page includes link to metrics detail page."""
Expand Down Expand Up @@ -1882,6 +1883,30 @@ def test_metrics_detail_with_access_data(self):
self.assertEqual(len(response.context['views_by_version']), 1)
self.assertEqual(response.context['views_by_version'][0]['count'], 2)

def test_tracking_start_date_with_views(self):
"""Tracking start date is set when views exist."""
project = PublishedProject.objects.get(title='Demo ECG Signal Toolbox')
user = User.objects.get(email='rgmark@mit.edu')
content_type = ContentType.objects.get_for_model(project)

AccessLog.objects.create(
user=user,
object_id=project.id,
content_type=content_type,
data=''
)

response = self.client.get(reverse('published_project_metrics',
args=(project.slug, project.version)))
self.assertIsNotNone(response.context['tracking_start_date'])

def test_tracking_start_date_without_views(self):
"""Tracking start date is None when no views exist."""
project = PublishedProject.objects.get(title='Demo ECG Signal Toolbox')
response = self.client.get(reverse('published_project_metrics',
args=(project.slug, project.version)))
self.assertIsNone(response.context['tracking_start_date'])

def test_unique_viewers_count(self):
"""AccessLog.unique_viewers_count() returns correct count."""
project = PublishedProject.objects.get(title='Demo ECG Signal Toolbox')
Expand Down
5 changes: 4 additions & 1 deletion physionet-django/project/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -2104,13 +2104,16 @@ def published_project_metrics(request, project_slug, version):
Public metrics page for a published project.
"""
project = get_object_or_404(PublishedProject, slug=project_slug, version=version)
views_over_time = project.views_over_time()
tracking_start_date = views_over_time[0]['month'] if views_over_time else None

return render(request, 'project/published_project_metrics.html', {
'project': project,
'project_views_count': project.view_count(),
'all_versions_views_count': project.view_count(all_versions=True),
'views_over_time': project.views_over_time(),
'views_over_time': views_over_time,
'views_by_version': project.views_by_version(),
'tracking_start_date': tracking_start_date,
})


Expand Down
Loading