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
, Apache
.realLogDir
{user
= user
, node
= node
, vhostId
= hostname
});
36 TextIO.output (fd
, "/access.log\nOutputDir\t");
37 TextIO.output (fd
, Config
.Webalizer
.outputDir
);
38 TextIO.output (fd
, "/");
39 TextIO.output (fd
, node
);
40 TextIO.output (fd
, "/");
41 TextIO.output (fd
, id
);
42 TextIO.output (fd
, "\n");
47 write
:= (fn s
=> app (fn fd
=> TextIO.output (fd
, s
)) fds
);
50 !write
"\nHideSite\t";
52 !write
"\nHideReferrer\t";
57 val () = Apache
.registerPost
58 (fn () => app
TextIO.closeOut (!files
))
60 val () = Apache
.registerAliaser
64 !write
"\nHideReferrer\t";
68 val () = Slave
.registerFileHandler (fn fs
=>
70 val spl
= OS
.Path
.splitDirFile (#file fs
)
72 case OS
.Path
.splitBaseExt (#file spl
) of
73 {base
, ext
= SOME
"wbl"} =>
75 fun backupDir () = OS
.Path
.joinDirFile
76 {dir
= Config
.Webalizer
.backupDir
,
81 (ignore (OS
.Process
.system (Config
.rm
83 ^ Config
.Webalizer
.configDir
89 Slave
.moveDirCreate
{from
= Config
.Webalizer
.outputDir
96 (ignore (OS
.Process
.system (Config
.cp
100 ^ Config
.Webalizer
.configDir
107 val dir
= Config
.Webalizer
.outputDir ^
"/" ^ Slave
.hostname () ^
"/" ^ base
109 if Posix
.FileSys
.access (dir
, []) then
112 Slave
.moveDirCreate
{from
= backupDir (),
119 val () = Domain
.registerResetLocal (fn () =>
121 ignore (OS
.Process
.system (Config
.rm ^
" -rf "
122 ^ Config
.Webalizer
.configDir ^
"/"
123 ^ node ^
"/*"))) Config
.nodeIps
)
125 val () = Domain
.registerDescriber (Domain
.considerAll
126 [Domain
.Extension
{extension
= "wbl",
127 heading
= fn host
=> "Webalizer config for " ^ host ^
":"}])