Ejemplo n.º 1
0
def check(instance):
    check = KubernetesState(CHECK_NAME, {}, {}, [instance])
    with open(os.path.join(HERE, 'fixtures', 'prometheus.txt'), 'rb') as f:
        check.poll = mock.MagicMock(return_value=MockResponse(f.read(), 'text/plain'))

    return check
def _check(instance, mock_file="prometheus.txt"):
    check = KubernetesState(CHECK_NAME, {}, [instance])
    check.poll = mock.MagicMock(return_value=MockResponse(mock_from_file(mock_file), 'text/plain'))
    return check
def test_job_counts(aggregator, instance):
    check = KubernetesState(CHECK_NAME, {}, [instance])
    payload = mock_from_file("prometheus.txt")
    check.poll = mock.MagicMock(return_value=MockResponse(payload, 'text/plain'))

    for _ in range(2):
        check.check(instance)

    # Test cron jobs
    aggregator.assert_metric(
        NAMESPACE + '.job.failed',
        tags=['namespace:default', 'kube_namespace:default', 'kube_job:hello', 'job:hello', 'optional:tag1'],
        value=0,
    )
    aggregator.assert_metric(
        NAMESPACE + '.job.succeeded',
        tags=['namespace:default', 'kube_namespace:default', 'kube_job:hello', 'job:hello', 'optional:tag1'],
        value=3,
    )

    # Test jobs
    aggregator.assert_metric(
        NAMESPACE + '.job.failed',
        tags=['namespace:default', 'kube_namespace:default', 'job_name:test', 'optional:tag1'],
        value=0,
    )
    aggregator.assert_metric(
        NAMESPACE + '.job.succeeded',
        tags=['namespace:default', 'kube_namespace:default', 'job_name:test', 'optional:tag1'],
        value=1,
    )

    # Re-run check to make sure we don't count the same jobs
    check.check(instance)

    # Test cron jobs
    aggregator.assert_metric(
        NAMESPACE + '.job.failed',
        tags=['namespace:default', 'kube_namespace:default', 'kube_job:hello', 'job:hello', 'optional:tag1'],
        value=0,
    )
    aggregator.assert_metric(
        NAMESPACE + '.job.succeeded',
        tags=['namespace:default', 'kube_namespace:default', 'kube_job:hello', 'job:hello', 'optional:tag1'],
        value=3,
    )

    # Test jobs
    aggregator.assert_metric(
        NAMESPACE + '.job.failed',
        tags=['namespace:default', 'kube_namespace:default', 'job_name:test', 'optional:tag1'],
        value=0,
    )
    aggregator.assert_metric(
        NAMESPACE + '.job.succeeded',
        tags=['namespace:default', 'kube_namespace:default', 'job_name:test', 'optional:tag1'],
        value=1,
    )

    # Edit the payload and rerun the check
    payload = payload.replace(
        b'kube_job_status_succeeded{job="hello-1509998340",namespace="default"} 1',
        b'kube_job_status_succeeded{job="hello-1509998500",namespace="default"} 1',
    )
    payload = payload.replace(
        b'kube_job_status_failed{job="hello-1509998340",namespace="default"} 0',
        b'kube_job_status_failed{job="hello-1509998510",namespace="default"} 1',
    )
    payload = payload.replace(
        b'kube_job_status_succeeded{job_name="test",namespace="default"} 1',
        b'kube_job_status_succeeded{job_name="test",namespace="default"} 0',
    )

    check.poll = mock.MagicMock(return_value=MockResponse(payload, 'text/plain'))
    check.check(instance)
    aggregator.assert_metric(
        NAMESPACE + '.job.failed',
        tags=['namespace:default', 'kube_namespace:default', 'job:hello', 'kube_job:hello', 'optional:tag1'],
        value=1,
    )
    aggregator.assert_metric(
        NAMESPACE + '.job.succeeded',
        tags=['namespace:default', 'kube_namespace:default', 'job:hello', 'kube_job:hello', 'optional:tag1'],
        value=4,
    )

    # Edit the payload to mimick a job running and rerun the check
    payload = payload.replace(
        b'kube_job_status_succeeded{job="hello-1509998500",namespace="default"} 1',
        b'kube_job_status_succeeded{job="hello-1509998600",namespace="default"} 0',
    )
    # Edit the payload to mimick a job re-creation
    payload = payload.replace(
        b'kube_job_status_succeeded{job_name="test",namespace="default"} 0',
        b'kube_job_status_succeeded{job_name="test",namespace="default"} 1',
    )

    check.poll = mock.MagicMock(return_value=MockResponse(payload, 'text/plain'))
    check.check(instance)
    # Test if we now have two as the value for the same job
    aggregator.assert_metric(
        NAMESPACE + '.job.succeeded',
        tags=['namespace:default', 'kube_namespace:default', 'job_name:test', 'optional:tag1'],
        value=2,
    )

    # Edit the payload to mimick a job that stopped running and rerun the check
    payload = payload.replace(
        b'kube_job_status_succeeded{job="hello-1509998600",namespace="default"} 0',
        b'kube_job_status_succeeded{job="hello-1509998600",namespace="default"} 1',
    )

    check.poll = mock.MagicMock(return_value=MockResponse(payload, 'text/plain'))
    check.check(instance)
    aggregator.assert_metric(
        NAMESPACE + '.job.succeeded',
        tags=['namespace:default', 'kube_namespace:default', 'job:hello', 'kube_job:hello', 'optional:tag1'],
        value=5,
    )
def test_disabling_hostname_override(instance):
    check = KubernetesState(CHECK_NAME, {}, {}, [instance])
    assert check.label_to_hostname == "node"
    instance["hostname_override"] = False
    check = KubernetesState(CHECK_NAME, {}, {}, [instance])
    assert check.label_to_hostname is None