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

Annotation of /FigWebServices/search_log.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (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 : hwang 1.3 my $data_location= "$FIG_Config::data";
180 :    
181 : hwang 1.1 if (($msg->[0] =~ /^(Replaced genome \d+\.\d+ with \d+\.\d+)/) && ($hdr = $1) &&
182 :     ($msg->[2] =~ /^(\S[^,]+),(\S[^,]+)/) && ($genomeF = $1) && ($map = $2))
183 :     {
184 : hwang 1.3 #must replace map with relative urls
185 :     $map =~ s/.*Data/$data_location/;
186 : hwang 1.1 my $mapE = $cgi->escape($map);
187 :     my $link = $cgi->url(-relative => 1) . "?request=display_map&map=$mapE";
188 :     my $url = "<a href=$link>map</a>";
189 :     return join("<br>",($hdr,$msg->[1],"Tarred Organism=$genomeF",$url));
190 :     }
191 :     elsif (($msg->[0] =~ /^Logged correspondence/) && ($map = $msg->[1]))
192 :     {
193 : hwang 1.3 $map =~ s/.*Data/$data_location/;
194 : hwang 1.1 my $mapE = $cgi->escape($map);
195 :     my $link = $cgi->url(-relative => 1) . "?request=display_map&map=$mapE";
196 :     my $url = "<a href=$link>map</a>";
197 :     return join("<br>",($msg->[0],$url));
198 :     }
199 :    
200 :     return join("<br>",@$msg);
201 :     }
202 :    
203 :    
204 :    
205 :     sub show_map {
206 :     my($fig,$cgi,$html,$map) = @_;
207 :    
208 :     my $tmpD = "untar$$";
209 :     if (-d $tmpD) { system "/bin/rm -r $tmpD" }
210 :     mkdir($tmpD,0777) || die "could not make $tmpD";
211 :     system "cd $tmpD; tar xzf $map";
212 :     opendir(DIR,$tmpD);
213 :     my @expanded = grep { $_ !~ /^\./ } readdir(DIR);
214 :     closedir(DIR);
215 :     if ((@expanded == 1) && (-s "$tmpD/$expanded[0]"))
216 :     {
217 :     my($x,$y);
218 :     my @entries = sort { $a =~ /^fig\|\d+\.\d+\.[^\.]+\.(\d+)/; $x = $1;
219 :     $b =~ /^fig\|\d+\.\d+\.[^\.]+\.(\d+)/; $y = $1;
220 :     $x <=> $y
221 :     }
222 :     `cat $tmpD/$expanded[0]`;
223 :     push(@$html,"<pre>\n",@entries,"</pre>\n");
224 :     }
225 :     system "rm -r $tmpD";
226 :     }
227 :    
228 :    
229 :     sub make_table {
230 :    
231 :     my @table = @_;
232 :     #Modify the table to show only certain contents and make the time
233 :     #readable
234 :    
235 :     push(@$html, "<table border=1>");
236 :     foreach(@table) {
237 :    
238 :     push(@$html, "<tr>");
239 :     my @entry = @{$_};
240 :    
241 :     #push(@$html, "<td>$_</td>");
242 :     my ($i, $gs, $time, $master, $genome_num,
243 :     $comment, $tar) = @entry;
244 :     my $view_time = $fig->epoch_to_readable($time);
245 :    
246 :     push(@$html, "<td>$gs</td>");
247 :     push(@$html, "<td>$view_time</td>");
248 :     push(@$html, "<td>$master</td>");
249 :     push(@$html, "<td>$comment</td>");
250 :    
251 :     push(@$html, "</tr>");
252 :     }
253 :     push(@$html, "</table>");
254 :     }
255 :    
256 :     sub show_chosen {
257 :    
258 :     # Get the Organism, and then filter by the rest
259 :     my ($org, $master, $time_in) = @_;
260 :    
261 :     my @organism;
262 :     my @organism_master;
263 :     my $chosen_time = $time_changed{$time_in};
264 :    
265 :     if ($org eq 'All') {
266 :     @organism = @logs;
267 :     }
268 :     else {
269 :     foreach(@logs) {
270 :     my @log = @{$_};
271 :     if ($log[1] eq $org) {
272 :     push (@organism, \@log);
273 :     }
274 :     }
275 :     }
276 :    
277 :     #Get the master
278 :     foreach (@organism) {
279 :     my @line = @{$_};
280 :     if (($line[3] eq $master)){
281 :     push (@organism_master, \@line);
282 :     }
283 :    
284 :     if ($master eq 'All') {
285 :     @organism_master = @organism;
286 :     }
287 :     }
288 :    
289 :    
290 :     my @organism_master_time;
291 :    
292 :     #Filter by time
293 :     foreach (@organism_master) {
294 :     my @line = @{$_};
295 :    
296 :     if ($chosen_time eq 'All') {
297 :     @organism_master_time = @organism_master;
298 :     }
299 :     else {
300 :     if ( $chosen_time <= $line[2]) {
301 :    
302 :     push(@organism_master_time, \@line);
303 :     }
304 :     }
305 :     }
306 :    
307 :    
308 :     &make_table(@organism_master_time);
309 :    
310 :    
311 :     }
312 :     sub process_request {
313 :     my($fig,$cgi,$html,$request) = @_;
314 :    
315 : hwang 1.3 if (($request eq "display_map") && ($map = $cgi->param('map')))
316 : hwang 1.1 {
317 :     &show_map($fig,$cgi,$html,$map);
318 :     }
319 :     else
320 :     {
321 :     push(@$html,$cgi->h2("Invalid request"));
322 :     }
323 :    
324 :     &HTML::show_page($cgi,$html);
325 :     }
326 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3