Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import requests
- import socket
- import sys
- BACKEND_PREFIX = 'backend_'
- BUFFER_SIZE = 16
- SOCKET_PATH = '/var/run/hapee-lb.sock'
- SOCKET_TIMEOUT = 10
- def get_client_backends():
- pass
- def get_haproxy_backends(stats):
- backends = {}
- for line in stats:
- values = line.split(',')
- if len(values) > 80 and backend_values[0].startswith(BACKEND_PREFIX):
- server = get_server(values)
- if server['backend'] not backends:
- backends[server['backend'] = { 'active': {}, 'inactive': [] }
- if server['state'] == 'MAINT':
- backends[server['backend']['inactive'].append(server)
- else:
- backends[server['backend']['active'][server['address']] = server
- return backends
- def get_server(values):
- server = {}
- server['address'] = values[73]
- server['backend'] = values[0]
- server['name'] = values[1]
- server['state'] = values[17]
- return server
- def send_haproxy_command(command):
- socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- socket.settimeout(SOCKET_TIMEOUT)
- try:
- answer = ''
- socket.connect(SOCKET_PATH)
- socket.send(command)
- while True:
- data = socket.recv(BUFFER_SIZE)
- if data:
- answer += data
- else:
- break
- except:
- pass
- finally:
- socket.close()
- return answer
- def update_backends():
- stats = send_haproxy_command(server, "show stat\n").split("\n")
- if not stats:
- print('Failed to get stats from HAProxy socket')
- sys.exit(1)
- client_backends = get_client_backends()
- haproxy_backends = get_haproxy_backends(stats)
- for backend in client_backend:
- for server in backend
- if server['address'] in haproxy_backends[backend]['active']:
- del haproxy_backends[backend]['active'][server['address']]
- else:
- if haproxy_backends[backend]['inactive']:
- inactive_server = haproxy_backends[backend]['inactive'].pop(0)
- ip, port = server['address'].split(':')
- send_haproxy_command("set server %s/%s addr %s port %s\n" %
- (server['backend'], server['name'], ip, port))
- send_haproxy_command("set server %s/%s state ready\n" % (BACKEND_NAME, server['name']))
- for backend in haproxy_backend:
- for server in backend:
- send_haproxy_command("set server %s/%s state maint\n" % (BACKEND_NAME, server['name']))
- if __name__ == "__main__":
- update_backends()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement