[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