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

Annotation of /FigWebServices/seed_ctl.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (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 :    
93 :     #
94 :     # Check params list for other actions (that encode names within the param name).
95 :     #
96 :    
97 :     for my $action ($cgi->param)
98 :     {
99 :     if ($action =~ /^delete_job_(\d+)/)
100 :     {
101 : olson 1.2 system("rm -r $job_dir/$1");
102 : olson 1.1 push(@html, $cgi->p("Removed job $1"));
103 :     }
104 :     elsif ($action =~ /^kill_job_(\d+)/)
105 :     {
106 : olson 1.2 my $ret = kill(1, -$1);
107 :     push(@html, $cgi->p("Killed job $1; return code is $ret"));
108 : olson 1.1 }
109 :     }
110 :    
111 :     #
112 :     # Check database
113 :     #
114 :    
115 :     push(@html, $cgi->h1("SEED current status"));
116 :     push(@html, $cgi->start_form(-action => "seed_ctl.cgi"));
117 :     push(@html, $cgi->h2("Database status"));
118 :    
119 :     if (!$ok)
120 :     {
121 :     push(@html, "Database system is unavailable.\n");
122 :     }
123 :     else
124 :     {
125 :     my $dbh = $fig->db_handle;
126 :    
127 :     my $resp = $dbh->SQL("SELECT count(*) from genome");
128 :     if (!$resp or @$resp == 0)
129 :     {
130 :     push(@html, "Could not get count from genome table\n");
131 :     }
132 :     else
133 :     {
134 :     my $c = $resp->[0]->[0];
135 :     push(@html, "Database live: found $c genomes\n");
136 :     }
137 :     }
138 :    
139 :     #
140 :     # Check enabled state.
141 :     #
142 :    
143 :     push(@html, $cgi->h2("SEED status"));
144 :    
145 : olson 1.3 my $uptime = `uptime`;
146 :     if ($uptime =~ /load average(s?):\s+(.*)/)
147 :     {
148 :     push(@html, "Server load averages: $2<p>\n");
149 :     }
150 : olson 1.1
151 :     if (-f $down_file)
152 :     {
153 :     my $down_text = `cat $down_file`;
154 :    
155 :     push(@html, $cgi->p("SEED server is down:"));
156 :     push(@html, $cgi->pre($down_text));
157 :     push(@html, $cgi->submit(-value => "Enable SEED server.", -name => "enable_server"));
158 :    
159 :     }
160 :     else
161 :     {
162 :     push(@html, $cgi->p("SEED server is up.\n"));
163 :     push(@html, $cgi->p("To disable SEED server, enter a reason below and click button."));
164 :     push(@html, $cgi->textarea(-name => "disable_reason",
165 :     -rows => 3, -cols => 70));
166 :     push(@html, $cgi->p);
167 :     push(@html, $cgi->submit(-value => "Disable SEED server.", -name => "disable_server"));
168 :     }
169 :    
170 :     push(@html, $cgi->hr);
171 :    
172 :     #
173 : olson 1.4 # Check the asynchronous job queue.
174 :     #
175 :    
176 :     push(@html, $cgi->h2("Job scheduler queue"));
177 :    
178 :     my $js = new JobScheduler;
179 :     my @job_status = $js->get_status();
180 :    
181 :     if (@job_status == 0)
182 :     {
183 :     push(@html, $cgi->p("No jobs in queue"));
184 :     }
185 :     else
186 :     {
187 :     my @t = ();
188 :    
189 :     for my $jent (@job_status)
190 :     {
191 :     my($id, $code, $status) = @$jent;
192 :    
193 :     push(@t, [$cgi->a({name => "job_$id"}, $id), $status]);
194 :     }
195 :    
196 :     push(@html, &HTML::make_table(["Job ID", "Job status"], \@t));
197 :     }
198 :    
199 :    
200 :     #
201 : olson 1.1 # Check for background jobs.
202 :     #
203 :    
204 :     &FIG::verify_dir($job_dir);
205 :    
206 :     push(@html, $cgi->h2("Background jobs"));
207 :     push(@html, "\n");
208 : olson 1.3
209 :     if ($cgi->param("show_output"))
210 :     {
211 :     my $job = $cgi->param("show_output");
212 :    
213 :     push(@html, $cgi->hr);
214 :    
215 :     push(@html, $cgi->h2("Job $job output"));
216 :     open(my $fh, "<$job_dir/$job/OUTPUT");
217 :     push(@html, "<pre>");
218 :    
219 :     while (<$fh>)
220 :     {
221 :     push(@html, $_);
222 :     }
223 :     close($fh);
224 :    
225 :     push(@html, "</pre>");
226 :     push(@html, $cgi->hr);
227 :     }
228 : olson 1.1 opendir(D, $job_dir);
229 :     my @jobs = grep { $_ =~ /^\d+$/ } readdir(D);
230 :    
231 :     if (@jobs > 0)
232 :     {
233 : olson 1.2 my @hdrs;
234 :     my $tbl = [];
235 : olson 1.1
236 : olson 1.2 @hdrs = ("Process", "Running", "Status", "Description", "Output", "Action");
237 : olson 1.1
238 :     for my $job (@jobs)
239 :     {
240 : olson 1.3 my($running, $status, $but, @output, $info, $output);
241 : olson 1.1
242 :     if (kill(0, $job) > 0)
243 :     {
244 : olson 1.2 $running = "Running";
245 : olson 1.1 $but = $cgi->submit(-value => "Kill process", -name => "kill_job_$job");
246 :     }
247 :     else
248 :     {
249 : olson 1.2 $running = "Dead";
250 : olson 1.1 $but = $cgi->submit(-value => "Remove entry", -name => "delete_job_$job");
251 :     }
252 :    
253 : olson 1.2 $status = &FIG::file_read("$job_dir/$job/STATUS");
254 :     $info = &FIG::file_read("$job_dir/$job/INFO");
255 : olson 1.3 @output = &FIG::file_read("$job_dir/$job/OUTPUT");
256 :     my $outlink;
257 :    
258 :     if (@output > 10)
259 :     {
260 :     splice(@output, 0, @output - 10);
261 :     my $link = "seed_ctl.cgi?show_output=$job";
262 :     $outlink = "<a href=\"$link\">Show full output</a>\n";
263 :     }
264 : olson 1.2
265 : olson 1.3 $Text::Wrap::columns = 60;
266 :     $output = wrap('', '', @output);
267 :     $output = "<pre>$output\n</pre><br>$outlink\n";
268 :     push(@$tbl, [$job, $running, $status, $info, $output, $but]);
269 : olson 1.1 }
270 : olson 1.2 push(@html, &HTML::make_table(\@hdrs, $tbl));
271 : olson 1.1 }
272 :     else
273 :     {
274 :     push(@html, $cgi->p("No background jobs running"));
275 :     }
276 :    
277 :     push(@html, $cgi->hr());
278 :    
279 :     #
280 :     # Actions support.
281 :     #
282 :    
283 :     push(@html, $cgi->h1("SEED actions"));
284 :    
285 :     #
286 :     # making indexes.
287 :     #
288 :    
289 :     push(@html, $cgi->h2("Indexes"));
290 :     push(@html, $cgi->p("Recreating indexes can take a while; the SEED server will be unavailable to users while it is running."));
291 :     push(@html, $cgi->submit(-value => "Rebuild indexes", -name => "rebuild_indexes"));
292 :    
293 :     push(@html, $cgi->end_form);
294 :    
295 :     &HTML::show_page($cgi,\@html);
296 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3