[Bio] / RAST / rast.cgi Repository:
ViewVC logotype

Annotation of /RAST/rast.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (view) (download)

1 : paarmann 1.1 use strict;
2 :     use warnings;
3 :    
4 :     use DBMaster;
5 :     use WebApplication;
6 :     use WebMenu;
7 :     use WebLayout;
8 :     use WebConfig;
9 :    
10 : olson 1.12 #use IO::Handle;
11 :     #open(TICKLOG, ">/dev/pts/9") or open(TICKLOG, ">&STDERR");
12 :     #TICKLOG->autoflush(1);
13 :    
14 :     use Time::HiRes 'gettimeofday';
15 :     my $start = gettimeofday;
16 :     my $time_last;
17 :     sub tick {
18 :     my($w) = @_;
19 :     my $now = gettimeofday;
20 :     my $t = $now - $start;
21 :     my $tms = int(($now - $time_last) * 1000);
22 :     $time_last = $now;
23 :     my ($package, $filename, $line) = caller;
24 : paarmann 1.5
25 : olson 1.12 printf TICKLOG "$$ %-40s %5d %5d %.3f\n", $filename, $line, $tms, $t;
26 :     TICKLOG->flush();
27 : paarmann 1.3 }
28 :    
29 : olson 1.12 my $have_fcgi;
30 :     eval {
31 :     require CGI::Fast;
32 :     $have_fcgi = 1;
33 :     };
34 :    
35 :    
36 :     #
37 :     # If no CGI vars, assume we are invoked as a fastcgi service.
38 :     #
39 :     my $n_requests = 0;
40 :     if ($have_fcgi && $ENV{REQUEST_METHOD} eq '')
41 :     {
42 :     #
43 :     # Precompile modules. Find where we found one, and use that path
44 :     # to walk for the rest.
45 :     #
46 :    
47 :     my $mod_path = $INC{"WebComponent/Ajax.pm"};
48 :     if ($mod_path && $mod_path =~ s,WebApplication/WebComponent/Ajax\.pm$,,)
49 :     {
50 :     local $SIG{__WARN__} = sub {};
51 :     for my $what (qw(SeedViewer RAST WebApplication))
52 :     {
53 :     for my $which (qw(WebPage WebComponent DataHandler))
54 :     {
55 :     opendir(D, "$mod_path/$what/$which") or next;
56 :     my @x = grep { /^[^.]/ } readdir(D);
57 :     for my $mod (@x)
58 :     {
59 :     $mod =~ s/\.pm$//;
60 :     my $fullmod = join("::", $what, $which, $mod);
61 :     eval " require $fullmod; ";
62 :     }
63 :     closedir(D);
64 :     }
65 :     }
66 :     }
67 :     my $max_requests = 100;
68 :     while ((my $cgi = new CGI::Fast()) &&
69 :     ($max_requests == 0 || $n_requests++ < $max_requests))
70 :     {
71 :     eval {
72 :     &main($cgi);
73 :     };
74 :     if ($@)
75 :     {
76 :     if ($@ =~ /^cgi_exit/)
77 :     {
78 :     # this is ok.
79 :     }
80 :     elsif (ref($@) ne 'ARRAY')
81 :     {
82 :     warn "code died, cgi=$cgi returning error '$@'\n";
83 :     print $cgi->header(-status => '500 error in body of cgi processing');
84 :     print $@;
85 :     }
86 :     }
87 :     endloop:
88 :     }
89 : dsouza 1.6
90 : olson 1.12 }
91 :     else
92 :     {
93 :     my $cgi = new CGI();
94 :     eval { &main($cgi); };
95 :    
96 : olson 1.13 if ($@ && $@ !~ /^cgi_exit/)
97 : olson 1.12 {
98 :     my $error = $@;
99 :     Warn("Script error: $error") if T(SeedViewer => 0);
100 :    
101 :     print CGI::header();
102 :     print CGI::start_html();
103 :    
104 :     # print out the error
105 :     print '<pre>'.$error.'</pre>';
106 : dsouza 1.6
107 : olson 1.12 print CGI::end_html();
108 :     }
109 :     }
110 :    
111 :     sub main {
112 :     my($cgi) = @_;
113 : paarmann 1.1
114 : olson 1.12 # read local WebConfig because we need it here
115 :     &WebConfig::import_local_config('RAST');
116 :    
117 :     # choose a layout
118 :     my $layout = WebLayout->new("$FIG_Config::fig/CGI/Html/RAST.tmpl");
119 :     $layout->add_css(TMPL_URL_PATH.'/web_app_default.css');
120 :     $layout->add_css(TMPL_URL_PATH.'/rast.css');
121 :    
122 :     # add site meter
123 :     my $site_meter = $FIG_Config::site_meter;
124 :     if ($site_meter) {
125 :     $layout->add_javascript("http://s20.sitemeter.com/js/counter.js?site=s20nmpdr");
126 :     }
127 :    
128 :     # create the menu
129 :     my $menu = WebMenu->new();
130 :    
131 :     $menu->add_category('Home', 'rast.cgi', undef, [ 'login' ]);
132 :     $menu->add_entry('Home', 'About RAST', 'http://www.nmpdr.org/FIG/wiki/view.cgi/Main/RAST', '_blank');
133 :     $menu->add_entry('Home', 'RAST FAQ', 'http://www.nmpdr.org/FIG/wiki/view.cgi/Main/RASTFAQ', '_blank');
134 :     $menu->add_entry('Home', 'SeedViewer', 'seedviewer.cgi');
135 :     $menu->add_category('Your Jobs', 'rast.cgi?page=Jobs', undef, [ 'login' ]);
136 :     $menu->add_entry('Your Jobs', 'Jobs Overview', 'rast.cgi?page=Jobs');
137 :     $menu->add_entry('Your Jobs', 'Upload New Job', 'rast.cgi?page=Upload');
138 :     $menu->add_entry('Your Jobs', 'Private Organism Preferences', '?page=PrivateOrganismPreferences');
139 :     $menu->add_category('Import Control', 'rast.cgi?page=ControlCenter', undef, [ 'import' ]);
140 :    
141 :     # init the WebApplication
142 :     my $WebApp = WebApplication->new( { id => 'RAST',
143 :     menu => $menu,
144 :     layout => $layout,
145 :     cgi => $cgi,
146 :     default => 'Home',
147 :     } );
148 :    
149 :     $WebApp->page_title_prefix('RAST Server - ');
150 :    
151 :     $WebApp->run();
152 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3