예제 #1
0
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['worker'].index(a.address), data['worker'].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]
예제 #2
0
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())

    ncores = wt.source.data["ncores"]
    assert all(ncores)
예제 #3
0
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]
예제 #4
0
def test_WorkerTable_different_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()
    data = wt.source.data

    assert "metric_a" in data
    assert "metric_b" 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]
    assert [data["metric_b"][i] for i in my_index] == [None, b.port]
예제 #5
0
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
def test_WorkerTable(c, s, a, b):
    wt = WorkerTable(s)
    wt.update()
    assert all(wt.source.data.values())
    assert all(len(v) == 1 for v in wt.source.data.values())