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

Annotation of /FigWebServices/seed_ctl.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (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 :    
15 :     use strict;
16 :    
17 : olson 1.3 use Text::Wrap;
18 : olson 1.1 use POSIX;
19 :    
20 :     use CGI;
21 :     my $cgi = new CGI;
22 :    
23 :     use HTML;
24 :     my @html = ();
25 :    
26 :     my $fig;
27 :     my $ok = eval {
28 :     $fig = new FIG;
29 :     };
30 :    
31 :     #
32 :     # Common dirs.
33 :     #
34 :    
35 :     my $job_dir = "$FIG_Config::data/Global/background_jobs";
36 :     my $down_file = "$FIG_Config::data/Global/why_down";
37 :    
38 :     #
39 :     # Handle actions first.
40 :     #
41 :    
42 :     if ($cgi->param('enable_server'))
43 :     {
44 :     push(@html, $cgi->p("Enabling server."));
45 :    
46 :    
47 :     unlink($down_file);
48 :     }
49 :     elsif ($cgi->param('disable_server'))
50 :     {
51 :     push(@html, $cgi->p("Disabling server."));
52 :    
53 :    
54 :     open my $fh, ">$down_file";
55 :     print $fh $cgi->param("disable_reason");
56 :     close($fh);
57 :     }
58 :     elsif ($cgi->param("rebuild_indexes"))
59 :     {
60 :     #
61 :     # Fork a process to run the rebuild scripts.
62 :     #
63 :    
64 : olson 1.3 my $add = "$FIG_Config::bin/add_assertions_of_function";
65 :     my $mkindex = "$FIG_Config::bin/make_indexes";
66 : olson 1.1
67 : olson 1.3 $fig->run_in_background(sub {
68 :    
69 :     print "Running $add\n";
70 :    
71 : olson 1.1 open(my $fh, ">$down_file");
72 :     print $fh "SEED server is rebuilding indexes.\n";
73 :     print $fh "Running $add\n";
74 :     close($fh);
75 : olson 1.3
76 : olson 1.1 system($add);
77 : olson 1.3
78 :     print "Running $mkindex\n";
79 :    
80 : olson 1.1 open my $fh, ">>$down_file";
81 :     print $fh "Running $mkindex\n";
82 :     close($fh);
83 : olson 1.3
84 : olson 1.1 system($mkindex);
85 : olson 1.3
86 :     print "Complete\n";
87 :    
88 : olson 1.1 unlink($down_file);
89 : olson 1.3 });
90 : olson 1.1 }
91 :    
92 :     #
93 :     # Check params list for other actions (that encode names within the param name).
94 :     #
95 :    
96 :     for my $action ($cgi->param)
97 :     {
98 :     if ($action =~ /^delete_job_(\d+)/)
99 :     {
100 : olson 1.2 system("rm -r $job_dir/$1");
101 : olson 1.1 push(@html, $cgi->p("Removed job $1"));
102 :     }
103 :     elsif ($action =~ /^kill_job_(\d+)/)
104 :     {
105 : olson 1.2 my $ret = kill(1, -$1);
106 :     push(@html, $cgi->p("Killed job $1; return code is $ret"));
107 : olson 1.1 }
108 :     }
109 :    
110 :     #
111 :     # Check database
112 :     #
113 :    
114 :     push(@html, $cgi->h1("SEED current status"));
115 :     push(@html, $cgi->start_form(-action => "seed_ctl.cgi"));
116 :     push(@html, $cgi->h2("Database status"));
117 :    
118 :     if (!$ok)
119 :     {
120 :     push(@html, "Database system is unavailable.\n");
121 :     }
122 :     else
123 :     {
124 :     my $dbh = $fig->db_handle;
125 :    
126 :     my $resp = $dbh->SQL("SELECT count(*) from genome");
127 :     if (!$resp or @$resp == 0)
128 :     {
129 :     push(@html, "Could not get count from genome table\n");
130 :     }
131 :     else
132 :     {
133 :     my $c = $resp->[0]->[0];
134 :     push(@html, "Database live: found $c genomes\n");
135 :     }
136 :     }
137 :    
138 :     #
139 :     # Check enabled state.
140 :     #
141 :    
142 :     push(@html, $cgi->h2("SEED status"));
143 :    
144 : olson 1.3 my $uptime = `uptime`;
145 :     if ($uptime =~ /load average(s?):\s+(.*)/)
146 :     {
147 :     push(@html, "Server load averages: $2<p>\n");
148 :     }
149 : olson 1.1
150 :     if (-f $down_file)
151 :     {
152 :     my $down_text = `cat $down_file`;
153 :    
154 :     push(@html, $cgi->p("SEED server is down:"));
155 :     push(@html, $cgi->pre($down_text));
156 :     push(@html, $cgi->submit(-value => "Enable SEED server.", -name => "enable_server"));
157 :    
158 :     }
159 :     else
160 :     {
161 :     push(@html, $cgi->p("SEED server is up.\n"));
162 :     push(@html, $cgi->p("To disable SEED server, enter a reason below and click button."));
163 :     push(@html, $cgi->textarea(-name => "disable_reason",
164 :     -rows => 3, -cols => 70));
165 :     push(@html, $cgi->p);
166 :     push(@html, $cgi->submit(-value => "Disable SEED server.", -name => "disable_server"));
167 :     }
168 :    
169 :     push(@html, $cgi->hr);
170 :    
171 :     #
172 :     # Check for background jobs.
173 :     #
174 :    
175 :     &FIG::verify_dir($job_dir);
176 :    
177 :     push(@html, $cgi->h2("Background jobs"));
178 :     push(@html, "\n");
179 : olson 1.3
180 :     if ($cgi->param("show_output"))
181 :     {
182 :     my $job = $cgi->param("show_output");
183 :    
184 :     push(@html, $cgi->hr);
185 :    
186 :     push(@html, $cgi->h2("Job $job output"));
187 :     open(my $fh, "<$job_dir/$job/OUTPUT");
188 :     push(@html, "<pre>");
189 :    
190 :     while (<$fh>)
191 :     {
192 :     push(@html, $_);
193 :     }
194 :     close($fh);
195 :    
196 :     push(@html, "</pre>");
197 :     push(@html, $cgi->hr);
198 :     }
199 : olson 1.1 opendir(D, $job_dir);
200 :     my @jobs = grep { $_ =~ /^\d+$/ } readdir(D);
201 :    
202 :     if (@jobs > 0)
203 :     {
204 : olson 1.2 my @hdrs;
205 :     my $tbl = [];
206 : olson 1.1
207 : olson 1.2 @hdrs = ("Process", "Running", "Status", "Description", "Output", "Action");
208 : olson 1.1
209 :     for my $job (@jobs)
210 :     {
211 : olson 1.3 my($running, $status, $but, @output, $info, $output);
212 : olson 1.1
213 :     if (kill(0, $job) > 0)
214 :     {
215 : olson 1.2 $running = "Running";
216 : olson 1.1 $but = $cgi->submit(-value => "Kill process", -name => "kill_job_$job");
217 :     }
218 :     else
219 :     {
220 : olson 1.2 $running = "Dead";
221 : olson 1.1 $but = $cgi->submit(-value => "Remove entry", -name => "delete_job_$job");
222 :     }
223 :    
224 : olson 1.2 $status = &FIG::file_read("$job_dir/$job/STATUS");
225 :     $info = &FIG::file_read("$job_dir/$job/INFO");
226 : olson 1.3 @output = &FIG::file_read("$job_dir/$job/OUTPUT");
227 :     my $outlink;
228 :    
229 :     if (@output > 10)
230 :     {
231 :     splice(@output, 0, @output - 10);
232 :     my $link = "seed_ctl.cgi?show_output=$job";
233 :     $outlink = "<a href=\"$link\">Show full output</a>\n";
234 :     }
235 : olson 1.2
236 : olson 1.3 $Text::Wrap::columns = 60;
237 :     $output = wrap('', '', @output);
238 :     $output = "<pre>$output\n</pre><br>$outlink\n";
239 :     push(@$tbl, [$job, $running, $status, $info, $output, $but]);
240 : olson 1.1 }
241 : olson 1.2 push(@html, &HTML::make_table(\@hdrs, $tbl));
242 : olson 1.1 }
243 :     else
244 :     {
245 :     push(@html, $cgi->p("No background jobs running"));
246 :     }
247 :    
248 :     push(@html, $cgi->hr());
249 :    
250 :     #
251 :     # Actions support.
252 :     #
253 :    
254 :     push(@html, $cgi->h1("SEED actions"));
255 :    
256 :     #
257 :     # making indexes.
258 :     #
259 :    
260 :     push(@html, $cgi->h2("Indexes"));
261 :     push(@html, $cgi->p("Recreating indexes can take a while; the SEED server will be unavailable to users while it is running."));
262 :     push(@html, $cgi->submit(-value => "Rebuild indexes", -name => "rebuild_indexes"));
263 :    
264 :     push(@html, $cgi->end_form);
265 :    
266 :     &HTML::show_page($cgi,\@html);
267 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3