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

View of /FigWebServices/search_log.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (download) (annotate)
Wed Jun 14 22:11:08 2006 UTC (13 years, 5 months ago) by hwang
Branch: MAIN
CVS Tags: mgrast_dev_08112011, rast_rel_2009_05_18, mgrast_dev_08022011, rast_rel_2014_0912, rast_rel_2008_06_18, myrast_rel40, rast_rel_2008_06_16, mgrast_dev_05262011, rast_rel_2008_12_18, mgrast_dev_04082011, rast_rel_2008_07_21, rast_rel_2010_0928, rast_2008_0924, mgrast_version_3_2, mgrast_dev_12152011, rast_rel_2008_04_23, mgrast_dev_06072011, rast_rel_2008_09_30, rast_rel_2009_0925, rast_rel_2010_0526, rast_rel_2014_0729, mgrast_dev_02212011, rast_rel_2010_1206, mgrast_release_3_0, mgrast_dev_03252011, rast_rel_2010_0118, mgrast_rel_2008_0924, mgrast_rel_2008_1110_v2, rast_rel_2009_02_05, rast_rel_2011_0119, mgrast_rel_2008_0625, mgrast_release_3_0_4, mgrast_release_3_0_2, mgrast_release_3_0_3, mgrast_release_3_0_1, mgrast_dev_03312011, mgrast_release_3_1_2, mgrast_release_3_1_1, mgrast_release_3_1_0, mgrast_dev_04132011, rast_rel_2008_10_09, mgrast_dev_04012011, rast_release_2008_09_29, mgrast_rel_2008_0806, mgrast_rel_2008_0923, mgrast_rel_2008_0919, rast_rel_2009_07_09, rast_rel_2010_0827, mgrast_rel_2008_1110, myrast_33, rast_rel_2011_0928, rast_rel_2008_09_29, mgrast_rel_2008_0917, rast_rel_2008_10_29, mgrast_dev_04052011, mgrast_dev_02222011, rast_rel_2009_03_26, mgrast_dev_10262011, rast_rel_2008_11_24, rast_rel_2008_08_07, HEAD
Changes since 1.2: +6 -2 lines
Change absolute path to relative path for getting genome log data

# -*- perl -*-
#
# Copyright (c) 2003-2006 University of Chicago and Fellowship
# for Interpretations of Genomes. All Rights Reserved.
#
# This file is part of the SEED Toolkit.
# 
# The SEED Toolkit is free software. You can redistribute
# it and/or modify it under the terms of the SEED Toolkit
# Public License. 
#
# You should have received a copy of the SEED Toolkit Public License
# along with this program; if not write to the University of Chicago
# at info@ci.uchicago.edu or the Fellowship for Interpretation of
# Genomes at veronika@thefig.info or download a copy from
# http://www.theseed.org/LICENSE.TXT.
#


use FIG;
use strict;

my $fig = new FIG;

use URI::Escape;  # uri_escape
use HTML;

use CGI;
use Tracer;

my $cgi = new CGI;
my $html = [];
my $request;
my @logs;
my $map;
my %species=();
my %who_changed=();
my %time_changed = ();
my %entry_to_column = ();
my %genome_to_gs = ();


use Carp;

if (0) {
    my $VAR1;
    eval(join("",`cat /tmp/log_parms`));
    $cgi = $VAR1;

}

if (0) {
    print $cgi->header;
    my @params = $cgi->param;
    print "<pre>\n";
    foreach $_ (@params) {
		print "$_\t:",join(",",$cgi->param($_)),":\n";
    }

    if (0) {
        if (open(TMP,">/tmp/log_parms")) {
	    	print TMP &Dumper($cgi);
	    	close(TMP);
		}
    }
    exit;
}

&open_index_file;
&show_scrolling_list;

if ($request = $cgi->param('request'))
{
    &process_request($fig,$cgi,$html,$request);
    exit;
}

if ($request = $cgi->param('Go'))
{
    my $org     = $cgi->param('organism');
    my $master  = $cgi->param('who');
    my $time_in = $cgi->param('time');
    &show_chosen($org, $master, $time_in);
}

if ($request = $cgi->param('Search'))
{
    my $peg     = $cgi->param('peg');
    &search_peg($peg);
}


# Set up inital look of the webpage


&HTML::show_page($cgi,$html);


###############
# subroutines
###############

sub show_scrolling_list {
    push(@$html,$cgi->h1("Genome Log"),
	 $cgi->start_form(-action=>"search_log.cgi"),
	 $cgi->hr,
	 $cgi->br,
	 $cgi->p('See logs for a specific organism'),
	 $cgi->popup_menu(-name  => 'organism',
			  -values => ['All', sort keys %species]),
	 $cgi->br,
	 $cgi->p('Master'),
	 $cgi->popup_menu(-name  => 'who',
			  -values => ['All', sort keys %who_changed]),
	 $cgi->p('from a certain time'),
	 $cgi->popup_menu(-name  => 'time',
			  -values => ['All', sort keys %time_changed]),
	 $cgi->br,
	 $cgi->submit('Go'),
	 $cgi->hr,
	 $cgi->end_form, 
    );
}

sub open_index_file {
 
    if (open(INDEX,"<$FIG_Config::data/Logs/GenomeLog/index"))
    {
	while (defined($_ = <INDEX>))
	{
	    if ($_ =~ /^(\d+)\t(\S.*\S)/)
	    {
		my($i,$gs) = ($1,$2);
		$species{$gs} = $i;
		&open_log_file ($i, $gs);
	    }

	}
    }

    close(INDEX);
}



