[augeas-devel] [PATCH] Add monit lens and test
Free Ekanayaka
free at 64studio.com
Mon Sep 8 09:03:06 UTC 2008
# HG changeset patch
# User Free Ekanayaka <free at 64studio.com>
# Date 1220864568 -7200
# Node ID e830671ad2f0e3a52fdec362eeeedcefbc5847a7
# Parent b6dce69c2745729eba7ecce5c2b745d4f4fc725d
Add monit lens and test
diff -r b6dce69c2745 -r e830671ad2f0 lenses/monit.aug
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lenses/monit.aug Mon Sep 08 11:02:48 2008 +0200
@@ -0,0 +1,71 @@
+(* Monit module for Augeas
+ Author: Free Ekanayaka <free at 64studio.com>
+
+ Reference: man monit (1), section "HOW TO MONITOR"
+
+ "A monit control file consists of a series of service entries and
+ global option statements in a free-format, token-oriented syntax.
+
+ Comments begin with a # and extend through the end of the line. There
+ are three kinds of tokens in the control file: grammar keywords, numbers
+ and strings. On a semantic level, the control file consists of three
+ types of statements:
+
+ 1. Global set-statements
+ A global set-statement starts with the keyword set and the item to
+ configure.
+
+ 2. Global include-statement
+ The include statement consists of the keyword include and a glob
+ string.
+
+ 3. One or more service entry statements.
+ A service entry starts with the keyword check followed by the
+ service type"
+
+*)
+
+module Monit =
+
+ autoload xfm
+
+(************************************************************************
+ * USEFUL PRIMITIVES
+ *************************************************************************)
+
+let eol = Util.eol
+let spc = Util.del_ws_spc
+let comment = Util.comment
+let empty = Util.empty
+
+let sto_to_eol = store /([^ \t\n].*[^ \t\n]|[^ \t\n])/
+let sto_to_spc = store /[^ \t\n]+/
+
+let word = /[A-Za-z0-9_.-]+/
+let value = [ key word . spc . sto_to_eol . eol ]
+
+(************************************************************************
+ * ENTRIES
+ *************************************************************************)
+
+(* set statement *)
+let set = [ key "set" . spc . value ]
+
+(* include statement *)
+let include = [ key "include" . spc . sto_to_eol . eol ]
+
+(* service statement *)
+let service = [ key "check" . spc . value . (spc . value)+ ]
+
+let entry = (set|include|service)
+
+(************************************************************************
+ * LENS
+ *************************************************************************)
+
+let lns = (comment|empty|entry) *
+
+let filter = incl "/etc/monit/monitrc"
+ . Util.stdexcl
+
+let xfm = transform lns filter
diff -r b6dce69c2745 -r e830671ad2f0 lenses/tests/test_monit.aug
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lenses/tests/test_monit.aug Mon Sep 08 11:02:48 2008 +0200
@@ -0,0 +1,35 @@
+module Test_monit =
+
+let conf = "# Configuration file for monit.
+#
+set alert root at localhost
+include /my/monit/conf
+
+check process sshd
+ start program \"/etc/init.d/ssh start\"
+ if failed port 22 protocol ssh then restart
+
+check process httpd with pidfile /usr/local/apache2/logs/httpd.pid
+ group www-data
+ start program \"/usr/local/apache2/bin/apachectl start\"
+ stop program \"/usr/local/apache2/bin/apachectl stop\"
+"
+
+test Monit.lns get conf =
+ { "#comment" = "Configuration file for monit." }
+ {}
+ { "set"
+ {"alert" = "root at localhost" } }
+ { "include" = "/my/monit/conf" }
+ {}
+ { "check"
+ { "process" = "sshd" }
+ { "start" = "program \"/etc/init.d/ssh start\"" }
+ { "if" = "failed port 22 protocol ssh then restart" } }
+ {}
+ { "check"
+ { "process" = "httpd with pidfile /usr/local/apache2/logs/httpd.pid" }
+ { "group" = "www-data" }
+ { "start" = "program \"/usr/local/apache2/bin/apachectl start\"" }
+ { "stop" = "program \"/usr/local/apache2/bin/apachectl stop\"" }
+}
More information about the augeas-devel
mailing list