[Checkins] SVN: zc.resumelb/trunk/s Added API and script for getting worker resumes.

jim cvs-admin at zope.org
Mon Mar 26 19:47:31 UTC 2012


Log message for revision 124738:
  Added API and script for getting worker resumes.
  

Changed:
  U   zc.resumelb/trunk/setup.py
  U   zc.resumelb/trunk/src/zc/resumelb/README.txt
  U   zc.resumelb/trunk/src/zc/resumelb/worker.py
  U   zc.resumelb/trunk/src/zc/resumelb/worker.test

-=-
Modified: zc.resumelb/trunk/setup.py
===================================================================
--- zc.resumelb/trunk/setup.py	2012-03-26 16:49:16 UTC (rev 124737)
+++ zc.resumelb/trunk/setup.py	2012-03-26 19:47:27 UTC (rev 124738)
@@ -24,6 +24,7 @@
 [console_scripts]
 resumelb = zc.resumelb.lb:main
 zkresumelb = zc.resumelb.zk:lbmain
+get-worker-resume = zc.resumelb.worker:get_resume_main
 
 [paste.server_runner]
 main = zc.resumelb.worker:server_runner

Modified: zc.resumelb/trunk/src/zc/resumelb/README.txt
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/README.txt	2012-03-26 16:49:16 UTC (rev 124737)
+++ zc.resumelb/trunk/src/zc/resumelb/README.txt	2012-03-26 19:47:27 UTC (rev 124738)
@@ -243,6 +243,19 @@
 0.2.0 (2012-03-??)
 ------------------
 
+- There's a new API for getting worker resumes, typically from
+  monitoring code::
+
+    >>> import zc.resume.worker
+    >>> print zc.resume.worker.get_resume(addr)
+
+  This is useful both for getting a worker's resume and for making
+  sure that the worker is accepting load-balancer connections.
+
+  There's also a scriot version of this::
+
+    bin/get-worker-resume 192.168.24.60:33161
+
 - The update settings methods were changed to revert settings to
   default when not provided.  This is especially important when used
   with ZooKeeper, so you can look at a tree and know what settings are

Modified: zc.resumelb/trunk/src/zc/resumelb/worker.py
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/worker.py	2012-03-26 16:49:16 UTC (rev 124737)
+++ zc.resumelb/trunk/src/zc/resumelb/worker.py	2012-03-26 19:47:27 UTC (rev 124738)
@@ -4,12 +4,14 @@
 import gevent
 import gevent.hub
 import gevent.server
+import gevent.socket
 import gevent.threadpool
 import logging
 import marshal
 import os
 import sys
 import time
+import zc.parse_addr
 import zc.resumelb.util
 
 logger = logging.getLogger(__name__)
@@ -273,7 +275,21 @@
                 except zc.resumelb.util.Disconnected:
                     pass
 
+def get_resume(addr):
+    socket = gevent.socket.create_connection(addr)
+    rno, data = zc.resumelb.util.read_message(socket)
+    socket.close()
+    assert rno == 0, rno
+    return data
 
+def get_resume_main(args=None):
+    if args is None:
+        args = sys.argv[1:]
+    from pprint import pprint
+    for arg in args:
+        print arg
+        pprint(get_resume(zc.parse_addr.parse_addr(arg)), width=1)
+
 def server_runner(app, global_conf, address, **kw):
     # paste deploy hook
     logging.basicConfig(level=logging.INFO)

Modified: zc.resumelb/trunk/src/zc/resumelb/worker.test
===================================================================
--- zc.resumelb/trunk/src/zc/resumelb/worker.test	2012-03-26 16:49:16 UTC (rev 124737)
+++ zc.resumelb/trunk/src/zc/resumelb/worker.test	2012-03-26 19:47:27 UTC (rev 124738)
@@ -340,7 +340,27 @@
     >>> read_message(worker_socket2) == (zero, resume)
     True
 
+Monitoring/getting resumes
+==========================
 
+As we saw above, when an lb connects to a worker, the worker sends it
+its resume.  A utility, ``zc.resumelb.worker.get_resume`` leverages
+this to connect to a worker and get it's resume.  This is useful both
+to get the worker's resume, and to make sure the worker is accepting
+lb connections:
+
+    >>> sorted(zc.resumelb.worker.get_resume(worker.addr))
+    ['', '1', '2']
+
+There's also a "main program" version of the API:
+
+    >>> zc.resumelb.worker.get_resume_main(["%s:%s" % worker.addr])
+    ... # doctest: +ELLIPSIS
+    127.0.0.1:47094
+    {'': ...,
+     '1': ...,
+     '2': ...}
+
 Gracefull shutdown
 ==================
 
@@ -414,9 +434,9 @@
 Note that we specified a max_skill_age of 4, rather than the default
 10x the history.
 
-    >>> from pprint import pprint
     >>> env = newenv('test', '/hi.html')
     >>> worker_socket = gevent.socket.create_connection(worker.addr)
+    >>> from pprint import pprint
     >>> pprint(read_message(worker_socket))
     (0, {'a': 1.0, 'b': 2.0})
 



More information about the checkins mailing list