sub open_log_file {
    
    my ($index, $genome_species) = @_;

    if (open(LOG,"<$FIG_Config::data/Logs/GenomeLog/Entries/$index/log"))
    {
	$/ = "\n//\n";
	while (defined(my $log_entry = <LOG>))
	{
	    chomp $log_entry;
	    my($ts,$who,$genome,
	       @msg) = split(/\n/,$log_entry);
	    
	    push(@logs, [$index, $genome_species, $ts, $who , $genome, 
			 &make_readable_extra($fig, $cgi, \@msg)]);

	    my $readable_time = $fig->epoch_to_readable($ts);
	    $who_changed{$who} = $who;
	    $time_changed{$readable_time} = $ts;
	    $genome_to_gs{$genome} = $genome_species;
	}
	$/ = "\n";
    close(LOG);

    }
		   
}


sub make_readable_extra {
    my($fig,$cgi,$msg) = @_;
    my($hdr,$genomeF);

    my $data_location= "$FIG_Config::data";

    if (($msg->[0] =~ /^(Replaced genome \d+\.\d+ with \d+\.\d+)/) && ($hdr = $1) &&
	($msg->[2] =~ /^(\S[^,]+),(\S[^,]+)/) && ($genomeF = $1) && ($map = $2))
    {
	#must replace map with relative urls
	$map =~ s/.*Data/$data_location/;
	my $mapE = $cgi->escape($map);
	my $link = $cgi->url(-relative => 1) . "?request=display_map&map=$mapE";
	my $url  = "<a href=$link>map</a>";
	return join("<br>",($hdr,$msg->[1],"Tarred Organism=$genomeF",$url));
    }
    elsif (($msg->[0] =~ /^Logged correspondence/) && ($map = $msg->[1]))
    {
	$map =~ s/.*Data/$data_location/;
	my $mapE = $cgi->escape($map);
	my $link = $cgi->url(-relative => 1) . "?request=display_map&map=$mapE";
	my $url  = "<a href=$link>map</a>";
	return join("<br>",($msg->[0],$url));
    }

    return join("<br>",@$msg);
}



sub show_map {
    my($fig,$cgi,$html,$map) = @_;

    my $tmpD = "untar$$";
    if (-d $tmpD) { system "/bin/rm -r $tmpD" }
    mkdir($tmpD,0777) || die "could not make $tmpD";
    system "cd $tmpD; tar xzf $map";
    opendir(DIR,$tmpD);
    my @expanded = grep { $_ !~ /^\./ } readdir(DIR);
    closedir(DIR);
    if ((@expanded == 1) && (-s "$tmpD/$expanded[0]"))
    {
	my($x,$y);
	my @entries = sort { $a =~ /^fig\|\d+\.\d+\.[^\.]+\.(\d+)/; $x = $1; 
			     $b =~ /^fig\|\d+\.\d+\.[^\.]+\.(\d+)/; $y = $1; 
			     $x <=> $y
			   }
	              `cat $tmpD/$expanded[0]`;
	push(@$html,"<pre>\n",@entries,"</pre>\n");
    }
    system "rm -r $tmpD";
}


sub make_table {

    my @table = @_;
    #Modify the table to show only certain contents and make the time
    #readable

    push(@$html, "<table border=1>");
    foreach(@table) {
	
	push(@$html, "<tr>");
	my @entry = @{$_};

	#push(@$html, "<td>$_</td>");
	my ($i, $gs, $time, $master, $genome_num, 
	    $comment, $tar) = @entry;
	my $view_time = $fig->epoch_to_readable($time);
	
	push(@$html, "<td>$gs</td>");
	push(@$html, "<td>$view_time</td>");
	push(@$html, "<td>$master</td>");
	push(@$html, "<td>$comment</td>");
		
	push(@$html, "</tr>");
    }
    push(@$html, "</table>");
}

sub show_chosen {

    # Get the Organism, and then filter by the rest
    my ($org, $master, $time_in) = @_;
           
    my @organism;
    my @organism_master;
    my $chosen_time = $time_changed{$time_in};
        
    if ($org eq 'All') {
	@organism = @logs;
    }
    else {
	foreach(@logs) {
	    my @log = @{$_};
	    if ($log[1] eq $org) {
		push (@organism, \@log);
	    }
	}
    }

    #Get the master
    foreach (@organism) {
	my @line = @{$_};
	if (($line[3] eq $master)){
	    push (@organism_master, \@line); 
	}
	
	if ($master eq 'All') {
	    @organism_master = @organism;
	}
    }
    
   
    my @organism_master_time;

    #Filter by time
    foreach (@organism_master) {
	my @line = @{$_};

	if ($chosen_time eq 'All') {
	    @organism_master_time = @organism_master;
	}
	else {
	    if ( $chosen_time <= $line[2]) {
		
		push(@organism_master_time, \@line);
	    }
	}
    }
    

    &make_table(@organism_master_time);

    
}
sub process_request {
    my($fig,$cgi,$html,$request) = @_;
    
    if (($request eq "display_map") && ($map = $cgi->param('map')))
    {
	&show_map($fig,$cgi,$html,$map);
    }
    else
    {
	push(@$html,$cgi->h2("Invalid request"));
    }

    &HTML::show_page($cgi,$html);
}


MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3