You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.8 KiB

# Copyright 2015 Hewlett Packard Enterprise Development Company LP
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import socket
import sys
def get_status(sock_address):
"""Query haproxy stat socket
Only VRRP fail over if the stats socket is not responding.
:param sock_address: unix socket file
:return: 0 if haproxy responded
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
s.send(b'show stat -1 -1 -1\n')
data = b''
while True:
x = s.recv(1024)
if not x:
data += x
# if get nothing, means has no response
if not data:
return 1
return 0
def health_check(sock_addresses):
"""Invoke queries for all defined listeners
:param sock_addresses:
status = 0
for address in sock_addresses:
status += get_status(address)
return status
def main():
# usage python <list_of_stat_sockets>
# Note: for performance, this script loads minimal number of module.
# Loading octavia modules or any other complex construct MUST be avoided.
listeners_sockets = sys.argv[1:]
status = health_check(listeners_sockets)
except Exception: