Home Forums HAast (High Availability for Asterisk) API Programming Cluster status via socket Reply To: Cluster status via socket

Avatar photoTelium Support Group
Participant
Post count: 262

To help customers trying to extract status information, here is a sample python script that retrieves and prints the local status:


# Example python script to retrieve local HAAst status
import socket
import sys
# End of packet marker
READYPROMPT=’ready>’
# Create a UDS socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
# Connect the socket to the port where the server is listening
server_address = ‘/run/haast.sock’
try:
sock.connect(server_address)
except socket.error, msg:
print >>sys.stderr, msg
sys.exit(1)
# Wait for a packet
def receivepacket():
global sock
total_data=[];data=”
while True:
data=sock.recv(8192)
if READYPROMPT in data:
total_data.append(data[:data.find(READYPROMPT)])
break
total_data.append(data)
if len(total_data)>2:
#check if end_of_data was split
last_pair=total_data[-2]+total_data[-1]
if READYPROMPT in last_pair:
total_data[-2]=last_pair[:last_pair.find(READYPROMPT)]
total_data.pop()
break
return ”.join(total_data).replace(‘r’,”).replace(‘nn’,’n’)
# Send a packet
def sendpacket(message):
global sock
success = 1
try:
# Send data
message += ‘nn’
# print >>sys.stderr, ‘sending “%s”‘%message
sock.sendall(message)
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected: data = sock.recv(16) amount_received += len(data) finally: # print >>sys.stderr, ‘closing socket’
# sock.close()
success = 0
return success
got = receivepacket()
sendpacket(“id:123ncommand:getstatus”)
got = receivepacket()
for item in got.split(“n”):
if “local haast state formatted:” in item:
print item.strip()
sock.close()