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

Annotation of /RAST/rast.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (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 :     warn Dumper($cgi, \%ENV
73 :     );
74 :     &main($cgi);
75 :     };
76 :     if ($@)
77 :     {
78 :     if ($@ =~ /^cgi_exit/)
79 :     {
80 :     # this is ok.
81 :     }
82 :     elsif (ref($@) ne 'ARRAY')
83 :     {
84 :     warn "code died, cgi=$cgi returning error '$@'\n";
85 :     print $cgi->header(-status => '500 error in body of cgi processing');
86 :     print $@;
87 :     }
88 :     }
89 :     endloop:
90 :     }
91 : dsouza 1.6
92 : olson 1.12 }
93 :     else
94 :     {
95 :     my $cgi = new CGI();
96 :     eval { &main($cgi); };
97 :    
98 :     if ($@)
99 :     {
100 :     my $error = $@;
101 :     Warn("Script error: $error") if T(SeedViewer => 0);
102 :    
103 :     print CGI::header();
104 :     print CGI::start_html();
105 :    
106 :     # print out the error
107 :     print '<pre>'.$error.'</pre>';
108 : dsouza 1.6
109 : olson 1.12 print CGI::end_html();
110 :     }
111 :     }
112 :    
113 :     sub main {
114 :     my($cgi) = @_;
115 : paarmann 1.1
116 : olson 1.12 # read local WebConfig because we need it here
117 :     &WebConfig::import_local_config('RAST');
118 :    
119 :     # choose a layout
120 :     my $layout = WebLayout->new("$FIG_Config::fig/CGI/Html/RAST.tmpl");
121 :     $layout->add_css(TMPL_URL_PATH.'/web_app_default.css');
122 :     $layout->add_css(TMPL_URL_PATH.'/rast.css');
123 :    
124 :     # add site meter
125 :     my $site_meter = $FIG_Config::site_meter;
126 :     if ($site_meter) {
127 :     $layout->add_javascript("http://s20.sitemeter.com/js/counter.js?site=s20nmpdr");
128 :     }
129 :    
130 :     # create the menu
131 :     my $menu = WebMenu->new();
132 :    
133 :     $menu->add_category('Home', 'rast.cgi', undef, [ 'login' ]);
134 :     $menu->add_entry('Home', 'About RAST', 'http://www.nmpdr.org/FIG/wiki/view.cgi/Main/RAST', '_blank');
135 :     $menu->add_entry('Home', 'RAST FAQ', 'http://www.nmpdr.org/FIG/wiki/view.cgi/Main/RASTFAQ', '_blank');
136 :     $menu->add_entry('Home', 'SeedViewer', 'seedviewer.cgi');
137 :     $menu->add_category('Your Jobs', 'rast.cgi?page=Jobs', undef, [ 'login' ]);
138 :     $menu->add_entry('Your Jobs', 'Jobs Overview', 'rast.cgi?page=Jobs');
139 :     $menu->add_entry('Your Jobs', 'Upload New Job', 'rast.cgi?page=Upload');
140 :     $menu->add_entry('Your Jobs', 'Private Organism Preferences', '?page=PrivateOrganismPreferences');
141 :     $menu->add_category('Import Control', 'rast.cgi?page=ControlCenter', undef, [ 'import' ]);
142 :    
143 :     # init the WebApplication
144 :     my $WebApp = WebApplication->new( { id => 'RAST',
145 :     menu => $menu,
146 :     layout => $layout,
147 :     cgi => $cgi,
148 :     default => 'Home',
149 :     } );
150 :    
151 :     $WebApp->page_title_prefix('RAST Server - ');
152 :    
153 :     $WebApp->run();
154 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3