Description:
updated grader list page git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@375 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r175:f0e96dfc88c2 - - 5 files changed: 66 inserted, 26 deleted

@@ -2,7 +2,7
2
2
3 before_filter :admin_authorization
3 before_filter :admin_authorization
4
4
5 - verify :method => :post, :only => ['clear_all'],
5 + verify :method => :post, :only => ['clear_all', 'clear_terminated'],
6 :redirect_to => {:action => 'index'}
6 :redirect_to => {:action => 'index'}
7
7
8 def index
8 def index
@@ -10,9 +10,10
10 end
10 end
11
11
12 def list
12 def list
13 - @grader_processes = GraderProcess.find(:all,
13 + @grader_processes = GraderProcess.find_running_graders
14 - :order => 'updated_at desc')
15 @stalled_processes = GraderProcess.find_stalled_process
14 @stalled_processes = GraderProcess.find_stalled_process
15 +
16 + @terminated_processes = GraderProcess.find_terminated_graders
16
17
17 @last_task = Task.find(:first,
18 @last_task = Task.find(:first,
18 :order => 'created_at DESC')
19 :order => 'created_at DESC')
@@ -26,6 +27,13
26 redirect_to :action => 'list'
27 redirect_to :action => 'list'
27 end
28 end
28
29
30 + def clear_terminated
31 + GraderProcess.find_terminated_graders.each do |p|
32 + p.destroy
33 + end
34 + redirect_to :action => 'list'
35 + end
36 +
29 def clear_all
37 def clear_all
30 GraderProcess.find(:all).each do |p|
38 GraderProcess.find(:all).each do |p|
31 p.destroy
39 p.destroy
@@ -15,18 +15,31
15 grader.active = nil
15 grader.active = nil
16 grader.task_id = nil
16 grader.task_id = nil
17 grader.task_type = nil
17 grader.task_type = nil
18 + grader.terminated = false
18 grader.save
19 grader.save
19 else
20 else
20 grader = GraderProcess.create(:host => host,
21 grader = GraderProcess.create(:host => host,
21 :pid => pid,
22 :pid => pid,
22 - :mode => mode)
23 + :mode => mode,
24 + :terminated => false)
23 end
25 end
24 grader
26 grader
25 end
27 end
28 +
29 + def self.find_running_graders
30 + GraderProcess.find(:all,
31 + :conditions => {:terminated => 0})
32 + end
26
33
27 - def self.find_stalled_process()
34 + def self.find_terminated_graders
28 GraderProcess.find(:all,
35 GraderProcess.find(:all,
29 - :conditions => ["active AND updated_at < ?",
36 + :conditions => "`terminated`")
37 + end
38 +
39 + def self.find_stalled_process
40 + GraderProcess.find(:all,
41 + :conditions => ["(`terminated` = 0) AND active AND " +
42 + "(updated_at < ?)",
30 Time.now.gmtime - GraderProcess.stalled_time])
43 Time.now.gmtime - GraderProcess.stalled_time])
31 end
44 end
32
45
@@ -54,6 +67,11
54 self.save
67 self.save
55 end
68 end
56
69
70 + def terminate
71 + self.terminated = true
72 + self.save
73 + end
74 +
57 protected
75 protected
58
76
59 def self.stalled_time()
77 def self.stalled_time()
@@ -1,18 +1,24
1 + - if grader_list.length!=0
2 + %table.graders
3 + %tr
4 + %th host
5 + %th pid
6 + %th mode
7 + %th last updated
8 + %th type
9 + %th task
10 + - grader_list.each do |grader|
11 + - if grader.active
12 + - c = 'active'
13 + - else
14 + - c = 'inactive'
15 + %tr{:class => c}
16 + = render :partial => 'grader', :locals => {:grader => grader}
17 + - if not grader.terminated
18 + %td= link_to 'stop', {:action => 'stop', :id => grader}
19 + - else
20 + %td= link_to 'clear', {:action => 'clear', :id => grader}
21 + - else
22 + %ul
23 + %li None
1
24
2 - %table.graders
3 - %tr
4 - %th host
5 - %th pid
6 - %th mode
7 - %th last updated
8 - %th type
9 - %th task
10 - - grader_list.each do |grader|
11 - - if grader.active
12 - - c = 'active'
13 - - else
14 - - c = 'inactive'
15 - %tr{:class => c}
16 - = render :partial => 'grader', :locals => {:grader => grader}
17 - %td= link_to 'clear', {:action => 'clear', :id => grader}
18 -
@@ -18,10 +18,17
18 = link_to "#{@last_test_request.id}", :action => 'view', :id => @last_test_request.id, :type => 'TestRequest'
18 = link_to "#{@last_test_request.id}", :action => 'view', :id => @last_test_request.id, :type => 'TestRequest'
19
19
20
20
21 - %h3 Current graders
21 + %h2 Current graders
22
22
23 = render :partial => 'grader_list', :locals => {:grader_list => @grader_processes}
23 = render :partial => 'grader_list', :locals => {:grader_list => @grader_processes}
24
24
25 - %h3 Stalled graders
25 + %h2 Stalled graders
26
26
27 = render :partial => 'grader_list', :locals => {:grader_list => @stalled_processes}
27 = render :partial => 'grader_list', :locals => {:grader_list => @stalled_processes}
28 +
29 + %h2 Terminated graders
30 +
31 + - form_for :clear, nil, :url => {:action => 'clear_terminated'} do |f|
32 + = submit_tag 'Clear data for terminated graders'
33 +
34 + = render :partial => 'grader_list', :locals => {:grader_list => @terminated_processes}
@@ -9,7 +9,7
9 #
9 #
10 # It's strongly recommended to check this file into your version control system.
10 # It's strongly recommended to check this file into your version control system.
11
11
12 - ActiveRecord::Schema.define(:version => 20090416235658) do
12 + ActiveRecord::Schema.define(:version => 20090426131044) do
13
13
14 create_table "announcements", :force => true do |t|
14 create_table "announcements", :force => true do |t|
15 t.string "author"
15 t.string "author"
@@ -51,6 +51,7
51 t.datetime "updated_at"
51 t.datetime "updated_at"
52 t.integer "task_id"
52 t.integer "task_id"
53 t.string "task_type"
53 t.string "task_type"
54 + t.boolean "terminated"
54 end
55 end
55
56
56 add_index "grader_processes", ["host", "pid"], :name => "index_grader_processes_on_ip_and_pid"
57 add_index "grader_processes", ["host", "pid"], :name => "index_grader_processes_on_ip_and_pid"
You need to be logged in to leave comments. Login now