File Coverage

blib/lib/AxKit2.pm
Criterion Covered Total %
statement 13 15 86.6
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 20 90.0


line stmt bran cond sub pod time code
1             # Copyright 2001-2006 The Apache Software Foundation
2             #
3             # Licensed under the Apache License, Version 2.0 (the "License");
4             # you may not use this file except in compliance with the License.
5             # You may obtain a copy of the License at
6             #
7             # http://www.apache.org/licenses/LICENSE-2.0
8             #
9             # Unless required by applicable law or agreed to in writing, software
10             # distributed under the License is distributed on an "AS IS" BASIS,
11             # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12             # See the License for the specific language governing permissions and
13             # limitations under the License.
14             #
15              
16             package AxKit2;
17              
18 9     9   53 use strict;
  9         17  
  9         385  
19 9     9   49 use warnings;
  9         17  
  9         349  
20 9     9   42 no warnings 'deprecated';
  9         14  
  9         328  
21 9     9   9709 use Danga::Socket;
  9         271168  
  9         330  
22 9     9   6182 use AxKit2::Client;
  0            
  0            
23             use AxKit2::Server;
24             use AxKit2::Config;
25             use AxKit2::Console;
26             use AxKit2::Constants qw(LOGINFO);
27              
28             use constant AIO_AVAILABLE => eval { require IO::AIO };
29              
30             our $VERSION = '1.1';
31              
32             sub run {
33             my $class = shift;
34             my $configfile = shift;
35            
36             my $config = AxKit2::Config->new($configfile);
37            
38             local $SIG{'PIPE'} = "IGNORE"; # handled manually
39            
40             # config server
41             AxKit2::Console->create(AxKit2::Config->global);
42            
43             # setup server
44             for my $server ($config->servers) {
45             AxKit2::Server->create($server);
46             }
47            
48             if (AIO_AVAILABLE) {
49             AxKit2::Client->log(LOGINFO, "Adding AIO support");
50             Danga::Socket->AddOtherFds (IO::AIO::poll_fileno() =>
51             \&IO::AIO::poll_cb);
52             }
53              
54             # print $_, "\n" for sort keys %INC;
55            
56             Danga::Socket->EventLoop();
57             }
58              
59             1;
60              
61             =head1 NAME
62              
63             AxKit2 - XML Application Server
64              
65             =head1 SYNOPSIS
66              
67             Just start the server:
68              
69             $ cp etc/axkit.conf.sample etc/axkit.conf
70             $ ./axkit
71              
72             To do anything more than run the demo files you'll need to read the
73             documentation and start writing plugins.
74              
75             =head1 DESCRIPTION
76              
77             AxKit2 is the second generation XML Application Server following in the
78             footsteps of AxKit-1 (ONE). AxKit makes content generation easy by providing
79             powerful tools to push XML through stylesheets. This helps ensure your web
80             applications don't suffer from XSS bugs, and provides standardised templating
81             tools so that your template authors don't need to learn new Perl templating
82             tools.
83              
84             In doing all this AxKit harnesses the power of XML. Feel the power.
85              
86             =head1 PLUGINS
87              
88             Everything AxKit2 does is controlled by a plugin, and thus a lot of the
89             documentation for things that AxKit2 does is held within the provided plugins.
90              
91             To get started writing plugins see L.
92              
93             =head2 CORE PLUGINS
94              
95             The following are the core plugins which ship with AxKit2:
96              
97             =over 4
98              
99             =item * B - A cache plugin that gives every plugin access to a
100             cache.
101              
102             See L.
103              
104             =item * B - Provides XML for a directory request.
105              
106             See L.
107              
108             =item * B - When an exception/error occurs this plugin generates
109             XML (with an optional stacktrace) for what happened, and allows you to apply
110             XSLT to that XML to display it in the browser.
111              
112             See L.
113              
114             =item * B - Maps files to a MIME type for output in the
115             F header using the file extension only.
116              
117             See L.
118              
119             =item * B - Maps files to a MIME type using F.
120              
121             See L.
122              
123             =item * B - Logs requests in the Apache combined log format.
124              
125             See L.
126              
127             =item * B - Runs CGI scripts.
128              
129             See L.
130              
131             =item * B - Serves plain files.
132              
133             See L.
134              
135             =item * B - Provides access statistics for the console.
136              
137             See L.
138              
139             =item * B - Maps URLs to filenames.
140              
141             See L.
142              
143             =item * B - Logging output to STDERR via warn().
144              
145             See L.
146              
147             =back
148              
149             =head1 CONSOLE
150              
151             AxKit2 has a console which you can log into to view current and trend activity
152             on your server. To setup the console add the following config:
153              
154             ConsolePort 18000
155             Plugin stats
156              
157             This creates the console on C, and loads the stats plugin to
158             provide trend statistics on your server. To use the console just telnet to
159             port 18000. There is online help there and it should be obvious what each
160             function does.
161              
162             To provide additional stats, modify the stats plugin or write your own. Whatever
163             C returns will be output in the console when asked for statistics.
164              
165             =head1 API DOCUMENTATION
166              
167             TODO - fill in as I write more docs for each module.
168              
169             =head1 Why 2.0?
170              
171             In creating AxKit2 the following goals were aimed for:
172              
173             =over 4
174              
175             =item * Make it easier to setup and get started with than before.
176              
177             =item * Make it faster.
178              
179             =item * Make building complex web applications easier.
180              
181             =item * Make easy to extend and hack on.
182              
183             =item * Make complex pipelines and caching schemes easier.
184              
185             =back
186              
187             Many people wanted a straight port to Apache2/mod_perl2, so that they could
188             get their AxKit code migrated off the Apache1.x platform. This would have been
189             one route to go down, a route which we looked at very seriously. However already
190             taking up the mantle of an Apache2 version of AxKit is Tom Schindl's
191             Apache2::TomKit distribution. Please check that out if you absolutely need
192             mod_perl2 integration.
193              
194             =head1 LICENSE
195              
196             AxKit2 is licensed under the Apache License, Version 2.0.
197              
198             =cut