Search in sources :

Example 1 with MetricIdGenerator

use of com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator in project java-driver by datastax.

the class DropwizardMetricsIT method assertMetricsPresent.

@Override
protected void assertMetricsPresent(CqlSession session) {
    MetricRegistry registry = (MetricRegistry) ((InternalDriverContext) session.getContext()).getMetricRegistry();
    assertThat(registry).isNotNull();
    assertThat(registry.getMetrics()).hasSize(ENABLED_SESSION_METRICS.size() + ENABLED_NODE_METRICS.size() * 3);
    MetricIdGenerator metricIdGenerator = ((InternalDriverContext) session.getContext()).getMetricIdGenerator();
    assertThat(session.getMetrics()).isPresent();
    Metrics metrics = session.getMetrics().get();
    for (DefaultSessionMetric metric : ENABLED_SESSION_METRICS) {
        MetricId id = metricIdGenerator.sessionMetricId(metric);
        Metric m = registry.getMetrics().get(id.getName());
        assertThat(m).isNotNull();
        // assert that the same metric is retrievable through the registry and through the driver API
        assertThat(metrics.getSessionMetric(metric)).isPresent().hasValueSatisfying(v -> assertThat(v).isSameAs(m));
        switch(metric) {
            case CONNECTED_NODES:
                assertThat(m).isInstanceOf(Gauge.class);
                assertThat((Integer) ((Gauge<?>) m).getValue()).isEqualTo(3);
                break;
            case CQL_REQUESTS:
                assertThat(m).isInstanceOf(Timer.class);
                await().untilAsserted(() -> assertThat(((Timer) m).getCount()).isEqualTo(30));
                break;
            case CQL_PREPARED_CACHE_SIZE:
                assertThat(m).isInstanceOf(Gauge.class);
                assertThat((Long) ((Gauge<?>) m).getValue()).isOne();
                break;
            case BYTES_SENT:
            case BYTES_RECEIVED:
                assertThat(m).isInstanceOf(Meter.class);
                assertThat(((Meter) m).getCount()).isGreaterThan(0);
                break;
            case CQL_CLIENT_TIMEOUTS:
            case THROTTLING_ERRORS:
                assertThat(m).isInstanceOf(Counter.class);
                assertThat(((Counter) m).getCount()).isZero();
                break;
            case THROTTLING_DELAY:
                assertThat(m).isInstanceOf(Timer.class);
                assertThat(((Timer) m).getCount()).isZero();
                break;
            case THROTTLING_QUEUE_SIZE:
                assertThat(m).isInstanceOf(Gauge.class);
                assertThat((Integer) ((Gauge<?>) m).getValue()).isZero();
                break;
        }
    }
    for (Node node : session.getMetadata().getNodes().values()) {
        for (DefaultNodeMetric metric : ENABLED_NODE_METRICS) {
            MetricId id = metricIdGenerator.nodeMetricId(node, metric);
            Metric m = registry.getMetrics().get(id.getName());
            assertThat(m).isNotNull();
            // assert that the same metric is retrievable through the registry and through the driver
            // API
            assertThat(metrics.getNodeMetric(node, metric)).isPresent().hasValueSatisfying(v -> assertThat(v).isSameAs(m));
            switch(metric) {
                case OPEN_CONNECTIONS:
                    assertThat(m).isInstanceOf(Gauge.class);
                    // control node has 2 connections
                    assertThat((Integer) ((Gauge<?>) m).getValue()).isBetween(1, 2);
                    break;
                case CQL_MESSAGES:
                    assertThat(m).isInstanceOf(Timer.class);
                    await().untilAsserted(() -> assertThat(((Timer) m).getCount()).isEqualTo(10));
                    break;
                case READ_TIMEOUTS:
                case WRITE_TIMEOUTS:
                case UNAVAILABLES:
                case OTHER_ERRORS:
                case ABORTED_REQUESTS:
                case UNSENT_REQUESTS:
                case RETRIES:
                case IGNORES:
                case RETRIES_ON_READ_TIMEOUT:
                case RETRIES_ON_WRITE_TIMEOUT:
                case RETRIES_ON_UNAVAILABLE:
                case RETRIES_ON_OTHER_ERROR:
                case RETRIES_ON_ABORTED:
                case IGNORES_ON_READ_TIMEOUT:
                case IGNORES_ON_WRITE_TIMEOUT:
                case IGNORES_ON_UNAVAILABLE:
                case IGNORES_ON_OTHER_ERROR:
                case IGNORES_ON_ABORTED:
                case SPECULATIVE_EXECUTIONS:
                case CONNECTION_INIT_ERRORS:
                case AUTHENTICATION_ERRORS:
                    assertThat(m).isInstanceOf(Counter.class);
                    assertThat(((Counter) m).getCount()).isZero();
                    break;
                case BYTES_SENT:
                case BYTES_RECEIVED:
                    assertThat(m).isInstanceOf(Meter.class);
                    assertThat(((Meter) m).getCount()).isGreaterThan(0L);
                    break;
                case AVAILABLE_STREAMS:
                case IN_FLIGHT:
                case ORPHANED_STREAMS:
                    assertThat(m).isInstanceOf(Gauge.class);
                    break;
            }
        }
    }
}
Also used : DefaultSessionMetric(com.datastax.oss.driver.api.core.metrics.DefaultSessionMetric) Meter(com.codahale.metrics.Meter) MetricRegistry(com.codahale.metrics.MetricRegistry) Node(com.datastax.oss.driver.api.core.metadata.Node) DefaultNodeMetric(com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric) MetricIdGenerator(com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator) Metrics(com.datastax.oss.driver.api.core.metrics.Metrics) MetricId(com.datastax.oss.driver.internal.core.metrics.MetricId) Counter(com.codahale.metrics.Counter) Timer(com.codahale.metrics.Timer) DefaultNodeMetric(com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric) Metric(com.codahale.metrics.Metric) DefaultSessionMetric(com.datastax.oss.driver.api.core.metrics.DefaultSessionMetric) InternalDriverContext(com.datastax.oss.driver.internal.core.context.InternalDriverContext)

