Merge remote-tracking branch 'origin/master' into statistics
This commit is contained in:
@ -2,6 +2,8 @@ $(function() {
|
||||
var CHART_START = window.vis ? vis.moment().add(-1, 'minute') : undefined;
|
||||
var DEFAULT_REFRESH_INTERVAL = 5000;
|
||||
|
||||
var refreshInterval;
|
||||
|
||||
var dataset;
|
||||
var graph;
|
||||
var groups;
|
||||
@ -46,17 +48,21 @@ $(function() {
|
||||
};
|
||||
|
||||
var refreshData = function(callback) {
|
||||
var jqxhr = $.ajax({
|
||||
dataType: 'json',
|
||||
method: 'GET'
|
||||
});
|
||||
jqxhr.done(function(response) {
|
||||
(callback || _.noop)(response);
|
||||
setGroupVisibility(response);
|
||||
updateChartData(response);
|
||||
updateTable(response);
|
||||
requestAnimationFrame(refreshChart);
|
||||
});
|
||||
if (! $.isController('dashboard')) {
|
||||
clearInterval(refreshInterval);
|
||||
} else {
|
||||
var jqxhr = $.ajax({
|
||||
dataType: 'json',
|
||||
method: 'GET'
|
||||
});
|
||||
jqxhr.done(function(response) {
|
||||
(callback || _.noop)(response);
|
||||
setGroupVisibility(response);
|
||||
updateChartData(response);
|
||||
updateTable(response);
|
||||
requestAnimationFrame(refreshChart);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var setGroupVisibility = function(response) {
|
||||
@ -101,6 +107,7 @@ $(function() {
|
||||
initializeChart();
|
||||
refreshData();
|
||||
var refresh_interval = location.search.match(/interval=(\d+)/) ? parseInt(RegExp.$1) : DEFAULT_REFRESH_INTERVAL;
|
||||
setInterval(refreshData, refresh_interval);
|
||||
refreshInterval = setInterval(refreshData, refresh_interval);
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -25,6 +25,11 @@ class SubmissionsController < ApplicationController
|
||||
create_and_respond(object: @submission)
|
||||
end
|
||||
|
||||
def command_substitutions(filename)
|
||||
{class_name: File.basename(filename, File.extname(filename)).camelize, filename: filename, module_name: File.basename(filename, File.extname(filename)).underscore}
|
||||
end
|
||||
private :command_substitutions
|
||||
|
||||
def copy_comments
|
||||
# copy each annotation and set the target_file.id
|
||||
unless(params[:annotations_arr].nil?)
|
||||
@ -88,6 +93,11 @@ class SubmissionsController < ApplicationController
|
||||
# end
|
||||
|
||||
hijack do |tubesock|
|
||||
# probably add:
|
||||
# ensure
|
||||
# #guarantee that the thread is releasing the DB connection after it is done
|
||||
# ActiveRecord::Base.connectionpool.releaseconnection
|
||||
# end
|
||||
Thread.new { EventMachine.run } unless EventMachine.reactor_running? && EventMachine.reactor_thread.alive?
|
||||
|
||||
|
||||
@ -103,7 +113,7 @@ class SubmissionsController < ApplicationController
|
||||
socket = result[:socket]
|
||||
|
||||
socket.on :message do |event|
|
||||
Rails.logger.info("Docker sending: " + event.data)
|
||||
Rails.logger.info( Time.now.getutc.to_s + ": Docker sending: " + event.data)
|
||||
handle_message(event.data, tubesock)
|
||||
end
|
||||
|
||||
@ -112,7 +122,7 @@ class SubmissionsController < ApplicationController
|
||||
end
|
||||
|
||||
tubesock.onmessage do |data|
|
||||
Rails.logger.debug("Client sending: " + data)
|
||||
Rails.logger.info(Time.now.getutc.to_s + ": Client sending: " + data)
|
||||
# Check wether the client send a JSON command and kill container
|
||||
# if the command is 'exit', send it to docker otherwise.
|
||||
begin
|
||||
@ -122,9 +132,11 @@ class SubmissionsController < ApplicationController
|
||||
@docker_client.exit_container(result[:container])
|
||||
else
|
||||
socket.send data
|
||||
Rails.logger.debug('Sent the received client data to docker:' + data)
|
||||
end
|
||||
rescue JSON::ParserError
|
||||
socket.send data
|
||||
Rails.logger.debug('Rescued parsing error, sent the received client data to docker:' + data)
|
||||
end
|
||||
end
|
||||
else
|
||||
@ -145,8 +157,8 @@ class SubmissionsController < ApplicationController
|
||||
kill_socket(tubesock)
|
||||
else
|
||||
# Filter out information about run_command, test_command, user or working directory
|
||||
run_command = @submission.execution_environment.run_command
|
||||
test_command = @submission.execution_environment.test_command
|
||||
run_command = @submission.execution_environment.run_command % command_substitutions(params[:filename])
|
||||
test_command = @submission.execution_environment.test_command % command_substitutions(params[:filename])
|
||||
if !(/root|workspace|#{run_command}|#{test_command}/.match(message))
|
||||
parse_message(message, 'stdout', tubesock)
|
||||
end
|
||||
@ -157,6 +169,7 @@ class SubmissionsController < ApplicationController
|
||||
begin
|
||||
parsed = JSON.parse(message)
|
||||
socket.send_data message
|
||||
Rails.logger.info('parse_message sent: ' + message)
|
||||
rescue JSON::ParserError => e
|
||||
# Check wether the message contains multiple lines, if true try to parse each line
|
||||
if ((recursive == true) && (message.include? "\n"))
|
||||
@ -166,6 +179,7 @@ class SubmissionsController < ApplicationController
|
||||
else
|
||||
parsed = {'cmd'=>'write','stream'=>output_stream,'data'=>message}
|
||||
socket.send_data JSON.dump(parsed)
|
||||
Rails.logger.info('parse_message sent: ' + JSON.dump(parsed))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -6,6 +6,7 @@ h1 = ExecutionEnvironment.model_name.human(count: 2)
|
||||
tr
|
||||
th = t('activerecord.attributes.execution_environment.name')
|
||||
th = t('activerecord.attributes.execution_environment.user')
|
||||
th = t('activerecord.attributes.execution_environment.pool_size')
|
||||
th = t('activerecord.attributes.execution_environment.memory_limit')
|
||||
th = t('activerecord.attributes.execution_environment.network_enabled')
|
||||
th = t('activerecord.attributes.execution_environment.permitted_execution_time')
|
||||
@ -16,6 +17,7 @@ h1 = ExecutionEnvironment.model_name.human(count: 2)
|
||||
tr
|
||||
td = execution_environment.name
|
||||
td = link_to(execution_environment.author, execution_environment.author)
|
||||
td = execution_environment.pool_size
|
||||
td = execution_environment.memory_limit
|
||||
td = symbol_for(execution_environment.network_enabled)
|
||||
td = execution_environment.permitted_execution_time
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
span.badge.pull-right.score
|
||||
|
||||
p.lead = @exercise.description
|
||||
p.lead = render_markdown(@exercise.description)
|
||||
|
||||
#alert.alert.alert-danger role='alert'
|
||||
h4 = t('.alert.title')
|
||||
|
@ -4,6 +4,14 @@
|
||||
<%
|
||||
|
||||
user = @request_for_comment.user
|
||||
submission_id = self.class.connection.execute("select id from submissions
|
||||
where exercise_id =
|
||||
#{@request_for_comment.exercise_id} AND
|
||||
user_id = #{@request_for_comment.user_id} AND
|
||||
#{@request_for_comment.user_id} > created_at
|
||||
order by created_at desc
|
||||
limit 1").first['id'].to_i
|
||||
submission = Submission.find(submission_id)
|
||||
|
||||
%>
|
||||
<%= user %> | <%= @request_for_comment.requested_at %>
|
||||
|
Reference in New Issue
Block a user