[CalendarServer-changes] [1456] CalDAVTester/trunk

source_changes at macosforge.org source_changes at macosforge.org
Fri Apr 6 08:29:21 PDT 2007


Revision: 1456
          http://trac.macosforge.org/projects/calendarserver/changeset/1456
Author:   cdaboo at apple.com
Date:     2007-04-06 08:29:20 -0700 (Fri, 06 Apr 2007)

Log Message:
-----------
Minor refactoring and clean-up of termination process.

Modified Paths:
--------------
    CalDAVTester/trunk/monitor.py
    CalDAVTester/trunk/scripts/monitoring/monitorinfo.dtd
    CalDAVTester/trunk/scripts/monitoring/monitorinfo.xml
    CalDAVTester/trunk/src/monitorinfo.py
    CalDAVTester/trunk/src/xmlDefs.py

Modified: CalDAVTester/trunk/monitor.py
===================================================================
--- CalDAVTester/trunk/monitor.py	2007-04-05 21:21:47 UTC (rev 1455)
+++ CalDAVTester/trunk/monitor.py	2007-04-06 15:29:20 UTC (rev 1456)
@@ -35,108 +35,139 @@
 
 EX_INVALID_CONFIG_FILE = "Invalid Config File"
 
-if __name__ == "__main__":
+class monitor(object):
     
-    monitorinfoname = "scripts/monitoring/monitorinfo.xml"
-    if len(sys.argv) > 1:
-        monitorinfoname = sys.argv[1]
-        
-    if len(sys.argv) > 2:
-        monitorlogname = sys.argv[2]
-    else:
-        monitorlogname = None
+    def __init__(self, infoname, logname, user, pswd):
+        self.infoname = infoname
+        self.user = user
+        self.pswd = pswd
+        self.minfo = None
 
-    def readXML():
+        if logname:
+            self.log = open(logname, "a")
+        else:
+            self.log = None
+            
+        self.running = True
 
+    def readXML(self):
+
         # Open and parse the server config file
-        fd = open(monitorinfoname, "r")
+        fd = open(self.infoname, "r")
         doc = xml.dom.minidom.parse( fd )
         fd.close()
 
         # Verify that top-level element is correct
-        monitorinfoname_node = doc._get_documentElement()
-        if monitorinfoname_node._get_localName() != src.xmlDefs.ELEMENT_MONITORINFO:
+        node = doc._get_documentElement()
+        if node._get_localName() != src.xmlDefs.ELEMENT_MONITORINFO:
             raise EX_INVALID_CONFIG_FILE
-        if not monitorinfoname_node.hasChildNodes():
+        if not node.hasChildNodes():
             raise EX_INVALID_CONFIG_FILE
-        minfo = monitorinfo()
-        minfo.parseXML(monitorinfoname_node)
-        return minfo
+        self.minfo = monitorinfo()
+        self.minfo.parseXML(node)
     
-    user = raw_input("User: ")
-    pswd = getpass("Password: ")
-    
-    minfo = readXML()
-
-    def doScript(script):
+    def doScript(self, script):
         mgr = manager(level=manager.LOG_NONE)
-        return mgr.runWithOptions(minfo.serverinfo, "", [script,], {"$userid1:":user, "$pswd1:":pswd, "$principal:":"/principals/users/%s/"%(user,)})
+        return mgr.runWithOptions(
+            self.minfo.serverinfo,
+            "",
+            [script,],
+            {
+                "$userid1:"  : self.user,
+                "$pswd1:"    : self.pswd,
+                "$principal:": "/principals/users/%s/" % (self.user,)
+            }
+        )
 
-    def doStart():
-        if minfo.startscript:
-            print "Runnning start script %s" % (minfo.startscript,)
-            doScript(minfo.startscript)
+    def doStart(self):
+        self.logtxt("Starting Monitor")
 
-    def doEnd(sig, frame):
-        if minfo.endscript:
-            print "Runnning end script %s" % (minfo.endscript,)
-            doScript(minfo.endscript)
-        sys.exit()
+        if self.minfo.startscript:
+            self.logtxt("Runnning start script %s" % (self.minfo.startscript,))
+            self.doScript(self.minfo.startscript)
 