Example 2 with MetricIdGenerator

use of com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator in project java-driver by datastax.

the class MicrometerNodeMetricUpdaterTest method should_not_log_warning_when_provided_eviction_time_setting_is_acceptable.

@Test
@UseDataProvider(value = "acceptableEvictionTimes")
public void should_not_log_warning_when_provided_eviction_time_setting_is_acceptable(Duration expireAfter) {
    // given
    LoggerTest.LoggerSetup logger = LoggerTest.setupTestLogger(AbstractMetricUpdater.class, Level.WARN);
    Node node = mock(Node.class);
    InternalDriverContext context = mock(InternalDriverContext.class);
    DriverExecutionProfile profile = mock(DriverExecutionProfile.class);
    DriverConfig config = mock(DriverConfig.class);
    MetricIdGenerator generator = mock(MetricIdGenerator.class);
    Set<NodeMetric> enabledMetrics = Collections.singleton(DefaultNodeMetric.CQL_MESSAGES);
    // when
    when(context.getSessionName()).thenReturn("prefix");
    when(context.getConfig()).thenReturn(config);
    when(config.getDefaultProfile()).thenReturn(profile);
    when(context.getMetricIdGenerator()).thenReturn(generator);
    when(profile.getDuration(DefaultDriverOption.METRICS_NODE_EXPIRE_AFTER)).thenReturn(expireAfter);
    when(generator.nodeMetricId(node, DefaultNodeMetric.CQL_MESSAGES)).thenReturn(METRIC_ID);
    when(profile.getDuration(DefaultDriverOption.METRICS_NODE_CQL_MESSAGES_HIGHEST)).thenReturn(Duration.ofSeconds(10));
    when(profile.getDuration(DefaultDriverOption.METRICS_NODE_CQL_MESSAGES_LOWEST)).thenReturn(Duration.ofMillis(1));
    when(profile.getInt(DefaultDriverOption.METRICS_NODE_CQL_MESSAGES_DIGITS)).thenReturn(5);
    MicrometerNodeMetricUpdater updater = new MicrometerNodeMetricUpdater(node, context, enabledMetrics, new SimpleMeterRegistry());
    // then
    assertThat(updater.getExpireAfter()).isEqualTo(expireAfter);
    verify(logger.appender, timeout(500).times(0)).doAppend(logger.loggingEventCaptor.capture());
}
Also used : MetricIdGenerator(com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator) DefaultNodeMetric(com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric) DseNodeMetric(com.datastax.dse.driver.api.core.metrics.DseNodeMetric) NodeMetric(com.datastax.oss.driver.api.core.metrics.NodeMetric) DriverExecutionProfile(com.datastax.oss.driver.api.core.config.DriverExecutionProfile) Node(com.datastax.oss.driver.api.core.metadata.Node) SimpleMeterRegistry(io.micrometer.core.instrument.simple.SimpleMeterRegistry) DriverConfig(com.datastax.oss.driver.api.core.config.DriverConfig) InternalDriverContext(com.datastax.oss.driver.internal.core.context.InternalDriverContext) LoggerTest(com.datastax.oss.driver.internal.core.util.LoggerTest) LoggerTest(com.datastax.oss.driver.internal.core.util.LoggerTest) Test(org.junit.Test) UseDataProvider(com.tngtech.java.junit.dataprovider.UseDataProvider)

