1 (* HCoop
Domtool (http
://hcoop
.sourceforge
.net
/)
2 * Copyright (c
) 2006, Adam Chlipala
4 * This program is free software
; you can redistribute it
and/or
5 * modify it under the terms
of the GNU General Public License
6 * as published by the Free Software Foundation
; either version
2
7 * of the License
, or (at your option
) any later version
.
9 * This program is distributed
in the hope that it will be useful
,
10 * but WITHOUT ANY WARRANTY
; without even the implied warranty
of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
. See the
12 * GNU General Public License for more details
.
14 * You should have received a copy
of the GNU General Public License
15 * along
with this program
; if not
, write to the Free Software
16 * Foundation
, Inc
., 51 Franklin Street
, Fifth Floor
, Boston
, MA
02110-1301, USA
.
19 (* Webalizer statistics tool handling
*)
21 structure Webalizer
:> WEBALIZER
= struct
23 val files
= ref ([] : TextIO.outstream list
)
24 val write
= ref (fn _
: string => ())
26 val () = Apache
.registerPre
27 (fn {user
, nodes
, id
, hostname
} =>
29 val fds
= map (fn node
=>
31 val fd
= Domain
.domainFile
{node
= node
,
34 TextIO.output (fd
, "LogFile\t");
35 TextIO.output (fd
, Config
.homeBase
);
36 TextIO.output (fd
, "/");
37 TextIO.output (fd
, user
);
38 TextIO.output (fd
, "/apache/log/");
39 TextIO.output (fd
, node
);
40 TextIO.output (fd
, "/");
41 TextIO.output (fd
, hostname
);
42 TextIO.output (fd
, "/access.log\nOutputDir\t");
43 TextIO.output (fd
, Config
.Webalizer
.outputDir
);
44 TextIO.output (fd
, "/");
45 TextIO.output (fd
, node
);
46 TextIO.output (fd
, "/");
47 TextIO.output (fd
, id
);
48 TextIO.output (fd
, "\n");
53 write
:= (fn s
=> app (fn fd
=> TextIO.output (fd
, s
)) fds
);
56 !write
"\nHideSite\t";
58 !write
"\nHideReferrer\t";
63 val () = Apache
.registerPost
64 (fn () => app
TextIO.closeOut (!files
))
66 val () = Apache
.registerAliaser
70 !write
"\nHideReferrer\t";
74 val () = Slave
.registerFileHandler (fn fs
=>
76 val spl
= OS
.Path
.splitDirFile (#file fs
)
78 case OS
.Path
.splitBaseExt (#file spl
) of
79 {base
, ext
= SOME
"wbl"} =>
82 (ignore (OS
.Process
.system (Config
.rm
84 ^ Config
.Webalizer
.configDir
90 ignore (OS
.Process
.system (Config
.rm
92 ^ Config
.Webalizer
.outputDir
98 (ignore (OS
.Process
.system (Config
.cp
102 ^ Config
.Webalizer
.configDir
109 val dir
= Config
.Webalizer
.outputDir ^
"/" ^ Slave
.hostname () ^
"/" ^ base
111 if Posix
.FileSys
.access (dir
, []) then
119 val () = Domain
.registerResetLocal (fn () =>
121 ignore (OS
.Process
.system (Config
.rm ^
" -rf "
122 ^ Config
.Webalizer
.configDir ^
"/"
123 ^ node ^
"/*"))) Config
.nodeIps
)