~verterok/charms/trusty/squid-reverseproxy/add-continue_retrieve_on_abort

« back to all changes in this revision

Viewing changes to files/check_squidpeers

  • Committer: Stuart Bishop
  • Date: 2017-01-04 05:32:06 UTC
  • mfrom: (56.1.2 squid-reverseproxy)
  • Revision ID: stuart.bishop@canonical.com-20170104053206-7bfc0jif0969hfik
[tcuthburt,r=stub] Assign nagios service group and have the nagios peer check alert on a percentage of peers being down

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/python
2
2
 
3
3
import argparse
4
 
from operator import itemgetter
5
4
import re
6
5
import subprocess
7
6
import sys
 
7
from operator import iadd
8
8
 
9
9
 
10
10
parent_re = re.compile(r'^Parent\s+:\s*(?P<name>\S+)')
42
42
    return peers
43
43
 
44
44
 
45
 
def get_status(peers):
46
 
    ok = all(map(itemgetter('up'), peers))
 
45
def calculate_perc_up(peers):
 
46
    return ((reduce(iadd, [1. for i in peers if i['status'] == STATUS_UP]))
 
47
            / len(peers)) * 100
 
48
 
 
49
 
 
50
def get_status(peers, weight):
 
51
    perc = calculate_perc_up(peers)
47
52
    if not peers:
48
53
        retcode = 1
49
54
        message = 'Squid has no configured peers.'
50
 
    elif ok:
 
55
    elif perc > float(weight):
51
56
        retcode = 0
52
 
        message = 'All peers are UP according to squid.'
 
57
        message = '{:.0f}% of peers are UP according to squid.'.format(perc)
53
58
    else:
54
59
        retcode = 2
55
60
        peer_info = ["{}: {}".format(p['name'], p['status']) for p in peers
63
68
    parser = argparse.ArgumentParser(description='check_squidpeers')
64
69
    parser.add_argument('-p', '--port', default=3128,
65
70
                        help='Port number squid listens on')
 
71
    parser.add_argument('-w', '--weight', default=50,
 
72
                        help='Percentage of down hosts to alert on')
66
73
    args = parser.parse_args()
67
74
    proc = subprocess.Popen(['squidclient', '-p', str(args.port), 'mgr:server_list'],
68
75
            stdout=subprocess.PIPE, stderr=subprocess.PIPE)
71
78
        print("Error running squidclient: %s" % stderr)
72
79
        return 2
73
80
    peers = parse(stdout)
74
 
    retcode, message = get_status(peers)
 
81
    retcode, message = get_status(peers, args.weight)
75
82
    print(message)
76
83
    return retcode
77
84