reworked execution_environment statistics
This commit is contained in:
@ -28,7 +28,42 @@ class ExecutionEnvironmentsController < ApplicationController
|
|||||||
render(json: @docker_client.execute_arbitrary_command(params[:command]))
|
render(json: @docker_client.execute_arbitrary_command(params[:command]))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def working_time_query
|
||||||
|
"""
|
||||||
|
SELECT exercise_id, avg(working_time) as average_time
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT user_id,
|
||||||
|
exercise_id,
|
||||||
|
sum(working_time_new) AS working_time
|
||||||
|
FROM
|
||||||
|
(SELECT user_id,
|
||||||
|
exercise_id,
|
||||||
|
CASE WHEN working_time >= '0:30:00' THEN '0' ELSE working_time END AS working_time_new
|
||||||
|
FROM
|
||||||
|
(SELECT user_id,
|
||||||
|
exercise_id,
|
||||||
|
id,
|
||||||
|
(created_at - lag(created_at) over (PARTITION BY user_id, exercise_id
|
||||||
|
ORDER BY created_at)) AS working_time
|
||||||
|
FROM submissions
|
||||||
|
WHERE exercise_id IN (SELECT ID FROM exercises WHERE execution_environment_id = #{@execution_environment.id})
|
||||||
|
GROUP BY exercise_id, user_id, id) AS foo) AS bar
|
||||||
|
GROUP BY user_id, exercise_id
|
||||||
|
) AS baz GROUP BY exercise_id;
|
||||||
|
"""
|
||||||
|
end
|
||||||
|
|
||||||
def statistics
|
def statistics
|
||||||
|
working_time_statistics = {}
|
||||||
|
ActiveRecord::Base.connection.execute(working_time_query).each do |tuple|
|
||||||
|
working_time_statistics[tuple["exercise_id"].to_i] = tuple
|
||||||
|
end
|
||||||
|
|
||||||
|
render locals: {
|
||||||
|
working_time_statistics: working_time_statistics
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def execution_environment_params
|
def execution_environment_params
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
class ExternalUserPolicy < AdminOnlyPolicy
|
class ExternalUserPolicy < AdminOnlyPolicy
|
||||||
def statistics?
|
def statistics?
|
||||||
admin?
|
admin? || author? || team_member?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -8,7 +8,6 @@ h1 = @execution_environment
|
|||||||
th.header = t(title)
|
th.header = t(title)
|
||||||
tbody
|
tbody
|
||||||
- @execution_environment.exercises.each do |exercise|
|
- @execution_environment.exercises.each do |exercise|
|
||||||
- average_score = exercise.average_score
|
|
||||||
tr
|
tr
|
||||||
td = link_to exercise.title, controller: "exercises", action: "statistics", id: exercise.id
|
td = link_to exercise.title, controller: "exercises", action: "statistics", id: exercise.id
|
||||||
td = exercise.users.distinct.count
|
td = exercise.users.distinct.count
|
||||||
@ -16,4 +15,4 @@ h1 = @execution_environment
|
|||||||
td = exercise.maximum_score
|
td = exercise.maximum_score
|
||||||
td = 100 / exercise.maximum_score * average_score
|
td = 100 / exercise.maximum_score * average_score
|
||||||
td = exercise.average_number_of_submissions
|
td = exercise.average_number_of_submissions
|
||||||
td = exercise.average_working_time
|
td = working_time_statistics[exercise.id]["average_time"]
|
||||||
|
Reference in New Issue
Block a user