Example 3 with MetricIdGenerator

use of com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator in project java-driver by datastax.

the class MicrometerMetricsIT method assertMetricsPresent.

@Override
protected void assertMetricsPresent(CqlSession session) {
    MeterRegistry registry = (MeterRegistry) ((InternalDriverContext) session.getContext()).getMetricRegistry();
    assertThat(registry).isNotNull();
    assertThat(registry.getMeters()).hasSize(ENABLED_SESSION_METRICS.size() + ENABLED_NODE_METRICS.size() * 3);
    MetricIdGenerator metricIdGenerator = ((InternalDriverContext) session.getContext()).getMetricIdGenerator();
    for (DefaultSessionMetric metric : ENABLED_SESSION_METRICS) {
        MetricId id = metricIdGenerator.sessionMetricId(metric);
        Iterable<Tag> tags = MicrometerTags.toMicrometerTags(id.getTags());
        Meter m = registry.find(id.getName()).tags(tags).meter();
        assertThat(m).isNotNull();
        switch(metric) {
            case CONNECTED_NODES:
                assertThat(m).isInstanceOf(Gauge.class);
                assertThat(((Gauge) m).value()).isEqualTo(3);
                break;
            case CQL_REQUESTS:
                assertThat(m).isInstanceOf(Timer.class);
                await().untilAsserted(() -> assertThat(((Timer) m).count()).isEqualTo(30));
                break;
            case CQL_PREPARED_CACHE_SIZE:
                assertThat(m).isInstanceOf(Gauge.class);
                assertThat(((Gauge) m).value()).isOne();
                break;
            case BYTES_SENT:
            case BYTES_RECEIVED:
                assertThat(m).isInstanceOf(Counter.class);
                assertThat(((Counter) m).count()).isGreaterThan(0);
                break;
            case CQL_CLIENT_TIMEOUTS:
            case THROTTLING_ERRORS:
                assertThat(m).isInstanceOf(Counter.class);
                assertThat(((Counter) m).count()).isZero();
                break;
            case THROTTLING_DELAY:
                assertThat(m).isInstanceOf(Timer.class);
                assertThat(((Timer) m).count()).isZero();
                break;
            case THROTTLING_QUEUE_SIZE:
                assertThat(m).isInstanceOf(Gauge.class);
                assertThat(((Gauge) m).value()).isZero();
                break;
        }
    }
    for (Node node : session.getMetadata().getNodes().values()) {
        for (DefaultNodeMetric metric : ENABLED_NODE_METRICS) {
            MetricId id = metricIdGenerator.nodeMetricId(node, metric);
            Iterable<Tag> tags = MicrometerTags.toMicrometerTags(id.getTags());
            Meter m = registry.find(id.getName()).tags(tags).meter();
            assertThat(m).isNotNull();
            switch(metric) {
                case OPEN_CONNECTIONS:
                    assertThat(m).isInstanceOf(Gauge.class);
                    // control node has 2 connections
                    assertThat(((Gauge) m).value()).isBetween(1.0, 2.0);
                    break;
                case CQL_MESSAGES:
                    assertThat(m).isInstanceOf(Timer.class);
                    await().untilAsserted(() -> assertThat(((Timer) m).count()).isEqualTo(10));
                    break;
                case READ_TIMEOUTS:
                case WRITE_TIMEOUTS:
                case UNAVAILABLES:
                case OTHER_ERRORS:
                case ABORTED_REQUESTS:
                case UNSENT_REQUESTS:
                case RETRIES:
                case IGNORES:
                case RETRIES_ON_READ_TIMEOUT:
                case RETRIES_ON_WRITE_TIMEOUT:
                case RETRIES_ON_UNAVAILABLE:
                case RETRIES_ON_OTHER_ERROR:
                case RETRIES_ON_ABORTED:
                case IGNORES_ON_READ_TIMEOUT:
                case IGNORES_ON_WRITE_TIMEOUT:
                case IGNORES_ON_UNAVAILABLE:
                case IGNORES_ON_OTHER_ERROR:
                case IGNORES_ON_ABORTED:
                case SPECULATIVE_EXECUTIONS:
                case CONNECTION_INIT_ERRORS:
                case AUTHENTICATION_ERRORS:
                    assertThat(m).isInstanceOf(Counter.class);
                    assertThat(((Counter) m).count()).isZero();
                    break;
                case BYTES_SENT:
                case BYTES_RECEIVED:
                    assertThat(m).isInstanceOf(Counter.class);
                    assertThat(((Counter) m).count()).isGreaterThan(0.0);
                    break;
                case AVAILABLE_STREAMS:
                case IN_FLIGHT:
                case ORPHANED_STREAMS:
                    assertThat(m).isInstanceOf(Gauge.class);
                    break;
            }
        }
    }
}
Also used : DefaultSessionMetric(com.datastax.oss.driver.api.core.metrics.DefaultSessionMetric) Meter(io.micrometer.core.instrument.Meter) Node(com.datastax.oss.driver.api.core.metadata.Node) DefaultNodeMetric(com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric) SimpleMeterRegistry(io.micrometer.core.instrument.simple.SimpleMeterRegistry) MeterRegistry(io.micrometer.core.instrument.MeterRegistry) Gauge(io.micrometer.core.instrument.Gauge) MetricIdGenerator(com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator) MetricId(com.datastax.oss.driver.internal.core.metrics.MetricId) Counter(io.micrometer.core.instrument.Counter) Timer(io.micrometer.core.instrument.Timer) Tag(io.micrometer.core.instrument.Tag) InternalDriverContext(com.datastax.oss.driver.internal.core.context.InternalDriverContext)

