Implement basic diagram
This commit is contained in:
77
app/assets/javascripts/rfc_activity_history.js
Normal file
77
app/assets/javascripts/rfc_activity_history.js
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
$(document).ready(function () {
|
||||||
|
var containerId = 'rfc-activity-history';
|
||||||
|
|
||||||
|
if ($.isController('statistics') && $('.graph#' + containerId).isPresent()) {
|
||||||
|
|
||||||
|
var chartData;
|
||||||
|
var dataset;
|
||||||
|
var graph;
|
||||||
|
var groups;
|
||||||
|
|
||||||
|
var params = new URLSearchParams(window.location.search.slice(1));
|
||||||
|
|
||||||
|
var buildChartGroups = function() {
|
||||||
|
return _.map(chartData, function(element) {
|
||||||
|
return {
|
||||||
|
content: element.name,
|
||||||
|
id: element.key,
|
||||||
|
visible: true,
|
||||||
|
options: {
|
||||||
|
interpolation: false
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var initializeChart = function() {
|
||||||
|
dataset = new vis.DataSet();
|
||||||
|
groups = new vis.DataSet(buildChartGroups());
|
||||||
|
graph = new vis.Graph2d(document.getElementById(containerId), dataset, groups, {
|
||||||
|
dataAxis: {
|
||||||
|
customRange: {
|
||||||
|
left: {
|
||||||
|
min: 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
showMinorLabels: true
|
||||||
|
},
|
||||||
|
drawPoints: {
|
||||||
|
style: 'circle'
|
||||||
|
},
|
||||||
|
legend: true,
|
||||||
|
start: params.get('from'),
|
||||||
|
end: params.get('to')
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var refreshData = function(callback) {
|
||||||
|
var jqxhr = $.ajax('rfc-activity-history.json', {
|
||||||
|
dataType: 'json',
|
||||||
|
data: {from: params.get('from'), to: params.get('to'), interval: params.get('interval')},
|
||||||
|
method: 'GET'
|
||||||
|
});
|
||||||
|
jqxhr.done(function(response) {
|
||||||
|
(callback || _.noop)(response);
|
||||||
|
updateChartData(response);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateChartData = function(response) {
|
||||||
|
_.each(response, function(group) {
|
||||||
|
_.each(group.data, function(data) {
|
||||||
|
dataset.add({
|
||||||
|
group: group.key,
|
||||||
|
x: data.key,
|
||||||
|
y: data.value
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
refreshData(function (data) {
|
||||||
|
chartData = data;
|
||||||
|
$('#' + containerId).parent().find('.spinner').hide();
|
||||||
|
initializeChart();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
@ -37,10 +37,10 @@ class StatisticsController < ApplicationController
|
|||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { render 'rfc_activity_history' }
|
format.html { render 'rfc_activity_history' }
|
||||||
format.json do
|
format.json do
|
||||||
range = params[:range] || 'year'
|
interval = params[:interval] || 'year'
|
||||||
from = DateTime.strptime(params[:from], '%Y') rescue DateTime.new(0)
|
from = DateTime.strptime(params[:from], '%Y') rescue DateTime.new(0)
|
||||||
to = DateTime.strptime(params[:to], '%Y') rescue DateTime.now
|
to = DateTime.strptime(params[:to], '%Y') rescue DateTime.now
|
||||||
render(json: ranged_rfc_data(range, from, to))
|
render(json: ranged_rfc_data(interval, from, to))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -152,37 +152,37 @@ module StatisticsHelper
|
|||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
def ranged_rfc_data(range='year', from=DateTime.new(0), to=DateTime.now)
|
def ranged_rfc_data(interval='year', from=DateTime.new(0), to=DateTime.now)
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
key: 'rfcs',
|
key: 'rfcs',
|
||||||
name: t('activerecord.models.request_for_comment.other'),
|
name: t('activerecord.models.request_for_comment.other'),
|
||||||
data: RequestForComment.in_range(from, to)
|
data: RequestForComment.in_range(from, to)
|
||||||
.select("date_trunc('#{range}', created_at) AS \"range\", count(id)")
|
.select("date_trunc('#{interval}', created_at) AS \"key\", count(id) AS \"value\"")
|
||||||
.group('range').order('range')
|
.group('key').order('key')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'rfcs_solved',
|
key: 'rfcs_solved',
|
||||||
name: t('statistics.entries.request_for_comments.percent_solved'),
|
name: t('statistics.entries.request_for_comments.percent_solved'),
|
||||||
data: RequestForComment.in_range(from, to)
|
data: RequestForComment.in_range(from, to)
|
||||||
.where(solved: true)
|
.where(solved: true)
|
||||||
.select("date_trunc('#{range}', created_at) AS \"range\", count(id)")
|
.select("date_trunc('#{interval}', created_at) AS \"key\", count(id) AS \"value\"")
|
||||||
.group('range').order('range')
|
.group('key').order('key')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'rfcs_soft_solved',
|
key: 'rfcs_soft_solved',
|
||||||
name: t('statistics.entries.request_for_comments.percent_soft_solved'),
|
name: t('statistics.entries.request_for_comments.percent_soft_solved'),
|
||||||
data: RequestForComment.in_range(from, to).unsolved
|
data: RequestForComment.in_range(from, to).unsolved
|
||||||
.where(full_score_reached: true)
|
.where(full_score_reached: true)
|
||||||
.select("date_trunc('#{range}', created_at) AS \"range\", count(id)")
|
.select("date_trunc('#{interval}', created_at) AS \"key\", count(id) AS \"value\"")
|
||||||
.group('range').order('range')
|
.group('key').order('key')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'rfcs_unsolved',
|
key: 'rfcs_unsolved',
|
||||||
name: t('statistics.entries.request_for_comments.percent_unsolved'),
|
name: t('statistics.entries.request_for_comments.percent_unsolved'),
|
||||||
data: RequestForComment.in_range(from, to).unsolved
|
data: RequestForComment.in_range(from, to).unsolved
|
||||||
.select("date_trunc('#{range}', created_at) AS \"range\", count(id)")
|
.select("date_trunc('#{interval}', created_at) AS \"key\", count(id) AS \"value\"")
|
||||||
.group('range').order('range')
|
.group('key').order('key')
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
.title
|
.title
|
||||||
h1 = t('statistics.graphs.rfc_activity')
|
h1 = t('statistics.graphs.rfc_activity')
|
||||||
.spinner
|
.spinner
|
||||||
.graph#rfc-activity
|
.graph#rfc-activity-history
|
||||||
form
|
form
|
||||||
.form-group
|
.form-group
|
||||||
label for="from-date" = t('.from')
|
label for="from-date" = t('.from')
|
||||||
@ -15,8 +15,8 @@
|
|||||||
label for="to-date" = t('.to')
|
label for="to-date" = t('.to')
|
||||||
input type="date" class="form-control" id="to-date" name="to" value=DateTime.now.to_date
|
input type="date" class="form-control" id="to-date" name="to" value=DateTime.now.to_date
|
||||||
.form-group
|
.form-group
|
||||||
label for="range" = t('.interval')
|
label for="interval" = t('.interval')
|
||||||
select class="form-control" id="range" name="range"
|
select class="form-control" id="interval" name="interval"
|
||||||
= [:decade, :year, :month, :day, :hour, :minute, :second].each do | key |
|
= [:decade, :year, :month, :day, :hour, :minute, :second].each do | key |
|
||||||
option selected=(key==:year) = key
|
option selected=(key==:year) = key
|
||||||
button type="submit" class="btn btn-primary" = t('.update')
|
button type="submit" class="btn btn-primary" = t('.update')
|
||||||
|
Reference in New Issue
Block a user