Backing up Webalizer output
authorAdam Chlipala <adamc@hcoop.net>
Sat, 17 Nov 2007 18:01:23 +0000 (18:01 +0000)
committerAdam Chlipala <adamc@hcoop.net>
Sat, 17 Nov 2007 18:01:23 +0000 (18:01 +0000)
configDefault/webalizer.cfg
configDefault/webalizer.csg
src/plugins/webalizer.sml

index 4f1c83a..279ca9d 100644 (file)
@@ -2,5 +2,6 @@ structure Webalizer :> WEBALIZER_CONFIG = struct
 
 val configDir = "/afs/hcoop.net/common/etc/domtool/webalizer/config"
 val outputDir = "/afs/hcoop.net/common/etc/domtool/webalizer/output"
+val backupDir = "/afs/hcoop.net/common/etc/domtool/backup/webalizer"
 
 end
index 360be67..1ac2812 100644 (file)
@@ -2,5 +2,6 @@ signature WEBALIZER_CONFIG = sig
 
     val configDir : string
     val outputDir : string
+    val backupDir : string
 
 end
index d708dba..034e043 100644 (file)
@@ -71,42 +71,48 @@ val () = Slave.registerFileHandler (fn fs =>
                                       in
                                           case OS.Path.splitBaseExt (#file spl) of
                                               {base, ext = SOME "wbl"} =>
-                                              (case #action fs of
-                                                   Slave.Delete =>
-                                                   (ignore (OS.Process.system (Config.rm
-                                                                               ^ " -f "
-                                                                               ^ Config.Webalizer.configDir
-                                                                               ^ "/"
-                                                                               ^ Slave.hostname ()
-                                                                               ^ "/"
-                                                                               ^ base
-                                                                               ^ ".conf"));
-                                                    ignore (OS.Process.system (Config.rm
-                                                                               ^ " -rf "
-                                                                               ^ Config.Webalizer.outputDir
-                                                                               ^ "/"
-                                                                               ^ Slave.hostname ()
-                                                                               ^ "/"
-                                                                               ^ base)))
-                                                 | _ =>
-                                                   (ignore (OS.Process.system (Config.cp
-                                                                               ^ " "
-                                                                               ^ #file fs
-                                                                               ^ " "
-                                                                               ^ Config.Webalizer.configDir
-                                                                               ^ "/"
-                                                                               ^ Slave.hostname ()
-                                                                               ^ "/"
-                                                                               ^ base
-                                                                               ^ ".conf"));
-                                                    let
-                                                        val dir = Config.Webalizer.outputDir ^ "/" ^ Slave.hostname () ^ "/" ^ base
-                                                    in
-                                                        if Posix.FileSys.access (dir, []) then
-                                                            ()
-                                                        else
-                                                            OS.FileSys.mkDir dir
-                                                    end))
+                                              let
+                                                  fun backupDir () = OS.Path.joinDirFile
+                                                                         {dir = Config.Webalizer.backupDir,
+                                                                          file = base}
+                                              in
+                                                  case #action fs of
+                                                      Slave.Delete =>
+                                                      (ignore (OS.Process.system (Config.rm
+                                                                                  ^ " -f "
+                                                                                  ^ Config.Webalizer.configDir
+                                                                                  ^ "/"
+                                                                                  ^ Slave.hostname ()
+                                                                                  ^ "/"
+                                                                                  ^ base
+                                                                                  ^ ".conf"));
+                                                       Slave.moveDirCreate {from = Config.Webalizer.outputDir
+                                                                                   ^ "/"
+                                                                                   ^ Slave.hostname ()
+                                                                                   ^ "/"
+                                                                                   ^ base,
+                                                                            to = backupDir ()})
+                                                    | _ =>
+                                                      (ignore (OS.Process.system (Config.cp
+                                                                                  ^ " "
+                                                                                  ^ #file fs
+                                                                                  ^ " "
+                                                                                  ^ Config.Webalizer.configDir
+                                                                                  ^ "/"
+                                                                                  ^ Slave.hostname ()
+                                                                                  ^ "/"
+                                                                                  ^ base
+                                                                                  ^ ".conf"));
+                                                       let
+                                                           val dir = Config.Webalizer.outputDir ^ "/" ^ Slave.hostname () ^ "/" ^ base
+                                                       in
+                                                           if Posix.FileSys.access (dir, []) then
+                                                               ()
+                                                           else
+                                                               Slave.moveDirCreate {from = backupDir (),
+                                                                                    to = dir}
+                                                       end)
+                                              end
                                             | _ => ()
                                       end)