Commit 97e8e4a25326ce180eacdef34247332c1fe348e8

Authored by Felipe Bormann
1 parent feaf5b50

improved code readibility as well organization, making it more readable and DRY

analytics/static/analytics/js/behavior.js
@@ -24,6 +24,7 @@ $(document).ready(function(){ @@ -24,6 +24,7 @@ $(document).ready(function(){
24 }); 24 });
25 25
26 26
  27 +
27 28
28 }); 29 });
29 30
analytics/templates/analytics/category.html
@@ -21,5 +21,5 @@ @@ -21,5 +21,5 @@
21 21
22 22
23 {% block content %} 23 {% block content %}
24 - test 24 +
25 {% endblock content %} 25 {% endblock content %}
26 \ No newline at end of file 26 \ No newline at end of file
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"