[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