Commit 97e8e4a25326ce180eacdef34247332c1fe348e8
1 parent
feaf5b50
Exists in
master
and in
2 other branches
improved code readibility as well organization, making it more readable and DRY
Showing
4 changed files
with
59 additions
and
40 deletions
Show diff stats
analytics/static/analytics/js/behavior.js
analytics/templates/analytics/category.html
analytics/urls.py
@@ -4,6 +4,7 @@ from . import views | @@ -4,6 +4,7 @@ from . import views | ||
4 | 4 | ||
5 | urlpatterns = [ | 5 | urlpatterns = [ |
6 | url(r'^view/general/$', views.GeneralView.as_view(), name='view_general'), | 6 | url(r'^view/general/$', views.GeneralView.as_view(), name='view_general'), |
7 | + url(r'^view/category/data$', views.CategoryView.as_view(), name='view_category_data'), | ||
7 | 8 | ||
8 | #"api" callls | 9 | #"api" callls |
9 | url(r'^most_used_tags/$', views.most_used_tags, name="most_used_tags"), | 10 | url(r'^most_used_tags/$', views.most_used_tags, name="most_used_tags"), |
analytics/views.py
@@ -24,7 +24,7 @@ class GeneralView(generic.TemplateView): | @@ -24,7 +24,7 @@ class GeneralView(generic.TemplateView): | ||
24 | def dispatch(self, request, *args, **kwargs): | 24 | def dispatch(self, request, *args, **kwargs): |
25 | 25 | ||
26 | if not request.user.is_staff: | 26 | if not request.user.is_staff: |
27 | - self.template_name = "analytics/category.html" | 27 | + return redirect('analytics:view_category_data') |
28 | return super(GeneralView, self).dispatch(request, *args, **kwargs) | 28 | return super(GeneralView, self).dispatch(request, *args, **kwargs) |
29 | 29 | ||
30 | 30 | ||
@@ -39,8 +39,16 @@ class GeneralView(generic.TemplateView): | @@ -39,8 +39,16 @@ class GeneralView(generic.TemplateView): | ||
39 | 39 | ||
40 | 40 | ||
41 | def most_used_tags(request): | 41 | def most_used_tags(request): |
42 | - tags = Tag.objects.all() | 42 | + |
43 | + | ||
44 | + data = get_most_used_tags() | ||
45 | + data = sorted(data.values(), key = lambda x: x['count'], reverse=True ) | ||
46 | + data = data[:15] #get top 15 tags | ||
47 | + return JsonResponse(data, safe= False) | ||
48 | + | ||
49 | +def get_most_used_tags(): | ||
43 | 50 | ||
51 | + tags = Tag.objects.all() | ||
44 | data = {} | 52 | data = {} |
45 | #grab all references to that tag | 53 | #grab all references to that tag |
46 | for tag in tags: | 54 | for tag in tags: |
@@ -56,30 +64,31 @@ def most_used_tags(request): | @@ -56,30 +64,31 @@ def most_used_tags(request): | ||
56 | else: | 64 | else: |
57 | data[tag.name] = {'name': tag.name} | 65 | data[tag.name] = {'name': tag.name} |
58 | data[tag.name]['count'] = resources_count | 66 | data[tag.name]['count'] = resources_count |
59 | - | ||
60 | - data = sorted(data.values(), key = lambda x: x['count'], reverse=True ) | ||
61 | - data = data[:15] #get top 30 tags | ||
62 | - return JsonResponse(data, safe= False) | 67 | + return data |
63 | 68 | ||
64 | 69 | ||
65 | def most_active_users_in_a_month(request): | 70 | def most_active_users_in_a_month(request): |
66 | params = request.GET | 71 | params = request.GET |
67 | days = get_days_of_the_month(params['month']) | 72 | days = get_days_of_the_month(params['month']) |
68 | - data = {} | ||
69 | mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7 | 73 | mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7 |
70 | , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12} | 74 | , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12} |
71 | 75 | ||
72 | - | 76 | + days_list = [] |
73 | for day in days: | 77 | for day in days: |
74 | - built_date = date(date.today().year, mappings[params['month']], day) | ||
75 | - day_count = Log.objects.filter(datetime__date = built_date).count() | ||
76 | - data[day] = day_count | ||
77 | - | ||
78 | - data = [{"day": day, "count": day_count} for day, day_count in data.items()] | 78 | + built_date = date(date.today().year, mappings[params['month']], day) |
79 | + days_list.append(built_date) | ||
80 | + data = activity_in_timestamp(days_list) | ||
81 | + data = [{"day": day.day, "count": day_count} for day, day_count in data.items()] | ||
79 | return JsonResponse(data, safe=False) | 82 | return JsonResponse(data, safe=False) |
80 | 83 | ||
81 | 84 | ||
85 | +def activity_in_timestamp(days): | ||
86 | + data = {} | ||
87 | + for day in days: | ||
88 | + day_count = Log.objects.filter(datetime__date = day).count() | ||
89 | + data[day] = day_count | ||
82 | 90 | ||
91 | + return data | ||
83 | """ | 92 | """ |
84 | Subject view that returns a list of the most used subjects """ | 93 | Subject view that returns a list of the most used subjects """ |
85 | 94 | ||
@@ -88,44 +97,45 @@ def most_accessed_subjects(request): | @@ -88,44 +97,45 @@ def most_accessed_subjects(request): | ||
88 | data = {} #empty response | 97 | data = {} #empty response |
89 | 98 | ||
90 | data = Log.objects.filter(resource = 'subject') | 99 | data = Log.objects.filter(resource = 'subject') |
91 | - subjects = {} | ||
92 | - for datum in data: | ||
93 | - if datum.context: | ||
94 | - subject_id = datum.context['subject_id'] | ||
95 | - if subject_id in subjects.keys(): | ||
96 | - subjects[subject_id]['count'] = subjects[subject_id]['count'] + 1 | ||
97 | - | ||
98 | - else: | ||
99 | - subjects[subject_id] = {'name': datum.context['subject_name'], 'count': 1 } | ||
100 | - | 100 | + subjects = get_log_count_of_resource(resource='subject') |
101 | #order the values of the dictionary by the count in descendent order | 101 | #order the values of the dictionary by the count in descendent order |
102 | subjects = sorted(subjects.values(), key = lambda x: x['count'], reverse=True ) | 102 | subjects = sorted(subjects.values(), key = lambda x: x['count'], reverse=True ) |
103 | subjects = subjects[:5] | 103 | subjects = subjects[:5] |
104 | 104 | ||
105 | return JsonResponse(subjects, safe=False) | 105 | return JsonResponse(subjects, safe=False) |
106 | 106 | ||
107 | +def get_log_count_of_resource(resource = ''): | ||
108 | + | ||
109 | + data = Log.objects.filter(resource = resource) | ||
110 | + items = {} | ||
111 | + for datum in data: | ||
112 | + if datum.context: | ||
113 | + item_id = datum.context[resource + '_id'] | ||
114 | + if item_id in items.keys(): | ||
115 | + items[item_id]['count'] = items[item_id]['count'] + 1 | ||
116 | + else: | ||
117 | + items[item_id] = {'name': datum.context[resource+'_name'], 'count': 1} | ||
118 | + return items | ||
107 | 119 | ||
108 | 120 | ||
109 | def most_accessed_categories(request): | 121 | def most_accessed_categories(request): |
110 | data = {} | 122 | data = {} |
111 | 123 | ||
112 | data = Log.objects.filter(resource = 'category') | 124 | data = Log.objects.filter(resource = 'category') |
113 | - categories = {} | ||
114 | - for datum in data: | ||
115 | - if datum.context: | ||
116 | - category_id = datum.context['category_id'] | ||
117 | - if category_id in categories.keys(): | ||
118 | - categories[category_id]['count'] = categories[category_id]['count'] + 1 | ||
119 | - else: | ||
120 | - categories[category_id] = {'name': datum.context['category_name'], 'count': 1 } | 125 | + categories = get_log_count_of_resource('category') |
126 | + | ||
127 | + | ||
121 | 128 | ||
122 | categories = sorted(categories.values(), key = lambda x: x['count'], reverse = True) | 129 | categories = sorted(categories.values(), key = lambda x: x['count'], reverse = True) |
123 | categories = categories[:5] | 130 | categories = categories[:5] |
124 | return JsonResponse(categories, safe= False) | 131 | return JsonResponse(categories, safe= False) |
125 | 132 | ||
126 | -def most_accessed_resource_kind(request): | ||
127 | - resources = Resource.objects.distinct() | ||
128 | 133 | ||
134 | +def get_resource_subclasses_count(): | ||
135 | + """ | ||
136 | + get the amount of objects in each sub_class of resource | ||
137 | + """ | ||
138 | + resources = Resource.objects.distinct() | ||
129 | data = {} | 139 | data = {} |
130 | for resource in resources: | 140 | for resource in resources: |
131 | key = resource.__dict__['_my_subclass'] | 141 | key = resource.__dict__['_my_subclass'] |
@@ -134,6 +144,13 @@ def most_accessed_resource_kind(request): | @@ -134,6 +144,13 @@ def most_accessed_resource_kind(request): | ||
134 | else: | 144 | else: |
135 | data[key] = {'name': key, 'count': 1} | 145 | data[key] = {'name': key, 'count': 1} |
136 | 146 | ||
147 | + return data | ||
148 | + | ||
149 | + | ||
150 | +def most_accessed_resource_kind(request): | ||
151 | + | ||
152 | + data = get_resource_subclasses_count() | ||
153 | + | ||
137 | data = sorted(data.values(), key = lambda x: x['count'], reverse= True) | 154 | data = sorted(data.values(), key = lambda x: x['count'], reverse= True) |
138 | mapping = {} | 155 | mapping = {} |
139 | mapping['pdffile'] = str(_('PDF File')) | 156 | mapping['pdffile'] = str(_('PDF File')) |
@@ -183,11 +200,7 @@ def get_days_of_the_week_log(request): | @@ -183,11 +200,7 @@ def get_days_of_the_week_log(request): | ||
183 | date = request.GET['date'] | 200 | date = request.GET['date'] |
184 | date = datetime.strptime( date, '%m/%d/%Y',) | 201 | date = datetime.strptime( date, '%m/%d/%Y',) |
185 | days = get_days_of_the_week(date) | 202 | days = get_days_of_the_week(date) |
186 | - data = {} | ||
187 | - | ||
188 | - for day in days: | ||
189 | - day_count = Log.objects.filter(datetime__date = day).count() | ||
190 | - data[day] = day_count | 203 | + data = activity_in_timestamp(days) |
191 | data = [{"day": day.day, "count": day_count} for day, day_count in data.items()] | 204 | data = [{"day": day.day, "count": day_count} for day, day_count in data.items()] |
192 | 205 | ||
193 | return JsonResponse(data, safe= False) | 206 | return JsonResponse(data, safe= False) |
@@ -198,4 +211,8 @@ def get_days_of_the_week(date): | @@ -198,4 +211,8 @@ def get_days_of_the_week(date): | ||
198 | days_set.append(date) | 211 | days_set.append(date) |
199 | for j in range(1, 7): | 212 | for j in range(1, 7): |
200 | days_set.append(date + timedelta(days=j)) | 213 | days_set.append(date + timedelta(days=j)) |
201 | - return days_set | ||
202 | \ No newline at end of file | 214 | \ No newline at end of file |
215 | + return days_set | ||
216 | + | ||
217 | + | ||
218 | +class CategoryView(generic.TemplateView): | ||
219 | + template_name = "analytics/category.html" |