[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