-    def doNotification(msg):
+    def doEnd(self):
+        if self.minfo.endscript:
+            self.logtxt("Runnning end script %s" % (self.minfo.endscript,))
+            self.doScript(self.minfo.endscript)
+
+        self.logtxt("Stopped Monitor")
+        self.running = False
+
+    def doError(self, msg):
+        self.logtxt("Run exception: %s" % (msg,))
+
+    def doNotification(self, msg):
         sendemail(
-            fromaddr = ("Do Not Reply", "icalbridge-alert at apple.com"),
-            toaddrs = [("", a) for a in minfo.notify],
-            subject = minfo.notify_subject,
-            body = minfo.notify_body % (msg,),
+            fromaddr = ("Do Not Reply", self.minfo.notify_from),
+            toaddrs = [("", a) for a in self.minfo.notify],
+            subject = self.minfo.notify_subject,
+            body = self.minfo.notify_body % (msg,),
         )
 
-    signal.signal(signal.SIGINT, doEnd)
+    def logtxt(self, txt):
+        dt = str(datetime.datetime.now())
+        dt = dt[0:dt.rfind(".")]
+        if self.log:
+            self.log.write("[%s] %s\n" % (dt, txt,))
+            self.log.flush()
+        else:
+            print "[%s] %s" % (dt, txt,)
+    
+    def runLoop(self):
+        last_notify = 0
+        while(self.running):
+            time.sleep(self.minfo.period)
+            if not self.running:
+                break
+            result, timing = m.doScript(self.minfo.testinfo)
+            if not self.running:
+                break
+            if self.minfo.logging:
+                self.logtxt("Result: %d, Timing: %.3f" % (result, timing,))
+            if timing >= self.minfo.warningtime:
+                msg = "WARNING: request time (%.3f) exceeds limit (%.3f)" % (timing, self.minfo.warningtime,)
+                self.logtxt(msg)
+                if self.minfo.notify_time_exceeded and (time.time() - last_notify > self.minfo.notify_interval * 60):
+                    self.logtxt("Sending notification to %s" % (self.minfo.notify,))
+                    self.doNotification(msg)
+                    last_notify = time.time()
+            if result != 0:
+                msg = "WARNING: request failed"
+                self.logtxt(msg)
+                if self.minfo.notify_request_failed and (time.time() - last_notify > self.minfo.notify_interval * 60):
+                    self.logtxt("Sending notification to %s" % (self.minfo.notify,))
+                    self.doNotification(msg)
+                    last_notify = time.time()
 
-    if monitorlogname:
-        log = open(monitorlogname, "a")
+if __name__ == "__main__":
+    
+    infoname = "scripts/monitoring/monitorinfo.xml"
+    if len(sys.argv) > 1:
+        infoname = sys.argv[1]
+        
+    if len(sys.argv) > 2:
+        logname = sys.argv[2]
     else:
-        log = None
+        logname = None
 
-    def logtxt(txt):
-        if log:
-            log.write("%s\n" % (txt,))
-        else:
-            print txt
+    user = raw_input("User: ")
+    pswd = getpass("Password: ")
+    
+    m = monitor(infoname, logname, user, pswd)
+    m.readXML()
 
-    doStart()
+    def signalEnd(sig, frame):
+        m.doEnd()
+        sys.exit()
 
-    if minfo.logging:
-        logtxt("Start:")
+    signal.signal(signal.SIGINT, signalEnd)
+
+    m.doStart()
+
     try:
-        last_notify = 0
-        while(True):
-            time.sleep(minfo.period)
-            result, timing = doScript(minfo.testinfo)
-            if minfo.logging:
-                logtxt("Result: %d, Timing: %.3f" % (result, timing,))
-            if timing >= minfo.warningtime:
-                dt = str(datetime.datetime.now())
-                dt = dt[0:dt.rfind(".")]
-                msg = "[%s] WARNING: request time (%.3f) exceeds limit (%.3f)" % (dt, timing, minfo.warningtime,)
-                logtxt(msg)
-                if minfo.notify_time_exceeded and (time.time() - last_notify > minfo.notify_interval * 60):
-                    logtxt("Sending notification to %s" % (minfo.notify,))
-                    doNotification(msg)
-                    last_notify = time.time()
-            if result != 0:
-                dt = str(datetime.datetime.now())
-                dt = dt[0:dt.rfind(".")]
-                msg = "[%s] WARNING: request failed" % (dt,)
-                logtxt(msg)
-                if minfo.notify_request_failed and (time.time() - last_notify > minfo.notify_interval * 60):
-                    logtxt("Sending notification to %s" % (minfo.notify,))
-                    doNotification(msg)
-                    last_notify = time.time()
-
-        if minfo.logging:
-            logtxt("Done")
+        m.runLoop()
     except SystemExit:
         pass
     except Exception, e:
