Ejemplo n.º 1
0
def test_check(aggregator, dd_environment, get_instance):
    """
    Collect ZooKeeper metrics.
    """
    zk_check = ZookeeperCheck(conftest.CHECK_NAME, {}, {})
    zk_check.check(get_instance)
    zk_check.check(get_instance)

    # Test metrics
    for mname in conftest.STAT_METRICS:
        aggregator.assert_metric(mname, tags=["mode:standalone", "mytag"])

    zk_version = os.environ.get("ZK_VERSION") or "3.4.10"
    if zk_version and LooseVersion(zk_version) > LooseVersion("3.4.0"):
        for mname in conftest.MNTR_METRICS:
            aggregator.assert_metric(mname, tags=["mode:standalone", "mytag"])

    # Test service checks
    aggregator.assert_service_check("zookeeper.ruok", status=zk_check.OK)
    aggregator.assert_service_check("zookeeper.mode", status=zk_check.OK)

    expected_mode = get_instance['expected_mode']
    mname = "zookeeper.instances.{}".format(expected_mode)
    aggregator.assert_metric(mname, value=1)
    aggregator.assert_all_metrics_covered()
Ejemplo n.º 2
0
def test_wrong_expected_mode(aggregator, dd_environment, get_invalid_mode_instance):
    """
    Raise a 'critical' service check when ZooKeeper is not in the expected mode.
    """
    zk_check = ZookeeperCheck(conftest.CHECK_NAME, {}, {})
    zk_check.check(get_invalid_mode_instance)

    # Test service checks
    aggregator.assert_service_check("zookeeper.mode", status=zk_check.CRITICAL)
Ejemplo n.º 3
0
def test_error_state(aggregator, dd_environment, get_conn_failure_config):
    """
    Raise a 'critical' service check when ZooKeeper is in an error state.
    Report status as down.
    """
    zk_check = ZookeeperCheck(conftest.CHECK_NAME, {}, {})
    with pytest.raises(Exception):
        zk_check.check(get_conn_failure_config)

    aggregator.assert_service_check("zookeeper.ruok", status=zk_check.CRITICAL)

    aggregator.assert_metric("zookeeper.instances", tags=["mode:down"], count=1)

    expected_mode = get_conn_failure_config['expected_mode']
    mname = "zookeeper.instances.{}".format(expected_mode)
    aggregator.assert_metric(mname, value=1, count=1)
Ejemplo n.º 4
0
def test_parse_replica_mntr(aggregator, mock_mntr_output, get_test_instance):
    unparsed_line = "zk_peer_state	following - broadcast\n"
    expected_message = "Unexpected 'mntr' output `%s`: %s"

    # Value Error is more verbose in PY 3
    error_message = 'too many values to unpack'
    if PY3:
        error_message = "too many values to unpack (expected 2)"

    check = ZookeeperCheck(conftest.CHECK_NAME, {}, [get_test_instance])
    check.log = mock.MagicMock()
    metrics, mode = check.parse_mntr(mock_mntr_output)

    assert mode == 'follower'
    assert len(metrics) == 499
    check.log.debug.assert_called_once_with(expected_message, unparsed_line,
                                            error_message)
Ejemplo n.º 5
0
def test_metadata(datadog_agent):
    check = ZookeeperCheck(conftest.CHECK_NAME, {}, [conftest.VALID_CONFIG])

    check.check_id = 'test:123'

    check.check(conftest.VALID_CONFIG)

    raw_version = common.ZK_VERSION
    major, minor = raw_version.split('.')[:2]
    version_metadata = {
        'version.scheme': 'semver',
        'version.major': major,
        'version.minor': minor,
        'version.patch': mock.ANY,
        'version.raw': mock.ANY,
    }

    datadog_agent.assert_metadata('test:123', version_metadata)
Ejemplo n.º 6
0
def extract_nan_metrics(text):
    log_pattern = r'Metric value \"(\S+)\" is not supported for metric (\S+)'
    metrics = []
    for line in text.splitlines():
        m = re.search(log_pattern, line)
        if m:
            key = m.groups()[1]
            metrics.append(ZookeeperCheck.normalize_metric_label(key))
    return metrics
Ejemplo n.º 7
0
    def condition_non_tls():
        sys.stderr.write("Waiting for ZK to boot...\n")
        booted = False
        dummy_instance = {'host': HOST, 'port': PORT, 'timeout': 500}
        for _ in range(10):
            try:
                out = ZookeeperCheck('zk', {}, [dummy_instance])._send_command('ruok')
                out.seek(0)
                if out.readline() != 'imok':
                    raise ZKConnectionFailure()
                booted = True
                break
            except ZKConnectionFailure:
                time.sleep(1)

        if not booted:
            raise RetryError("Zookeeper failed to boot!")
        sys.stderr.write("ZK boot complete.\n")
Ejemplo n.º 8
0
def test_check(aggregator, dd_environment, get_instance, caplog):
    """
    Collect ZooKeeper metrics.
    """
    caplog.set_level(logging.DEBUG)
    zk_check = ZookeeperCheck(conftest.CHECK_NAME, {}, {})
    zk_check.check(get_instance)
    zk_check.check(get_instance)

    skipped_metrics = extract_nan_metrics(caplog.text)

    # Test metrics
    common.assert_stat_metrics(aggregator)
    common.assert_mntr_metrics_by_version(aggregator, skipped_metrics)

    common.assert_service_checks_ok(aggregator)

    expected_mode = get_instance['expected_mode']
    mname = "zookeeper.instances.{}".format(expected_mode)
    aggregator.assert_metric(mname, value=1)
    aggregator.assert_all_metrics_covered()
Ejemplo n.º 9
0
    def condition():
        sys.stderr.write("Waiting for ZK to boot...\n")
        booted = False
        for _ in xrange(3):
            try:
                out = ZookeeperCheck._send_command('ruok', HOST, PORT, 500)
                out.seek(0)
                if out.readline() != 'imok':
                    raise ZKConnectionFailure()
                booted = True
            except ZKConnectionFailure:
                time.sleep(1)

        if not booted:
            raise RetryError("Zookeeper failed to boot!")
        sys.stderr.write("ZK boot complete.\n")