[Bio] / FigWebServices / seed_ctl.cgi Repository:
ViewVC logotype

Annotation of /FigWebServices/seed_ctl.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.6 - (view) (download)

1 : olson 1.1 #
2 :     # SEED control panel.
3 :     #
4 :     # Functionality:
5 :     #
6 :     # Show info about this seed
7 :     # Enable / disable SEED
8 :     # Remake indexes
9 :     # Switch code versions
10 :     #
11 :    
12 :     use FIG;
13 :     #$FIG_Config::dbport =3000;
14 : olson 1.4 use JobScheduler;
15 : olson 1.1
16 :     use strict;
17 :    
18 : olson 1.3 use Text::Wrap;
19 : olson 1.1 use POSIX;
20 :    
21 :     use CGI;
22 :     my $cgi = new CGI;
23 :    
24 :     use HTML;
25 :     my @html = ();
26 :    
27 :     my $fig;
28 :     my $ok = eval {
29 :     $fig = new FIG;
30 :     };
31 :    
32 :     #
33 :     # Common dirs.
34 :     #
35 :    
36 :     my $job_dir = "$FIG_Config::data/Global/background_jobs";
37 :     my $down_file = "$FIG_Config::data/Global/why_down";
38 :    
39 :     #
40 :     # Handle actions first.
41 :     #
42 :    
43 :     if ($cgi->param('enable_server'))
44 :     {
45 :     push(@html, $cgi->p("Enabling server."));
46 :    
47 :    
48 :     unlink($down_file);
49 :     }
50 :     elsif ($cgi->param('disable_server'))
51 :     {
52 :     push(@html, $cgi->p("Disabling server."));
53 :    
54 :    
55 :     open my $fh, ">$down_file";
56 :     print $fh $cgi->param("disable_reason");
57 :     close($fh);
58 :     }
59 :     elsif ($cgi->param("rebuild_indexes"))
60 :     {
61 :     #
62 :     # Fork a process to run the rebuild scripts.
63 :     #
64 :    
65 : olson 1.3 my $add = "$FIG_Config::bin/add_assertions_of_function";
66 :     my $mkindex = "$FIG_Config::bin/make_indexes";
67 : olson 1.1
68 : olson 1.3 $fig->run_in_background(sub {
69 :    
70 :     print "Running $add\n";
71 :    
72 : olson 1.1 open(my $fh, ">$down_file");
73 :     print $fh "SEED server is rebuilding indexes.\n";
74 :     print $fh "Running $add\n";
75 :     close($fh);
76 : olson 1.3
77 : olson 1.1 system($add);
78 : olson 1.3
79 :     print "Running $mkindex\n";
80 :    
81 : olson 1.1 open my $fh, ">>$down_file";
82 :     print $fh "Running $mkindex\n";
83 :     close($fh);
84 : olson 1.3
85 : olson 1.1 system($mkindex);
86 : olson 1.3
87 :     print "Complete\n";
88 :    
89 : olson 1.1 unlink($down_file);
90 : olson 1.3 });
91 : olson 1.1 }
92 : redwards 1.6 elsif ($cgi->param("rebuild_subsys_conflicts"))
93 :     {
94 :     #
95 :     # Fork a process to rebuild the subsystem conflicts page
96 :     #
97 :    
98 :     # this should work but doesn't background, so we will do it differently
99 :     my $conflict = "$FIG_Config::bin/fig update_subsys_conflicts";
100 :    
101 :     $fig->run_in_background(sub {
102 :     print "Started updating the subsystem conflicts by running $conflict at ", scalar(localtime(time)), "\n";
103 :     system($conflict);
104 :     print "Finished updating the subsystem conflicts at ", scalar(localtime(time)), "\n";
105 :     });
106 :    
107 :     }
108 :    
109 : olson 1.1
110 :     #
111 :     # Check params list for other actions (that encode names within the param name).
112 :     #
113 :    
114 :     for my $action ($cgi->param)
115 :     {
116 :     if ($action =~ /^delete_job_(\d+)/)
117 :     {
118 : olson 1.2 system("rm -r $job_dir/$1");
119 : olson 1.1 push(@html, $cgi->p("Removed job $1"));
120 :     }
121 :     elsif ($action =~ /^kill_job_(\d+)/)
122 :     {
123 : olson 1.2 my $ret = kill(1, -$1);
124 :     push(@html, $cgi->p("Killed job $1; return code is $ret"));
125 : olson 1.1 }
126 :     }
127 :    
128 :     #
129 :     # Check database
130 :     #
131 :    
132 :     push(@html, $cgi->h1("SEED current status"));
133 :     push(@html, $cgi->start_form(-action => "seed_ctl.cgi"));
134 :     push(@html, $cgi->h2("Database status"));
135 :    
136 :     if (!$ok)
137 :     {
138 :     push(@html, "Database system is unavailable.\n");
139 :     }
140 :     else
141 :     {
142 :     my $dbh = $fig->db_handle;
143 :    
144 :     my $resp = $dbh->SQL("SELECT count(*) from genome");
145 :     if (!$resp or @$resp == 0)
146 :     {
147 :     push(@html, "Could not get count from genome table\n");
148 :     }
149 :     else
150 :     {
151 :     my $c = $resp->[0]->[0];
152 :     push(@html, "Database live: found $c genomes\n");
153 :     }
154 :     }
155 :    
156 :     #
157 :     # Check enabled state.
158 :     #
159 :    
160 :     push(@html, $cgi->h2("SEED status"));
161 :    
162 : olson 1.3 my $uptime = `uptime`;
163 :     if ($uptime =~ /load average(s?):\s+(.*)/)
164 :     {
165 :     push(@html, "Server load averages: $2<p>\n");
166 :     }
167 : olson 1.1
168 :     if (-f $down_file)
169 :     {
170 :     my $down_text = `cat $down_file`;
171 :    
172 :     push(@html, $cgi->p("SEED server is down:"));
173 :     push(@html, $cgi->pre($down_text));
174 :     push(@html, $cgi->submit(-value => "Enable SEED server.", -name => "enable_server"));
175 :    
176 :     }
177 :     else
178 :     {
179 :     push(@html, $cgi->p("SEED server is up.\n"));
180 :     push(@html, $cgi->p("To disable SEED server, enter a reason below and click button."));
181 :     push(@html, $cgi->textarea(-name => "disable_reason",
182 :     -rows => 3, -cols => 70));
183 :     push(@html, $cgi->p);
184 :     push(@html, $cgi->submit(-value => "Disable SEED server.", -name => "disable_server"));
185 :     }
186 :    
187 :     push(@html, $cgi->hr);
188 :    
189 :     #
190 : olson 1.4 # Check the asynchronous job queue.
191 :     #
192 :    
193 :     push(@html, $cgi->h2("Job scheduler queue"));
194 :    
195 :     my $js = new JobScheduler;
196 :     my @job_status = $js->get_status();
197 :    
198 :     if (@job_status == 0)
199 :     {
200 :     push(@html, $cgi->p("No jobs in queue"));
201 :     }
202 :     else
203 :     {
204 :     my @t = ();
205 :    
206 :     for my $jent (@job_status)
207 :     {
208 :     my($id, $code, $status) = @$jent;
209 :    
210 :     push(@t, [$cgi->a({name => "job_$id"}, $id), $status]);
211 :     }
212 :    
213 :     push(@html, &HTML::make_table(["Job ID", "Job status"], \@t));
214 :     }
215 :    
216 :    
217 :     #
218 : olson 1.1 # Check for background jobs.
219 :     #
220 :    
221 :     &FIG::verify_dir($job_dir);
222 :    
223 :     push(@html, $cgi->h2("Background jobs"));
224 :     push(@html, "\n");
225 : olson 1.3
226 :     if ($cgi->param("show_output"))
227 :     {
228 :     my $job = $cgi->param("show_output");
229 :    
230 :     push(@html, $cgi->hr);
231 :    
232 :     push(@html, $cgi->h2("Job $job output"));
233 :     open(my $fh, "<$job_dir/$job/OUTPUT");
234 :     push(@html, "<pre>");
235 :    
236 :     while (<$fh>)
237 :     {
238 :     push(@html, $_);
239 :     }
240 :     close($fh);
241 :    
242 :     push(@html, "</pre>");
243 :     push(@html, $cgi->hr);
244 :     }
245 : olson 1.1 opendir(D, $job_dir);
246 :     my @jobs = grep { $_ =~ /^\d+$/ } readdir(D);
247 :    
248 :     if (@jobs > 0)
249 :     {
250 : olson 1.2 my @hdrs;
251 :     my $tbl = [];
252 : olson 1.1
253 : olson 1.2 @hdrs = ("Process", "Running", "Status", "Description", "Output", "Action");
254 : olson 1.1
255 :     for my $job (@jobs)
256 :     {
257 : olson 1.3 my($running, $status, $but, @output, $info, $output);
258 : redwards 1.5
259 :     my $color="#FFFFFF";
260 : olson 1.1 if (kill(0, $job) > 0)
261 :     {
262 : olson 1.2 $running = "Running";
263 : olson 1.1 $but = $cgi->submit(-value => "Kill process", -name => "kill_job_$job");
264 : redwards 1.5 $color="#FF0000";
265 : olson 1.1 }
266 :     else
267 :     {
268 : olson 1.2 $running = "Dead";
269 : redwards 1.6 $but = $cgi->checkbox(-label => "Remove entry", -name => "delete_job_$job");
270 : redwards 1.5 $color="#D3D3D3";
271 : olson 1.1 }
272 :    
273 : olson 1.2 $status = &FIG::file_read("$job_dir/$job/STATUS");
274 :     $info = &FIG::file_read("$job_dir/$job/INFO");
275 : olson 1.3 @output = &FIG::file_read("$job_dir/$job/OUTPUT");
276 :     my $outlink;
277 :    
278 :     if (@output > 10)
279 :     {
280 :     splice(@output, 0, @output - 10);
281 :     my $link = "seed_ctl.cgi?show_output=$job";
282 :     $outlink = "<a href=\"$link\">Show full output</a>\n";
283 :     }
284 : olson 1.2
285 : olson 1.3 $Text::Wrap::columns = 60;
286 :     $output = wrap('', '', @output);
287 :     $output = "<pre>$output\n</pre><br>$outlink\n";
288 : redwards 1.5 push(@$tbl, [$job, [$running, "td style=\"background: $color\""], $status, $info, $output, $but]);
289 : olson 1.1 }
290 : olson 1.2 push(@html, &HTML::make_table(\@hdrs, $tbl));
291 : redwards 1.6 push(@html, $cgi->submit("Process marked deletions"));
292 : olson 1.1 }
293 :     else
294 :     {
295 :     push(@html, $cgi->p("No background jobs running"));
296 :     }
297 :    
298 :     push(@html, $cgi->hr());
299 :    
300 :     #
301 :     # Actions support.
302 :     #
303 :    
304 :     push(@html, $cgi->h1("SEED actions"));
305 :    
306 :     #
307 :     # making indexes.
308 :     #
309 :    
310 :     push(@html, $cgi->h2("Indexes"));
311 :     push(@html, $cgi->p("Recreating indexes can take a while; the SEED server will be unavailable to users while it is running."));
312 : redwards 1.6 push(@html, $cgi->submit(-value => "Rebuild indexes", -name => "rebuild_indexes"), $cgi->p);
313 :     push(@html, $cgi->h2("Subsystem Conflicts"), $cgi->p("Rebuilding the subsystem conflicts will take a few minutes, but the SEED server will keep running"));
314 :     push(@html, $cgi->submit(-value => "Rebuild subsystem conflicts", -name => "rebuild_subsys_conflicts"), $cgi->p); # this will run fig update_subsys_conflicts
315 : olson 1.1
316 :     push(@html, $cgi->end_form);
317 :    
318 :     &HTML::show_page($cgi,\@html);
319 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3