[CalendarServer-changes] [15621] CalendarServer/trunk/calendarserver/tools

source_changes at macosforge.org source_changes at macosforge.org
Fri May 20 08:02:51 PDT 2016


Revision: 15621
          http://trac.calendarserver.org//changeset/15621
Author:   cdaboo at apple.com
Date:     2016-05-20 08:02:50 -0700 (Fri, 20 May 2016)
Log Message:
-----------
Better error handling.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tools/dashcollect.py
    CalendarServer/trunk/calendarserver/tools/dashview.py

Modified: CalendarServer/trunk/calendarserver/tools/dashcollect.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/dashcollect.py	2016-05-20 00:27:35 UTC (rev 15620)
+++ CalendarServer/trunk/calendarserver/tools/dashcollect.py	2016-05-20 15:02:50 UTC (rev 15621)
@@ -113,11 +113,18 @@
                 host[1] = int(host[1])
             host = tuple(host)
 
-        server = CollectorService(host, CollectorRequestHandler)
-        server.dashboard = dash
-        server_thread = Thread(target=server.serve_forever)
-        server_thread.daemon = True
-        server_thread.start()
+        try:
+            server = CollectorService(host, CollectorRequestHandler)
+            server.dashboard = dash
+            server_thread = Thread(target=server.serve_forever)
+            server_thread.daemon = True
+            server_thread.start()
+        except Exception as e:
+            print("Terminating service due to error: {}".format(e))
+            dash.stop()
+            server.shutdown()
+            server_thread.join()
+            sys.exit(1)
 
     while dash_thread.isAlive():
         try:
@@ -126,6 +133,7 @@
             print("Terminating service")
             dash.stop()
             server.shutdown()
+            server_thread.join()
 
 
 
@@ -266,11 +274,11 @@
                     self.socket.connect(self.sockname)
                 self.socket.setblocking(0)
             self.socket.sendall(json.dumps(items) + "\r\n")
-        except socket.error:
+        except socket.error as e:
             self.socket = None
-            _verbose("    server failed: {}".format(self.host))
-        except ValueError:
-            pass
+            _verbose("    server failed: {} {}".format(self.host, e))
+        except ValueError as e:
+            _verbose("    server failed: {} {}".format(self.host, e))
 
 
     def readSock(self, items):
@@ -286,7 +294,7 @@
                 try:
                     d = self.socket.recv(1024)
                 except socket.error as se:
-                    if se.args[0] != errno.EWOULDBLOCK:
+                    if se.args[0] not in (errno.EWOULDBLOCK, errno.EAGAIN):
                         raise
                     if time.time() - t > 5:
                         raise socket.error
@@ -296,11 +304,13 @@
                 else:
                     break
             data = json.loads(data, object_pairs_hook=OrderedDict)
-        except socket.error:
+        except socket.error as e:
             data = {}
             self.socket = None
-        except ValueError:
+            _verbose("    server failed: {} {}".format(self.host, e))
+        except ValueError as e:
             data = {}
+            _verbose("    server failed: {} {}".format(self.host, e))
         return data
 
 
@@ -312,7 +322,7 @@
         # Only read each item once
         self.currentData = self.readSock(list(set(self.items)))
         data[self.host] = self.currentData
-        _verbose("    Server read: {}".format(self.host))
+        _verbose("    Server read: {} {}".format(self.host, len(data[self.host])))
         #_verbose("      Data: {}".format(self.currentData))
 
 

Modified: CalendarServer/trunk/calendarserver/tools/dashview.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/dashview.py	2016-05-20 00:27:35 UTC (rev 15620)
+++ CalendarServer/trunk/calendarserver/tools/dashview.py	2016-05-20 15:02:50 UTC (rev 15621)
@@ -34,7 +34,6 @@
 import termios
 import time
 
-
 LOG_FILENAME = "db.log"
 logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG)
 
@@ -404,7 +403,7 @@
         # jobs are only requested from the first server in a pod because otherwise
         # it would be too expensive to run the DB query for all servers. So when we
         # need the jobs data, always substitute the first server's data
-        if item == "jobs":
+        if item in ("jobs", "jobcount"):
             server = self.currentData["pods"][pod].keys()[0]
 
         return self.currentData["pods"][pod][server].get(item)
@@ -798,7 +797,7 @@
                 safeDivision(stat["t"] - stat["t-resp-wr"], stat["requests"]),
                 stat["T-MAX"],
                 safeDivision(float(stat["slots"]), stat["requests"]),
-                stat["max-slots"],
+                stat.get("max-slots", 0),
                 safeDivision(stat["cpu"], stat["requests"]),
                 stat["500"],
             )
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20160520/9860d696/attachment.html>


More information about the calendarserver-changes mailing list