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

Annotation of /FigWebServices/search_log.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download)

1 : hwang 1.1 # -*- perl -*-
2 :     #
3 :     # Copyright (c) 2003-2006 University of Chicago and Fellowship
4 :     # for Interpretations of Genomes. All Rights Reserved.
5 :     #
6 :     # This file is part of the SEED Toolkit.
7 :     #
8 :     # The SEED Toolkit is free software. You can redistribute
9 :     # it and/or modify it under the terms of the SEED Toolkit
10 :     # Public License.
11 :     #
12 :     # You should have received a copy of the SEED Toolkit Public License
13 :     # along with this program; if not write to the University of Chicago
14 :     # at info@ci.uchicago.edu or the Fellowship for Interpretation of
15 :     # Genomes at veronika@thefig.info or download a copy from
16 :     # http://www.theseed.org/LICENSE.TXT.
17 :     #
18 :    
19 :    
20 :     use FIG;
21 :     use strict;
22 :    
23 :     my $fig = new FIG;
24 :    
25 :     use URI::Escape; # uri_escape
26 :     use HTML;
27 :    
28 :     use CGI;
29 :     use Tracer;
30 :    
31 :     my $cgi = new CGI;
32 :     my $html = [];
33 :     my $request;
34 :     my @logs;
35 :     my $map;
36 :     my %species=();
37 :     my %who_changed=();
38 :     my %time_changed = ();
39 :     my %entry_to_column = ();
40 :     my %genome_to_gs = ();
41 :    
42 :    
43 :     use Carp;
44 :    
45 :     if (0) {
46 :     my $VAR1;
47 :     eval(join("",`cat /tmp/log_parms`));
48 :     $cgi = $VAR1;
49 :    
50 :     }
51 :    
52 :     if (0) {
53 :     print $cgi->header;
54 :     my @params = $cgi->param;
55 :     print "<pre>\n";
56 :     foreach $_ (@params) {
57 :     print "$_\t:",join(",",$cgi->param($_)),":\n";
58 :     }
59 :    
60 :     if (0) {
61 :     if (open(TMP,">/tmp/log_parms")) {
62 :     print TMP &Dumper($cgi);
63 :     close(TMP);
64 :     }
65 :     }
66 :     exit;
67 :     }
68 :    
69 :     &open_index_file;
70 :     &show_scrolling_list;
71 :    
72 :     if ($request = $cgi->param('request'))
73 :     {
74 :     &process_request($fig,$cgi,$html,$request);
75 :     exit;
76 :     }
77 :    
78 :     if ($request = $cgi->param('Go'))
79 :     {
80 :     my $org = $cgi->param('organism');
81 :     my $master = $cgi->param('who');
82 :     my $time_in = $cgi->param('time');
83 :     &show_chosen($org, $master, $time_in);
84 :     }
85 :    
86 :     if ($request = $cgi->param('Search'))
87 :     {
88 :     my $peg = $cgi->param('peg');
89 :     &search_peg($peg);
90 :     }
91 :    
92 :    
93 :     # Set up inital look of the webpage
94 :    
95 :    
96 :     &HTML::show_page($cgi,$html);
97 :    
98 :    
99 :     ###############
100 :     # subroutines
101 :     ###############
102 :    
103 :     sub show_scrolling_list {
104 :     push(@$html,$cgi->h1("Genome Log"),
105 :     $cgi->start_form(-action=>"search_log.cgi"),
106 :     $cgi->hr,
107 :     $cgi->br,
108 :     $cgi->p('See logs for a specific organism'),
109 :     $cgi->popup_menu(-name => 'organism',
110 :     -values => ['All', sort keys %species]),
111 :     $cgi->br,
112 :     $cgi->p('Master'),
113 :     $cgi->popup_menu(-name => 'who',
114 :     -values => ['All', sort keys %who_changed]),
115 :     $cgi->p('from a certain time'),
116 :     $cgi->popup_menu(-name => 'time',
117 :     -values => ['All', sort keys %time_changed]),
118 :     $cgi->br,
119 :     $cgi->submit('Go'),
120 :     $cgi->hr,
121 :     $cgi->end_form,
122 :     );
123 :     }
124 :    
125 :     sub open_index_file {
126 :    
127 :     if (open(INDEX,"<$FIG_Config::data/Logs/GenomeLog/index"))
128 :     {
129 :     while (defined($_ = <INDEX>))
130 :     {
131 :     if ($_ =~ /^(\d+)\t(\S.*\S)/)
132 :     {
133 :     my($i,$gs) = ($1,$2);
134 :     $species{$gs} = $i;
135 :     &open_log_file ($i, $gs);
136 :     }
137 :    
138 :     }
139 :     }
140 :    
141 :     close(INDEX);
142 :     }
143 :    
144 :    
145 :    
146 :     sub open_log_file {
147 :    
148 :     my ($index, $genome_species) = @_;
149 :    
150 :     if (open(LOG,"<$FIG_Config::data/Logs/GenomeLog/Entries/$index/log"))
151 :     {
152 :     $/ = "\n//\n";
153 :     while (defined(my $log_entry = <LOG>))
154 :     {
155 :     chomp $log_entry;
156 :     my($ts,$who,$genome,
157 :     @msg) = split(/\n/,$log_entry);
158 :    
159 :     push(@logs, [$index, $genome_species, $ts, $who , $genome,
160 :     &make_readable_extra($fig, $cgi, \@msg)]);
161 :    
162 :     my $readable_time = $fig->epoch_to_readable($ts);
163 :     $who_changed{$who} = $who;
164 :     $time_changed{$readable_time} = $ts;
165 :     $genome_to_gs{$genome} = $genome_species;
166 :     }
167 :     $/ = "\n";
168 :     close(LOG);
169 :    
170 :     }
171 :    
172 :     }
173 :    
174 :    
175 :     sub make_readable_extra {
176 :     my($fig,$cgi,$msg) = @_;
177 :     my($hdr,$genomeF);
178 :    
179 :     if (($msg->[0] =~ /^(Replaced genome \d+\.\d+ with \d+\.\d+)/) && ($hdr = $1) &&
180 :     ($msg->[2] =~ /^(\S[^,]+),(\S[^,]+)/) && ($genomeF = $1) && ($map = $2))
181 :     {
182 :     my $mapE = $cgi->escape($map);
183 :     my $link = $cgi->url(-relative => 1) . "?request=display_map&map=$mapE";
184 :     my $url = "<a href=$link>map</a>";
185 :     return join("<br>",($hdr,$msg->[1],"Tarred Organism=$genomeF",$url));
186 :     }
187 :     elsif (($msg->[0] =~ /^Logged correspondence/) && ($map = $msg->[1]))
188 :     {
189 :     my $mapE = $cgi->escape($map);
190 :     my $link = $cgi->url(-relative => 1) . "?request=display_map&map=$mapE";
191 :     my $url = "<a href=$link>map</a>";
192 :     return join("<br>",($msg->[0],$url));
193 :     }
194 :    
195 :     return join("<br>",@$msg);
196 :     }
197 :    
198 :    
199 :    
200 :     sub show_map {
201 :     my($fig,$cgi,$html,$map) = @_;
202 :    
203 :     my $tmpD = "untar$$";
204 :     if (-d $tmpD) { system "/bin/rm -r $tmpD" }
205 :     mkdir($tmpD,0777) || die "could not make $tmpD";
206 :     system "cd $tmpD; tar xzf $map";
207 :     opendir(DIR,$tmpD);
208 :     my @expanded = grep { $_ !~ /^\./ } readdir(DIR);
209 :     closedir(DIR);
210 :     if ((@expanded == 1) && (-s "$tmpD/$expanded[0]"))
211 :     {
212 :     my($x,$y);
213 :     my @entries = sort { $a =~ /^fig\|\d+\.\d+\.[^\.]+\.(\d+)/; $x = $1;
214 :     $b =~ /^fig\|\d+\.\d+\.[^\.]+\.(\d+)/; $y = $1;
215 :     $x <=> $y
216 :     }
217 :     `cat $tmpD/$expanded[0]`;
218 :    
219 :     push(@$html,"<pre>\n",@entries,"</pre>\n");
220 :     }
221 :     system "rm -r $tmpD";
222 :     }
223 :    
224 :    
225 :     sub make_table {
226 :    
227 :     my @table = @_;
228 :     #Modify the table to show only certain contents and make the time
229 :     #readable
230 :    
231 :     push(@$html, "<table border=1>");
232 :     foreach(@table) {
233 :    
234 :     push(@$html, "<tr>");
235 :     my @entry = @{$_};
236 :    
237 :     #push(@$html, "<td>$_</td>");
238 :     my ($i, $gs, $time, $master, $genome_num,
239 :     $comment, $tar) = @entry;
240 :     my $view_time = $fig->epoch_to_readable($time);
241 :    
242 :     push(@$html, "<td>$gs</td>");
243 :     push(@$html, "<td>$view_time</td>");
244 :     push(@$html, "<td>$master</td>");
245 :     push(@$html, "<td>$comment</td>");
246 :    
247 :     push(@$html, "</tr>");
248 :     }
249 :     push(@$html, "</table>");
250 :     }
251 :    
252 :     sub show_chosen {
253 :    
254 :     # Get the Organism, and then filter by the rest
255 :     my ($org, $master, $time_in) = @_;
256 :    
257 :     my @organism;
258 :     my @organism_master;
259 :     my $chosen_time = $time_changed{$time_in};
260 :    
261 :     if ($org eq 'All') {
262 :     @organism = @logs;
263 :     }
264 :     else {
265 :     foreach(@logs) {
266 :     my @log = @{$_};
267 :     if ($log[1] eq $org) {
268 :     push (@organism, \@log);
269 :     }
270 :     }
271 :     }
272 :    
273 :     #Get the master
274 :     foreach (@organism) {
275 :     my @line = @{$_};
276 :     if (($line[3] eq $master)){
277 :     push (@organism_master, \@line);
278 :     }
279 :    
280 :     if ($master eq 'All') {
281 :     @organism_master = @organism;
282 :     }
283 :     }
284 :    
285 :    
286 :     my @organism_master_time;
287 :    
288 :     #Filter by time
289 :     foreach (@organism_master) {
290 :     my @line = @{$_};
291 :    
292 :     if ($chosen_time eq 'All') {
293 :     @organism_master_time = @organism_master;
294 :     }
295 :     else {
296 :     if ( $chosen_time <= $line[2]) {
297 :    
298 :     push(@organism_master_time, \@line);
299 :     }
300 :     }
301 :     }
302 :    
303 :    
304 :     &make_table(@organism_master_time);
305 :    
306 :    
307 :     }
308 :     sub process_request {
309 :     my($fig,$cgi,$html,$request) = @_;
310 :    
311 :     if (($request eq "display_map") && ($map = $cgi->param('map')) && (-s $map))
312 :     {
313 :     &show_map($fig,$cgi,$html,$map);
314 :     }
315 :     else
316 :     {
317 :     push(@$html,$cgi->h2("Invalid request"));
318 :     }
319 :    
320 :     &HTML::show_page($cgi,$html);
321 :     }
322 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3