#!/usr/bin/env python3 """Per-record deployment watch, built on the shared harness. Replaces wave7_probe.py's hand-rolled setup. Everything that used to be re-invented per probe -- roster discovery, the baseline discard rule, the craft link, the stall witness, incremental output -- comes from `probeharness.Probe`. """ import collections, sys sys.path.insert(0, __file__.rsplit('/', 1)[0]) from probeharness import Probe def main(): secs = int(sys.argv[1]) if len(sys.argv) > 1 else 300 every = int(sys.argv[2]) if len(sys.argv) > 2 else 15 base = int(sys.argv[3]) if len(sys.argv) > 3 else 116 p = Probe(baseline=base, tsv='/tmp/deploy.tsv') if not p.ok: print(p.why) return 3 print(p.summary(), flush=True) p.log('t\tdeployed\tcraft\tstalled') prev = p.strengths() print('t= 0s deployed=%d strengths %s' % (len(prev), sorted(collections.Counter(prev.values()).items())), flush=True) ups = downs = 0 while p.tick(every, secs): cur = p.strengths() up = [(o, prev.get(o, 0), cur[o]) for o in cur if cur[o] > prev.get(o, 0)] down = [(o, prev[o], cur.get(o, 0)) for o in prev if cur.get(o, 0) < prev[o]] ups += len(up); downs += len(down) print('t=%4ds deployed=%d up=%d down=%d (cum %d/%d)%s' % (p.elapsed, len(cur), len(up), len(down), ups, downs, p.status()), flush=True) p.emit('%d\t%d\t%d\t%s' % (p.elapsed, len(cur), sum(cur.values()), p.status().strip())) prev = cur print('\n%s' % p.summary()) print('TOTAL up=%d down=%d' % (ups, downs)) return 0 if __name__ == '__main__': sys.exit(main())