diff --git a/analytics/static/analytics/js/behavior.js b/analytics/static/analytics/js/behavior.js
index 970f890..b4feb00 100644
--- a/analytics/static/analytics/js/behavior.js
+++ b/analytics/static/analytics/js/behavior.js
@@ -1,9 +1,22 @@
$(document).ready(function(){
selectors_options.init();
+
+ //for month selector
+
+ $('#month_selector').change(function(){
+ $.get('/analytics/amount_active_users_per_day', {month: $(this).val() }).done(function(data){
+ console.log(data);
+ charts.month_heatmap(data);
+
+ });
+ });
+
+
});
+
var selectors_options = {
init: function(){
selectors = $("div.selector");
@@ -66,3 +79,5 @@ var selectors_options = {
$(e).removeAttr("opened"); //remove attribute so it can call API again
},
};
+
+
diff --git a/analytics/static/analytics/js/charts.js b/analytics/static/analytics/js/charts.js
index d73d82b..740c5c3 100644
--- a/analytics/static/analytics/js/charts.js
+++ b/analytics/static/analytics/js/charts.js
@@ -448,6 +448,51 @@ var charts = {
}
});
+ },
+ month_heatmap: function(data){
+
+ if($('#month-chart').length != 0){
+ $('#month-chart').fadeOut();
+ $('#month-chart').remove();
+ }
+ var svg = d3.select('#right-chart-body').append('svg')
+ .attr('width', 300)
+ .attr('height', 200)
+ .attr('id', 'month-chart');
+
+ //color range
+ var color = d3.scaleLinear().range(["#29c8b8", '#149e91']).domain([0, d3.max(data, function(d){ return d.count; })]);
+
+ var rects = svg.selectAll("rect")
+ .data(data)
+ .enter()
+ .append("g");
+ rect_width = 40;
+ rect_height = 40;
+ rects.append("rect")
+ .attr("width", rect_width)
+ .attr("height", rect_height)
+ .attr("class", "day_rect")
+ .attr("x", function(d){
+
+ return rect_width* (d.day % 7);
+ }).attr("y", function(d){
+ return rect_height*(Math.floor(d.day / 7));
+ }).attr("fill", function(d){
+ return color(d.count);
+ });
+
+ rects.append("text")
+ .text( function(d){
+ return d.day;
+ }).attr("fill", "white")
+ .attr("text-anchor", "middle")
+ .attr("x", function(d){
+ return rect_width* (d.day % 7) + rect_width/2;
+ }).attr("y", function(d){
+ return rect_height*(Math.floor(d.day / 7)) + rect_height/2;
+ });
+
}
}
diff --git a/analytics/templates/analytics/general.html b/analytics/templates/analytics/general.html
index 584750d..82df770 100644
--- a/analytics/templates/analytics/general.html
+++ b/analytics/templates/analytics/general.html
@@ -93,8 +93,18 @@
-
-
+
+
{% trans "amount of access in: " %}
+
+
+
+
+
diff --git a/analytics/urls.py b/analytics/urls.py
index 24cadc0..83ecdba 100644
--- a/analytics/urls.py
+++ b/analytics/urls.py
@@ -11,4 +11,5 @@ urlpatterns = [
url(r'^most_accessed_categories/$', views.most_accessed_categories, name = "most_accessed_categories"),
url(r'^most_accessed_resources/$', views.most_accessed_resource_kind, name= "most_accessed_resources"),
url(r'^most_active_users/$', views.most_active_users, name= "most_active_users"),
+ url(r'^amount_active_users_per_day/$', views.most_active_users_in_a_month, name="most_active_users_in_a_month")
]
\ No newline at end of file
diff --git a/analytics/views.py b/analytics/views.py
index 8e07503..432c92b 100644
--- a/analytics/views.py
+++ b/analytics/views.py
@@ -13,6 +13,9 @@ import operator
from django.utils.translation import ugettext_lazy as _
from django.shortcuts import render, get_object_or_404, redirect
+from datetime import date
+import calendar
+
class GeneralView(generic.TemplateView):
template_name = "analytics/general.html"
@@ -26,6 +29,9 @@ class GeneralView(generic.TemplateView):
def get_context_data(self, **kwargs):
context = {}
+
+ context['months'] = [_('January'), _('February'), _('March'), _('April'), _('May'), _('June'), _('July'), _('August'),
+ _('September'), _('October'), _('November'), _('December')]
return context
@@ -55,8 +61,23 @@ def most_used_tags(request):
return JsonResponse(data, safe= False)
-def heatmap(request):
- return None
+def most_active_users_in_a_month(request):
+ params = request.GET
+ days = get_days_of_the_month(params['month'])
+ print(days)
+ data = {}
+ mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7
+ , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12}
+
+
+ for day in days:
+ built_date = date(date.today().year, mappings[params['month']], day)
+ print(built_date)
+ day_count = Log.objects.filter(datetime__date = built_date).count()
+ data[day] = day_count
+
+ data = [{"day": day, "count": day_count} for day, day_count in data.items()]
+ return JsonResponse(data, safe=False)
@@ -136,4 +157,25 @@ def most_active_users(request):
user_object = User.objects.get(id=user['user_id'])
user['image'] = user_object.image_url
user['user'] = user_object.social_name
- return JsonResponse(fifty_users, safe=False)
\ No newline at end of file
+ return JsonResponse(fifty_users, safe=False)
+
+
+def get_days_of_the_month(month):
+
+ #get current year
+ year = date.today().year
+ print(year)
+ print(month)
+ mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7
+ , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12}
+
+ c = calendar.Calendar()
+ days = c.itermonthdays(year, mappings[month])
+ days_set = set()
+ for day in days:
+ days_set.add(day)
+
+ days_set.remove(0) #because 0 is not aan actual day from that month
+ return days_set
+
+
--
libgit2 0.21.2