Example 4 with MetricIdGenerator

use of com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator in project java-driver by datastax.

the class MicrometerMetricsIT method assertNodeMetricsEvicted.

@Override
protected void assertNodeMetricsEvicted(CqlSession session, Node node) {
    InternalDriverContext context = (InternalDriverContext) session.getContext();
    MetricIdGenerator metricIdGenerator = context.getMetricIdGenerator();
    MeterRegistry registry = (MeterRegistry) context.getMetricRegistry();
    assertThat(registry).isNotNull();
    for (DefaultNodeMetric metric : ENABLED_NODE_METRICS) {
        MetricId id = metricIdGenerator.nodeMetricId(node, metric);
        Iterable<Tag> tags = MicrometerTags.toMicrometerTags(id.getTags());
        Meter m = registry.find(id.getName()).tags(tags).meter();
        assertThat(m).isNull();
    }
}
Also used : MetricIdGenerator(com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator) MetricId(com.datastax.oss.driver.internal.core.metrics.MetricId) Meter(io.micrometer.core.instrument.Meter) DefaultNodeMetric(com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric) Tag(io.micrometer.core.instrument.Tag) InternalDriverContext(com.datastax.oss.driver.internal.core.context.InternalDriverContext) SimpleMeterRegistry(io.micrometer.core.instrument.simple.SimpleMeterRegistry) MeterRegistry(io.micrometer.core.instrument.MeterRegistry)