-        log.write("Run exception: %s" % (str(e),))
+        m.doError(str(e))

Modified: CalDAVTester/trunk/scripts/monitoring/monitorinfo.dtd
===================================================================
--- CalDAVTester/trunk/scripts/monitoring/monitorinfo.dtd	2007-04-05 21:21:47 UTC (rev 1455)
+++ CalDAVTester/trunk/scripts/monitoring/monitorinfo.dtd	2007-04-06 15:29:20 UTC (rev 1456)
@@ -33,11 +33,12 @@
 
 	<!ELEMENT warningtime  	(#PCDATA)>
 	
-	<!ELEMENT notify        (mailto+, subject, body)>
+	<!ELEMENT notify        (mailfrom, mailto+, subject, body)>
 		<!ATTLIST notify	time-exceeded  (yes|no) "no"
 							request-failed (yes|no) "yes"
 							interval       CDATA    "15">
 	
+		<!ELEMENT mailfrom  (#PCDATA)>
 		<!ELEMENT mailto    (#PCDATA)>
 		<!ELEMENT subject   (#PCDATA)>
 		<!ELEMENT body      (#PCDATA)>

Modified: CalDAVTester/trunk/scripts/monitoring/monitorinfo.xml
===================================================================
--- CalDAVTester/trunk/scripts/monitoring/monitorinfo.xml	2007-04-05 21:21:47 UTC (rev 1455)
+++ CalDAVTester/trunk/scripts/monitoring/monitorinfo.xml	2007-04-06 15:29:20 UTC (rev 1456)
@@ -29,6 +29,7 @@
 	<end>monitor/get/get-end.xml</end>
 	<warningtime>1.0</warningtime>
 	<notify time-exceeded="no" request-failed="yes">
+		<mailfrom>test at example.com</mailfrom>
 		<mailto>test at example.com</mailto>
 		<subject>Calendar Server error</subject>
 		<body><![CDATA[Hi,

Modified: CalDAVTester/trunk/src/monitorinfo.py
===================================================================
--- CalDAVTester/trunk/src/monitorinfo.py	2007-04-05 21:21:47 UTC (rev 1455)
+++ CalDAVTester/trunk/src/monitorinfo.py	2007-04-06 15:29:20 UTC (rev 1456)
@@ -39,6 +39,7 @@
         'endscript',
         'warningtime',
         'notify',
+        'notify_from',
         'notify_time_exceeded',
         'notify_request_failed',
         'notify_interval',
@@ -55,6 +56,7 @@
         self.endscript = ""
         self.warningtime = 1.0
         self.notify = None
+        self.notify_from = None
         self.notify_time_exceeded = False
         self.notify_request_failed = False
         self.notify_interval = 15
@@ -84,5 +86,6 @@
                 self.notify_request_failed = getYesNoAttributeValue(child, src.xmlDefs.ATTR_REQUEST_FAILED)
                 self.notify_interval = int(getDefaultAttributeValue(child, src.xmlDefs.ATTR_INTERVAL, "15"))
                 self.notify = readStringElementList(child, src.xmlDefs.ELEMENT_MAILTO)
+                self.notify_from = readOneStringElement(child, src.xmlDefs.ELEMENT_MAILFROM)
                 self.notify_subject = readOneStringElement(child, src.xmlDefs.ELEMENT_SUBJECT)
                 self.notify_body = readOneStringElement(child, src.xmlDefs.ELEMENT_BODY)

Modified: CalDAVTester/trunk/src/xmlDefs.py
===================================================================
--- CalDAVTester/trunk/src/xmlDefs.py	2007-04-05 21:21:47 UTC (rev 1455)
+++ CalDAVTester/trunk/src/xmlDefs.py	2007-04-06 15:29:20 UTC (rev 1456)
@@ -37,6 +37,7 @@
 ELEMENT_HOST = "host"
 ELEMENT_KEY = "key"
 ELEMENT_LOGGING = "logging"
+ELEMENT_MAILFROM = "mailfrom"
 ELEMENT_MAILTO = "mailto"
 ELEMENT_METHOD = "method"
 ELEMENT_MONITORINFO = "monitorinfo"

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070406/d4719443/attachment.html


More information about the calendarserver-changes mailing list