Skip to content

Commit 35e1d85

Browse files
committed
Merge pull request #3 from derpston/master
Add support for the 'members' command, other small fixes
2 parents 145abba + 1b52251 commit 35e1d85

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

serfclient/client.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ def event(self, name, payload=None, coalesce=True):
2222
'event',
2323
{'Name': name, 'Payload': payload, 'Coalesce': coalesce})
2424

25+
def members(self):
26+
"""
27+
Lists members of a Serf cluster.
28+
"""
29+
return self.connection.call('members')
30+
2531
def force_leave(self, name):
2632
"""
2733
Force a node to leave the cluster.

serfclient/connection.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import sys
33
import msgpack
44

5-
from io import BytesIO
65
try:
76
from serfclient.result import SerfResult
87
except ImportError:
@@ -49,12 +48,11 @@ def call(self, command, params=None):
4948
else:
5049
self._socket.sendall(header)
5150

52-
buf = BytesIO()
53-
buf.write(self._socket.recv(4096))
54-
buf.seek(0)
51+
unpacker = msgpack.Unpacker()
52+
unpacker.feed(self._socket.recv(4096))
5553

5654
response = SerfResult()
57-
for item in msgpack.Unpacker(buf):
55+
for item in unpacker:
5856
if response.head is None:
5957
response.head = item
6058
else:

tests/test_client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,7 @@ def test_providing_a_single_value_should_put_it_inside_a_list(self, serf):
5151
assert join.head == {b'Error': b'Reading remote state failed: EOF',
5252
b'Seq': 1}
5353
assert join.body == {b'Num': 0}
54+
55+
def test_member_list_is_not_empty(self, serf):
56+
members = serf.members()
57+
assert len(members.body[b'Members']) > 0

0 commit comments

Comments
 (0)