def test_WorkerTable_custom_metrics(c, s, a, b): def metric_port(worker): return worker.port def metric_address(worker): return worker.address metrics = {"metric_port": metric_port, "metric_address": metric_address} for w in [a, b]: for name, func in metrics.items(): w.metrics[name] = func yield [a.heartbeat(), b.heartbeat()] for w in [a, b]: assert s.workers[w.address].metrics["metric_port"] == w.port assert s.workers[w.address].metrics["metric_address"] == w.address wt = WorkerTable(s) wt.update() data = wt.source.data for name in metrics: assert name in data assert all(data.values()) assert all(len(v) == 2 for v in data.values()) my_index = data["address"].index(a.address), data["address"].index( b.address) assert [data["metric_port"][i] for i in my_index] == [a.port, b.port] assert [data["metric_address"][i] for i in my_index] == [a.address, b.address]
def test_WorkerTable(c, s, a, b): wt = WorkerTable(s) wt.update() assert all(wt.source.data.values()) assert all(len(v) == 2 for v in wt.source.data.values()) nthreads = wt.source.data["nthreads"] assert all(nthreads)
def test_WorkerTable_metrics_with_different_metric_2(c, s, a, b): def metric_port(worker): return worker.port a.metrics["metric_a"] = metric_port yield [a.heartbeat(), b.heartbeat()] wt = WorkerTable(s) wt.update() data = wt.source.data assert "metric_a" in data assert all(data.values()) assert all(len(v) == 2 for v in data.values()) my_index = data["worker"].index(a.address), data["worker"].index(b.address) assert [data["metric_a"][i] for i in my_index] == [a.port, None]
def test_WorkerTable_add_and_remove_metrics(c, s, a, b): def metric_port(worker): return worker.port a.metrics["metric_a"] = metric_port b.metrics["metric_b"] = metric_port yield [a.heartbeat(), b.heartbeat()] assert s.workers[a.address].metrics["metric_a"] == a.port assert s.workers[b.address].metrics["metric_b"] == b.port wt = WorkerTable(s) wt.update() assert "metric_a" in wt.source.data assert "metric_b" in wt.source.data # Remove 'metric_b' from worker b del b.metrics["metric_b"] yield [a.heartbeat(), b.heartbeat()] wt = WorkerTable(s) wt.update() assert "metric_a" in wt.source.data del a.metrics["metric_a"] yield [a.heartbeat(), b.heartbeat()] wt = WorkerTable(s) wt.update() assert "metric_a" not in wt.source.data