|
32 | 32 | from argparse import ArgumentParser |
33 | 33 | from sys import exit |
34 | 34 |
|
| 35 | + |
35 | 36 | def main(): |
36 | 37 | """Main entrypoint for script""" |
37 | 38 |
|
38 | 39 | args = get_parser().parse_args() |
39 | 40 |
|
40 | | - master_addr, master_state, cluster_state_master, failed_master = _get_cluster_status( |
41 | | - args.master_port, args.password) |
42 | | - slave_addr, slave_state, cluster_state_slave, failed_slave = _get_cluster_status( |
43 | | - args.slave_port, args.password) |
| 41 | + master_addr, master_state, cluster_state_master, failed_master = \ |
| 42 | + _get_cluster_status(args.master_port, args.password) |
| 43 | + slave_addr, slave_state, cluster_state_slave, failed_slave = \ |
| 44 | + _get_cluster_status(args.slave_port, args.password) |
44 | 45 | if master_state != 'unknown' and slave_state != 'unknown': |
| 46 | + failed_hosts = failed_master + failed_slave |
45 | 47 | if cluster_state_master != 'ok' and cluster_state_slave != 'ok': |
46 | 48 | print('CRITICAL - cluster is broken') |
47 | 49 | code = 2 |
48 | | - elif len(failed_master + failed_slave) > 0: |
| 50 | + elif failed_hosts: |
49 | 51 | print('WARNING - cluster status is degraded') |
50 | | - for host in failed_master + failed_slave: |
| 52 | + code = 1 |
| 53 | + for host in failed_hosts: |
51 | 54 | print('{} is in a failed state'.format(host)) |
52 | | - code = 1 |
53 | 55 | else: |
54 | 56 | print('OK - cluster status is OK') |
55 | 57 | print('{} - {}'.format(master_addr, master_state)) |
@@ -109,12 +111,26 @@ def _get_cluster_status(port, password): |
109 | 111 | The status of the local instances will be checked |
110 | 112 | """ |
111 | 113 |
|
| 114 | + """The output from redis-cli cluser nodes has the following format: |
| 115 | + 6 lines where each line is a space seperated list with the following data: |
| 116 | + 7a8517281ff3039a99fc28a9cd5b7bb5cded8dcf (hash of the node) |
| 117 | + 10.44.1.13:7001@17001 (ip:port@remote port) |
| 118 | + slave,fail (master|slave)(,fail)? |
| 119 | + 9a168ff82b0a87a7b0af78159e2efa6dec483a76 (remote node hash) |
| 120 | + 1600863309527 (performance data) |
| 121 | + 1600863307000 (performance data) |
| 122 | + 2 (num clients) |
| 123 | + connected |
| 124 | +
|
| 125 | + The string ",fail" is optional. It will only exists on failed hosts |
| 126 | + """ |
112 | 127 | try: |
113 | 128 | role = subprocess.check_output( |
114 | 129 | 'redis-cli -p {0} -a {1} cluster nodes'.format( |
115 | 130 | port, password), shell=True).decode().split() |
116 | 131 | state_index = [i for i, s in enumerate(role) if 'myself' in s][0] |
117 | | - failed_hosts = [role[i-1] for i, s in enumerate(role) if 'fail' in s and str(port) in role[i-1]] |
| 132 | + failed_hosts = [role[i-1] for i, s in enumerate(role) |
| 133 | + if 'fail' in s and str(port) in role[i-1]] |
118 | 134 | role_state = role[state_index].replace('myself,', '') |
119 | 135 | role_addr = role[state_index - 1] |
120 | 136 |
|
|
0 commit comments