1*2187Szelenkov@nginx.comfrom unit.control import TestControl 2*2187Szelenkov@nginx.com 3*2187Szelenkov@nginx.com 4*2187Szelenkov@nginx.comclass Status: 5*2187Szelenkov@nginx.com _status = None 6*2187Szelenkov@nginx.com control = TestControl() 7*2187Szelenkov@nginx.com 8*2187Szelenkov@nginx.com def _check_zeros(): 9*2187Szelenkov@nginx.com assert Status.control.conf_get('/status') == { 10*2187Szelenkov@nginx.com 'connections': { 11*2187Szelenkov@nginx.com 'accepted': 0, 12*2187Szelenkov@nginx.com 'active': 0, 13*2187Szelenkov@nginx.com 'idle': 0, 14*2187Szelenkov@nginx.com 'closed': 0, 15*2187Szelenkov@nginx.com }, 16*2187Szelenkov@nginx.com 'requests': {'total': 0}, 17*2187Szelenkov@nginx.com 'applications': {}, 18*2187Szelenkov@nginx.com } 19*2187Szelenkov@nginx.com 20*2187Szelenkov@nginx.com def init(status=None): 21*2187Szelenkov@nginx.com Status._status = ( 22*2187Szelenkov@nginx.com status if status is not None else Status.control.conf_get('/status') 23*2187Szelenkov@nginx.com ) 24*2187Szelenkov@nginx.com 25*2187Szelenkov@nginx.com def diff(): 26*2187Szelenkov@nginx.com def find_diffs(d1, d2): 27*2187Szelenkov@nginx.com if isinstance(d1, dict) and isinstance(d2, dict): 28*2187Szelenkov@nginx.com return { 29*2187Szelenkov@nginx.com k: find_diffs(d1.get(k, 0), d2.get(k, 0)) 30*2187Szelenkov@nginx.com for k in d1 31*2187Szelenkov@nginx.com if k in d2 32*2187Szelenkov@nginx.com } 33*2187Szelenkov@nginx.com else: 34*2187Szelenkov@nginx.com return d1 - d2 35*2187Szelenkov@nginx.com 36*2187Szelenkov@nginx.com return find_diffs(Status.control.conf_get('/status'), Status._status) 37*2187Szelenkov@nginx.com 38*2187Szelenkov@nginx.com def get(path='/'): 39*2187Szelenkov@nginx.com path = path.split('/')[1:] 40*2187Szelenkov@nginx.com diff = Status.diff() 41*2187Szelenkov@nginx.com 42*2187Szelenkov@nginx.com for p in path: 43*2187Szelenkov@nginx.com diff = diff[p] 44*2187Szelenkov@nginx.com 45*2187Szelenkov@nginx.com return diff 46