[augeas-devel] [PATCH] Add logrotate and associated test

raphink at gmail.com raphink at gmail.com
Wed Jul 23 14:16:27 UTC 2008


# HG changeset patch
# User rpinson at lab64.echo-net.net
# Date 1216822552 -7200
# Node ID af5cf155aa832b7e0e048926c6818b2b9499a0db
# Parent  8f1909e6885c5f1ac7007b22a28f7f9a8559b873
Add logrotate and associated test

diff -r 8f1909e6885c -r af5cf155aa83 lenses/logrotate.aug
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lenses/logrotate.aug	Wed Jul 23 16:15:52 2008 +0200
@@ -0,0 +1,95 @@
+(* Logrotate module for Augeas                *)
+(* Author: Raphael Pinson <raphink at gmail.com> *)
+(*                                            *)
+(* Supported :                                *)
+(*   - defaults                               *)
+(*   - rules                                  *)
+(*   - (pre|post)rotate entries               *)
+(*                                            *)
+(* Todo :                                     *)
+(*                                            *)
+
+module Logrotate = 
+   autoload xfm
+
+   let sep_spc = Util.del_ws_spc
+   let eol = Util.del_str "\n"
+   let num = /[0-9]+/
+   let word = /[^,# \n\t{}]+/
+   
+
+   (* define comments and empty lines *)
+   let comment (indent:string) = [ label "comment" . del /[ \t]*/ indent . del /#[ \t]*/ "# " .  store /([^ \t\n][^\n]*)?/ . eol ]
+   let empty   = [ del /[ \t]*\n/ "" ]
+
+
+   (* Useful functions *)
+
+   let select_to_eol (kw:string) (select:regexp) (indent:string) = [ del /[ \t]*/ indent . label kw . store select . eol ]
+   let value_to_eol (kw:string) (value:regexp) (indent:string )  = [ del /[ \t]*/ indent . key kw . sep_spc . store value . eol ]
+   let flag_to_eol (kw:string) (indent:string)                   = [ del /[ \t]*/ indent . key kw . eol ]
+
+
+   (* Defaults *)
+
+   let create (indent:string ) = [ del /[ \t]*/ indent . key "create" .
+                       ( sep_spc . [ label "mode" . store num ] . sep_spc .
+		       [ label "owner" . store word ] . sep_spc .
+		       [ label "group" . store word ])?
+		    . eol ]
+
+   let attrs (indent:string) = select_to_eol "schedule" /(daily|weekly|monthly)/ indent
+                | value_to_eol "rotate" num indent
+		| create indent
+		| flag_to_eol "nocreate" indent
+		| value_to_eol "include" word indent
+		| select_to_eol "missingok" /(no)?missingok/ indent
+		| select_to_eol "compress" /(no)?compress/ indent
+		| select_to_eol "delaycompress" /(no)?delaycompress/ indent
+		| select_to_eol "ifempty" /(not)?ifempty/ indent
+		| flag_to_eol "sharedscripts" indent
+		| value_to_eol "size" word indent
+		| value_to_eol "tabooext" word indent
+		| value_to_eol "olddir" word indent
+		| flag_to_eol "noolddir" indent
+		| value_to_eol "mail" word indent
+		| flag_to_eol "mailfirst" indent
+		| flag_to_eol "maillast" indent
+		| flag_to_eol "nomail" indent
+		| value_to_eol "errors" word indent
+		| value_to_eol "extension" word indent
+
+
+   (* Define hooks *)
+
+
+   let hook_lines = store ( ( /.*/ . "\n") - /[ \t]*endscript[ \t]*\n/ )* 
+   
+   let hook_func (func_type:string) = [
+       del /[ \t]*/ "\t" . key func_type . eol .
+       hook_lines .
+       del /[ \t]*endscript\n/ "\tendscript\n" ]
+
+   let hooks = hook_func "postrotate"
+             | hook_func "prerotate"
+
+   (* Define rule *)
+
+   let body = Util.del_str "{\n"
+                       . ( comment "\t" | attrs "\t" | hooks | empty )*
+                       . Util.del_str "}\n"
+
+   let rule = 
+     [ label "rule" . 
+         [ label "file" . store word ] .
+	 [ del /[ \t]+/ " " . label "file" . store word ]* .
+	 del /[ \t\n]*/ " " . body ]
+
+   let lns = ( comment "" | empty | attrs "" | rule )*
+
+   let filter = incl "/etc/logrotate.d/*"
+              . incl "/etc/logrotate.conf"
+	      . Util.stdexcl
+
+   let xfm = transform lns filter
+
diff -r 8f1909e6885c -r af5cf155aa83 lenses/tests/test_logrotate.aug
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lenses/tests/test_logrotate.aug	Wed Jul 23 16:15:52 2008 +0200
@@ -0,0 +1,126 @@
+module Test_logrotate = 
+
+   let conf = "# see man logrotate for details
+# rotate log files weekly
+weekly
+
+# keep 4 weeks worth of backlogs
+rotate 4
+
+# create new (empty) log files after rotating old ones
+create
+
+# uncomment this if you want your log files compressed
+#compress
+
+# packages drop log rotation information into this directory
+include /etc/logrotate.d
+
+# no packages own wtmp, or btmp -- we'll rotate them here
+/var/log/wtmp 	   
+{
+    missingok
+    monthly
+    create 0664 root utmp
+    rotate 1
+}
+
+/var/log/btmp /var/log/btmp* {
+    missingok
+    # ftpd doesn't handle SIGHUP properly
+    monthly
+    create 0664 root utmp
+    rotate 1
+}
+/var/log/vsftpd.log {
+    # ftpd doesn't handle SIGHUP properly
+    nocompress
+    missingok
+    notifempty
+    rotate 4
+    weekly
+}
+
+/var/log/apache2/*.log {
+        weekly
+        missingok
+        rotate 52
+        compress
+        delaycompress
+        notifempty
+        create 640 root adm
+        sharedscripts
+        prerotate
+                if [ -f /var/run/apache2.pid ]; then
+                        /etc/init.d/apache2 restart > /dev/null
+                fi
+        endscript
+}
+"
+
+   test Logrotate.lns get conf = 
+      { "comment" = "see man logrotate for details" }
+      { "comment" = "rotate log files weekly" }
+      { "schedule" = "weekly" }
+      {}
+      { "comment" = "keep 4 weeks worth of backlogs" }
+      { "rotate"   = "4" }
+      {}
+      { "comment" = "create new (empty) log files after rotating old ones" }
+      { "create" }
+      {}
+      { "comment" = "uncomment this if you want your log files compressed" }
+      { "comment" = "compress" }
+      {}
+      { "comment" = "packages drop log rotation information into this directory" }
+      { "include" = "/etc/logrotate.d" }
+      {}
+      { "comment" = "no packages own wtmp, or btmp -- we'll rotate them here" }
+      { "rule"
+           { "file"      = "/var/log/wtmp" }
+           { "missingok" = "missingok" }
+           { "schedule"  = "monthly" }
+           { "create"
+                { "mode"  = "0664" }
+                { "owner" = "root" }
+                { "group" = "utmp" } }
+           { "rotate" = "1" } }
+      {}
+      { "rule"
+           { "file"      = "/var/log/btmp" }
+	   { "file"      = "/var/log/btmp*" }
+           { "missingok" = "missingok" }
+	   { "comment"   = "ftpd doesn't handle SIGHUP properly" }
+           { "schedule"  = "monthly" }
+           { "create"
+                { "mode"  = "0664" }
+                { "owner" = "root" }
+                { "group" = "utmp" } }
+           { "rotate" = "1" } }
+      { "rule"
+           { "file"      = "/var/log/vsftpd.log" }
+           { "comment"   = "ftpd doesn't handle SIGHUP properly" }
+           { "compress"  = "nocompress" }
+           { "missingok" = "missingok" }
+           { "ifempty"   = "notifempty" }
+           { "rotate"    = "4" }
+           { "schedule"  = "weekly" } }
+      {}
+      { "rule"
+           { "file"          = "/var/log/apache2/*.log" }
+           { "schedule"      = "weekly" }
+           { "missingok"     = "missingok" }
+           { "rotate"        = "52" }
+           { "compress"      = "compress" }
+           { "delaycompress" = "delaycompress" }
+           { "ifempty"       = "notifempty" }
+           { "create"
+                { "mode"  = "640"  }
+                { "owner" = "root" }
+                { "group" = "adm"  } }
+           { "sharedscripts" }
+           { "prerotate" = "                if [ -f /var/run/apache2.pid ]; then
+                        /etc/init.d/apache2 restart > /dev/null
+                fi
+" } } 
+




More information about the augeas-devel mailing list