Example 5 with MetricIdGenerator

use of com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator in project java-driver by datastax.

the class MicrometerMetricsIT method assertNodeMetricsNotEvicted.

@Override
protected void assertNodeMetricsNotEvicted(CqlSession session, Node node) {
    InternalDriverContext context = (InternalDriverContext) session.getContext();
    MetricIdGenerator metricIdGenerator = context.getMetricIdGenerator();
    MeterRegistry registry = (MeterRegistry) context.getMetricRegistry();
    assertThat(registry).isNotNull();
    for (DefaultNodeMetric metric : ENABLED_NODE_METRICS) {
        MetricId id = metricIdGenerator.nodeMetricId(node, metric);
        Iterable<Tag> tags = MicrometerTags.toMicrometerTags(id.getTags());
        Meter m = registry.find(id.getName()).tags(tags).meter();
        assertThat(m).isNotNull();
    }
}
Also used : MetricIdGenerator(com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator) MetricId(com.datastax.oss.driver.internal.core.metrics.MetricId) Meter(io.micrometer.core.instrument.Meter) DefaultNodeMetric(com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric) Tag(io.micrometer.core.instrument.Tag) InternalDriverContext(com.datastax.oss.driver.internal.core.context.InternalDriverContext) SimpleMeterRegistry(io.micrometer.core.instrument.simple.SimpleMeterRegistry) MeterRegistry(io.micrometer.core.instrument.MeterRegistry)

Aggregations

InternalDriverContext (com.datastax.oss.driver.internal.core.context.InternalDriverContext)9 MetricIdGenerator (com.datastax.oss.driver.internal.core.metrics.MetricIdGenerator)9 DefaultNodeMetric (com.datastax.oss.driver.api.core.metrics.DefaultNodeMetric)8 SimpleMeterRegistry (io.micrometer.core.instrument.simple.SimpleMeterRegistry)7 Node (com.datastax.oss.driver.api.core.metadata.Node)6 MetricId (com.datastax.oss.driver.internal.core.metrics.MetricId)5 DriverConfig (com.datastax.oss.driver.api.core.config.DriverConfig)4 DriverExecutionProfile (com.datastax.oss.driver.api.core.config.DriverExecutionProfile)4 DefaultSessionMetric (com.datastax.oss.driver.api.core.metrics.DefaultSessionMetric)4 Test (org.junit.Test)4 DseNodeMetric (com.datastax.dse.driver.api.core.metrics.DseNodeMetric)3 NodeMetric (com.datastax.oss.driver.api.core.metrics.NodeMetric)3 LoggerTest (com.datastax.oss.driver.internal.core.util.LoggerTest)3 UseDataProvider (com.tngtech.java.junit.dataprovider.UseDataProvider)3 Meter (io.micrometer.core.instrument.Meter)3 MeterRegistry (io.micrometer.core.instrument.MeterRegistry)3 Tag (io.micrometer.core.instrument.Tag)3 Timer (io.micrometer.core.instrument.Timer)3 HistogramSnapshot (io.micrometer.core.instrument.distribution.HistogramSnapshot)2 Counter (com.codahale.metrics.Counter)1