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

Diff of /FigWebServices/ach_server.cgi

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7, Wed Aug 26 20:50:55 2009 UTC revision 1.8, Wed Sep 30 15:33:49 2009 UTC
# Line 1  Line 1 
1  use strict;  use strict;
 use FIG;  
 use CGI;  
 my $have_fcgi;  
 eval {  
     require CGI::Fast;  
     $have_fcgi = 1;  
 };  
2    
3  use FIG_Config;  use ServerThing;
4  use Data::Dumper;  use constant POD => "http://servers.nmpdr.org/ach/server.cgi?pod=";
 use AnnoClearinghouse;  
 use YAML;  
 use ERDB;  
 use Tracer;  
5    
6  my $sapling = ERDB::GetDatabase('Sapling');  ServerThing::RunServer(ACH => $ARGV[0], POD);
 my $fig = new FIG;  
   
 #  
 # If no CGI vars, assume we are invoked as a fastcgi service.  
 #  
 if ($ENV{REQUEST_METHOD} eq '' && $have_fcgi)  
 {  
     #  
     # Make mysql autoreconnect.  
     #  
     if ($FIG_Config::dbms eq 'mysql')  
     {  
         my $dbh = $fig->db_handle()->{_dbh};  
         $dbh->{mysql_auto_reconnect} = 1;  
     }  
     #  
     # And ERDB too.  
     #  
     $sapling->{_dbh}->{_dbh}->{mysql_auto_reconnect} = 1;  
   
   
     while (my $cgi = new CGI::Fast())  
     {  
         eval {  
             &process_request($cgi);  
         };  
         if ($@)  
         {  
             if (ref($@) ne 'ARRAY')  
             {  
                 warn "code died, returning error\n";  
                 print $cgi->header(-status => '500 error in body of cgi processing');  
                 print $@;  
             }  
         }  
     }  
     print STDERR "Clean shutdown\n";  
 }  
 else  
 {  
     my $cgi = new CGI();  
     print $cgi->header();  
     &process_request($cgi);  
 }  
   
 exit;  
   
 sub process_request  
 {  
     my($cgi) = @_;  
   
     my $function = $cgi->param('function');  
     $function or myerror($cgi, "500 missing argument", "ACH server missing function argument");  
   
     if ($function eq "equiv_sequence") {  
         print $cgi->header();  
         my $ids = &YAML::Load($cgi->param('args'));  
         $ids or myerror($cgi, "500 missing id", "subsystem server missing id argument");  
         foreach my $id (@$ids) {  
             print STDERR "ID = $id\n";  
             if ($id =~ /^md5\|(.*)/i) {  
                 $id = $1;  
             } else {  
                 $id = ERDB::DigestKey($id);  
             }  
   
             my @resultRows = $sapling->GetAll("Feature Produces ProteinSequence IsNamedBy Identifier HasAssertionFrom Source",  
                                               'Feature(id) = ? ', [$id],  
                                               [qw(Identifier(id)  
                                                   HasAssertionFrom(function) Source(id)  
                                                   HasAssertionFrom(expert))]);  
   
             print &YAML::Dump([\@resultRows]);  
         }  
   
     } elsif ($function eq "equiv_precise") {  
         print $cgi->header();  
         my $ids = &YAML::Load($cgi->param('args'));  
         $ids or myerror($cgi, "500 missing id", "subsystem server missing id argument");  
   
         foreach my $id (@$ids) {  
             my @resultRows = $sapling->GetAll("Identifier HasAssertionFrom Source",  
                                               'Identifier(id) = ? ',  
                                               [$id], [qw(Identifier(id)  
                                                          HasAssertionFrom(function)  
                                                          Source(id)  
                                                          HasAssertionFrom(expert))]);  
   
   
             print &YAML::Dump([$id,\@resultRows]);  
         }  
   
   
     } else {  
         myerror($cgi, "500 bad function argument $function", "usage:ACH function=equiv_precise | function=equiv_sequence");  
     }  
 }  
   
 sub myerror  
 {  
     my($cgi, $stat, $msg) = @_;  
     print $cgi->header(-status =>  $stat);  
   
     print "$msg\n";  
     die ['cgi error returned'];  
 }  
7    
8    1;

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3