def test_compound_metrics():
    metrics1 = Metrics()
    metrics2 = Metrics()

    metrics1.register(Label('value', 'first'))
    metrics2.register(Label('value', 'second'))
    assert CompoundMetrics(metrics1, metrics2).sample() == {'value': 'second'}

    metrics1.register(Label('other', 'third'))
    assert CompoundMetrics(metrics1, metrics2).sample() == {
        'value': 'second',
        'other': 'third'
    }
def test_observable():
    class Derp(Observable):
        def __init__(self):
            self.metrics.register(Label('value', 'derp value'))

    metrics = Metrics()
    metrics.register_observable('derpspace', Derp())
    assert metrics.sample() == {'derpspace.value': 'derp value'}
def test_metric_sample():
    metrics = Metrics()
    sampler = MetricSampler(metrics)
    assert sampler.sample() == {}
    sampler.iterate()
    assert sampler.sample() == {}
    metrics.register(Label('herp', 'derp'))
    assert sampler.sample() == {}
    sampler.iterate()
    assert sampler.sample() == {'herp': 'derp'}
def test_metric_read_write():
    metrics = Metrics()

    with temporary_file() as fp:
        os.unlink(fp.name)

        writer = DiskMetricWriter(metrics, fp.name)
        reader = DiskMetricReader(fp.name)

        assert reader.sample() == {}
        reader.iterate()
        assert reader.sample() == {}

        writer.iterate()
        assert reader.sample() == {}
        reader.iterate()
        assert reader.sample() == {}

        metrics.register(Label('herp', 'derp'))
        writer.iterate()
        assert reader.sample() == {}
        reader.iterate()
        assert reader.sample() == {'herp': 'derp'}