Search in sources :

Example 11 with LongMetric

use of org.apache.ignite.spi.metric.LongMetric in project ignite by apache.

the class UserQueriesTestBase method longMetricValue.

/**
 * Finds LongMetric from sql user queries registry by specified metric name and returns it's value.
 *
 * @param gridIdx index of a grid which metric value to find.
 * @param metricName short name of the metric from the "sql memory" metric registry.
 */
protected long longMetricValue(int gridIdx, String metricName) {
    MetricRegistry sqlMemReg = grid(gridIdx).context().metric().registry(SQL_USER_QUERIES_REG_NAME);
    Metric metric = sqlMemReg.findMetric(metricName);
    Assert.assertNotNull("Didn't find metric " + metricName, metric);
    Assert.assertTrue("Expected long metric, but got " + metric.getClass(), metric instanceof LongMetric);
    return ((LongMetric) metric).value();
}
Also used : MetricRegistry(org.apache.ignite.internal.processors.metric.MetricRegistry) Metric(org.apache.ignite.spi.metric.Metric) LongMetric(org.apache.ignite.spi.metric.LongMetric) LongMetric(org.apache.ignite.spi.metric.LongMetric)

Example 12 with LongMetric

use of org.apache.ignite.spi.metric.LongMetric in project ignite by apache.

the class GridJobMetricsSelfTest method testGridJobWaitingRejectedMetrics.

/**
 * Test correct calculation of rejected and waiting metrics of the {@link GridJobProcessor}.
 */
@Test
public void testGridJobWaitingRejectedMetrics() throws Exception {
    latch = new CountDownLatch(1);
    GridTestCollision collisioinSpi = new GridTestCollision();
    IgniteConfiguration cfg = getConfiguration().setCollisionSpi(collisioinSpi);
    try (IgniteEx g = startGrid(cfg)) {
        MetricRegistry mreg = g.context().metric().registry(JOBS_METRICS);
        LongMetric started = mreg.findMetric(STARTED);
        LongMetric active = mreg.findMetric(ACTIVE);
        LongMetric waiting = mreg.findMetric(WAITING);
        LongMetric canceled = mreg.findMetric(CANCELED);
        LongMetric rejected = mreg.findMetric(REJECTED);
        LongMetric finished = mreg.findMetric(FINISHED);
        LongMetric totalExecutionTime = mreg.findMetric(EXECUTION_TIME);
        LongMetric totalWaitingTime = mreg.findMetric(WAITING_TIME);
        assertNotNull(started);
        assertNotNull(active);
        assertNotNull(waiting);
        assertNotNull(canceled);
        assertNotNull(rejected);
        assertNotNull(finished);
        assertNotNull(totalExecutionTime);
        assertNotNull(totalWaitingTime);
        assertEquals(0, started.value());
        assertEquals(0, active.value());
        assertEquals(0, waiting.value());
        assertEquals(0, canceled.value());
        assertEquals(0, rejected.value());
        assertEquals(0, finished.value());
        assertEquals(0, totalExecutionTime.value());
        assertEquals(0, totalWaitingTime.value());
        SimplestTask task1 = new SimplestTask();
        SimplestTask task2 = new SimplestTask();
        SimplestTask task3 = new SimplestTask();
        task1.block = true;
        task2.block = true;
        task3.block = true;
        // Task will become "waiting", because of CollisionSpi implementation.
        ComputeTaskFuture<?> fut1 = g.compute().executeAsync(task1, 1);
        ComputeTaskFuture<?> fut2 = g.compute().executeAsync(task2, 1);
        ComputeTaskFuture<?> fut3 = g.compute().executeAsync(task3, 1);
        assertEquals(0, started.value());
        assertEquals(0, active.value());
        assertEquals(3, waiting.value());
        assertEquals(0, canceled.value());
        assertEquals(0, rejected.value());
        assertEquals(0, finished.value());
        // Activating 2 of 3 jobs. Rejecting 1 of them.
        Iterator<CollisionJobContext> iter = collisioinSpi.jobs.values().iterator();
        iter.next().cancel();
        assertEquals(1, rejected.value());
        // Sleeping to make sure totalWaitingTime will become more the zero.
        Thread.sleep(100);
        iter.next().activate();
        iter.next().activate();
        boolean res = waitForCondition(() -> active.value() > 0, TIMEOUT);
        assertTrue(res);
        assertTrue("Waiting time should be greater then zero.", totalWaitingTime.value() > 0);
        // Sleeping to make sure totalExecutionTime will become more the zero.
        Thread.sleep(100);
        latch.countDown();
        res = waitForCondition(() -> fut1.isDone() && fut2.isDone() && fut3.isDone(), TIMEOUT);
        assertTrue(res);
        res = waitForCondition(() -> finished.value() == 3, TIMEOUT);
        assertTrue(res);
        assertTrue("Execution time should be greater then zero.", totalExecutionTime.value() > 0);
    }
}
Also used : IgniteConfiguration(org.apache.ignite.configuration.IgniteConfiguration) IgniteEx(org.apache.ignite.internal.IgniteEx) MetricRegistry(org.apache.ignite.internal.processors.metric.MetricRegistry) LongMetric(org.apache.ignite.spi.metric.LongMetric) CollisionJobContext(org.apache.ignite.spi.collision.CollisionJobContext) CountDownLatch(java.util.concurrent.CountDownLatch) GridCommonAbstractTest(org.apache.ignite.testframework.junits.common.GridCommonAbstractTest) Test(org.junit.Test)

Example 13 with LongMetric

use of org.apache.ignite.spi.metric.LongMetric in project ignite by apache.

the class CacheGroupMetricsWithIndexTest method testIndexRebuildCountPartitionsLeft.

/**
 * Test number of partitions need to finished indexes rebuilding.
 */
@Test
public void testIndexRebuildCountPartitionsLeft() throws Exception {
    pds = true;
    Ignite ignite = startGrid(0);
    ignite.cluster().active(true);
    IgniteCache<Object, Object> cache1 = ignite.cache(CACHE_NAME);
    for (int i = 0; i < 100_000; i++) {
        Long id = (long) i;
        BinaryObjectBuilder o = ignite.binary().builder(OBJECT_NAME).setField(KEY_NAME, id).setField(COLUMN1_NAME, i / 2).setField(COLUMN2_NAME, "str" + Integer.toHexString(i));
        cache1.put(id, o.build());
    }
    ignite.cluster().active(false);
    File dir = U.resolveWorkDirectory(U.defaultWorkDirectory(), DFLT_STORE_DIR, false);
    IOFileFilter filter = FileFilterUtils.nameFileFilter("index.bin");
    Collection<File> idxBinFiles = FileUtils.listFiles(dir, filter, TrueFileFilter.TRUE);
    for (File indexBin : idxBinFiles) U.delete(indexBin);
    ignite.cluster().active(true);
    MetricRegistry metrics = cacheGroupMetrics(0, GROUP_NAME).get2();
    LongMetric idxBuildCntPartitionsLeft = metrics.findMetric("IndexBuildCountPartitionsLeft");
    assertTrue("Timeout wait start rebuild index", waitForCondition(() -> idxBuildCntPartitionsLeft.value() > 0, 30_000));
    assertTrue("Timeout wait finished rebuild index", GridTestUtils.waitForCondition(() -> idxBuildCntPartitionsLeft.value() == 0, 30_000));
}
Also used : MetricRegistry(org.apache.ignite.internal.processors.metric.MetricRegistry) IOFileFilter(org.apache.commons.io.filefilter.IOFileFilter) Ignite(org.apache.ignite.Ignite) LongMetric(org.apache.ignite.spi.metric.LongMetric) BinaryObjectBuilder(org.apache.ignite.binary.BinaryObjectBuilder) File(java.io.File) Test(org.junit.Test)

Example 14 with LongMetric

use of org.apache.ignite.spi.metric.LongMetric in project ignite by apache.

the class OpenCensusMetricExporterSpi method export.

/**
 * {@inheritDoc}
 */
@Override
public void export() {
    StatsRecorder recorder = Stats.getStatsRecorder();
    try (Scope globalScope = tagScope()) {
        MeasureMap mmap = recorder.newMeasureMap();
        mreg.forEach(mreg -> {
            if (filter != null && !filter.test(mreg))
                return;
            mreg.forEach(metric -> {
                if (metric instanceof LongMetric || metric instanceof IntMetric || metric instanceof BooleanMetric || (metric instanceof ObjectMetric && ((ObjectMetric) metric).type() == Date.class) || (metric instanceof ObjectMetric && ((ObjectMetric) metric).type() == OffsetDateTime.class)) {
                    long val;
                    if (metric instanceof LongMetric)
                        val = ((LongMetric) metric).value();
                    else if (metric instanceof IntMetric)
                        val = ((IntMetric) metric).value();
                    else if (metric instanceof BooleanMetric)
                        val = ((BooleanMetric) metric).value() ? 1 : 0;
                    else if (metric instanceof ObjectMetric && ((ObjectMetric) metric).type() == Date.class)
                        val = ((ObjectMetric<Date>) metric).value().getTime();
                    else
                        val = ((ObjectMetric<OffsetDateTime>) metric).value().toInstant().toEpochMilli();
                    if (val < 0) {
                        if (log.isDebugEnabled())
                            log.debug("OpenCensus doesn't support negative values. Skip record of " + metric.name());
                        return;
                    }
                    MeasureLong msr = (MeasureLong) measures.computeIfAbsent(metric.name(), k -> createMeasure(metric, CREATE_LONG));
                    mmap.put(msr, val);
                } else if (metric instanceof DoubleMetric) {
                    double val = ((DoubleMetric) metric).value();
                    if (val < 0) {
                        if (log.isDebugEnabled())
                            log.debug("OpenCensus doesn't support negative values. Skip record of " + metric.name());
                        return;
                    }
                    MeasureDouble msr = (MeasureDouble) measures.computeIfAbsent(metric.name(), k -> createMeasure(metric, CREATE_DOUBLE));
                    mmap.put(msr, val);
                } else if (metric instanceof HistogramMetric) {
                    String[] names = histogramBucketNames((HistogramMetric) metric);
                    long[] vals = ((HistogramMetric) metric).value();
                    assert names.length == vals.length;
                    for (int i = 0; i < vals.length; i++) {
                        String name = names[i];
                        MeasureLong msr = (MeasureLong) measures.computeIfAbsent(name, k -> createMeasureLong(name, metric.description()));
                        mmap.put(msr, vals[i]);
                    }
                } else if (log.isDebugEnabled()) {
                    log.debug(metric.name() + "[" + metric.getClass() + "] not supported by Opencensus exporter");
                }
            });
        });
        mmap.record();
    }
}
Also used : StatsRecorder(io.opencensus.stats.StatsRecorder) TagContextBuilder(io.opencensus.tags.TagContextBuilder) StatsRecorder(io.opencensus.stats.StatsRecorder) IgniteSpiContext(org.apache.ignite.spi.IgniteSpiContext) IgniteSpiException(org.apache.ignite.spi.IgniteSpiException) Metric(org.apache.ignite.spi.metric.Metric) Stats(io.opencensus.stats.Stats) Date(java.util.Date) HashMap(java.util.HashMap) IgniteEx(org.apache.ignite.internal.IgniteEx) Function(java.util.function.Function) ObjectMetric(org.apache.ignite.spi.metric.ObjectMetric) ArrayList(java.util.ArrayList) PushMetricsExporterAdapter(org.apache.ignite.internal.processors.metric.PushMetricsExporterAdapter) Measure(io.opencensus.stats.Measure) MeasureDouble(io.opencensus.stats.Measure.MeasureDouble) MeasureMap(io.opencensus.stats.MeasureMap) Map(java.util.Map) TagMetadata(io.opencensus.tags.TagMetadata) TagValue(io.opencensus.tags.TagValue) View(io.opencensus.stats.View) ReadOnlyMetricManager(org.apache.ignite.spi.metric.ReadOnlyMetricManager) Tags(io.opencensus.tags.Tags) BooleanMetric(org.apache.ignite.spi.metric.BooleanMetric) HistogramMetric(org.apache.ignite.spi.metric.HistogramMetric) IntMetric(org.apache.ignite.spi.metric.IntMetric) Scope(io.opencensus.common.Scope) Name(io.opencensus.stats.View.Name) MetricRegistry(org.apache.ignite.internal.processors.metric.MetricRegistry) LastValue(io.opencensus.stats.Aggregation.LastValue) MeasureLong(io.opencensus.stats.Measure.MeasureLong) T2(org.apache.ignite.internal.util.typedef.T2) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) OffsetDateTime(java.time.OffsetDateTime) TagKey(io.opencensus.tags.TagKey) MetricUtils(org.apache.ignite.internal.processors.metric.impl.MetricUtils) UNLIMITED_PROPAGATION(io.opencensus.tags.TagMetadata.TagTtl.UNLIMITED_PROPAGATION) GridMetricManager(org.apache.ignite.internal.processors.metric.GridMetricManager) LongMetric(org.apache.ignite.spi.metric.LongMetric) DoubleMetric(org.apache.ignite.spi.metric.DoubleMetric) BooleanMetric(org.apache.ignite.spi.metric.BooleanMetric) HistogramMetric(org.apache.ignite.spi.metric.HistogramMetric) LongMetric(org.apache.ignite.spi.metric.LongMetric) MeasureDouble(io.opencensus.stats.Measure.MeasureDouble) MeasureMap(io.opencensus.stats.MeasureMap) Scope(io.opencensus.common.Scope) OffsetDateTime(java.time.OffsetDateTime) ObjectMetric(org.apache.ignite.spi.metric.ObjectMetric) MeasureLong(io.opencensus.stats.Measure.MeasureLong) DoubleMetric(org.apache.ignite.spi.metric.DoubleMetric) IntMetric(org.apache.ignite.spi.metric.IntMetric)

Example 15 with LongMetric

use of org.apache.ignite.spi.metric.LongMetric in project ignite by apache.

the class TcpDiscoverySpiMBeanTest method testMBean.

/**
 * Tests TcpDiscoverySpiMBean#getCurrentTopologyVersion() and TcpDiscoverySpiMBean#dumpRingStructure().
 *
 * @throws Exception if fails.
 */
@Test
public void testMBean() throws Exception {
    int cnt = 3;
    int cliIdx = cnt - 1;
    startGrids(cnt - 1);
    startClientGrid(cliIdx);
    ClusterNode crd = U.oldest(grid(0).context().discovery().aliveServerNodes(), null);
    assertNotNull(crd);
    try {
        for (int i = 0; i < cnt; i++) {
            IgniteEx grid = grid(i);
            MetricRegistry discoReg = grid.context().metric().registry(DISCO_METRICS);
            TcpDiscoverySpiMBean bean = getMxBean(grid.context().igniteInstanceName(), "SPIs", TcpDiscoverySpi.class, TcpDiscoverySpiMBean.class);
            assertNotNull(bean);
            assertEquals(grid.cluster().topologyVersion(), bean.getCurrentTopologyVersion());
            assertEquals(grid.cluster().topologyVersion(), discoReg.<LongMetric>findMetric("CurrentTopologyVersion").value());
            if (i != cliIdx) {
                assertEquals(crd.id(), bean.getCoordinator());
                assertEquals(crd.id(), discoReg.<ObjectMetric<UUID>>findMetric("Coordinator").value());
            } else {
                assertNull(bean.getCoordinator());
                assertNull(discoReg.findMetric("Coordinator"));
            }
            if (grid.localNode().id().equals(bean.getCoordinator())) {
                assertTrue(bean.getCoordinatorSinceTimestamp() > 0);
                assertTrue(discoReg.<LongMetric>findMetric("CoordinatorSince").value() > 0);
            } else {
                assertEquals(0, bean.getCoordinatorSinceTimestamp());
                if (i == cliIdx)
                    assertNull(discoReg.findMetric("CoordinatorSince"));
                else
                    assertEquals(0L, discoReg.<LongMetric>findMetric("CoordinatorSince").value());
            }
            // `getNodesJoined` returns count of joined nodes since local node startup.
            assertEquals((cnt - 1) - i, bean.getNodesJoined());
            assertEquals((cnt - 1) - i, discoReg.<IntMetric>findMetric("JoinedNodes").value());
            assertEquals(0L, bean.getNodesFailed());
            assertEquals(0, discoReg.<IntMetric>findMetric("FailedNodes").value());
            assertEquals(0L, bean.getNodesLeft());
            assertEquals(0, discoReg.<IntMetric>findMetric("LeftNodes").value());
            assertTrue(bean.getTotalReceivedMessages() > 0);
            assertTrue(discoReg.<IntMetric>findMetric("TotalReceivedMessages").value() > 0);
            assertTrue(bean.getTotalProcessedMessages() > 0);
            assertTrue(discoReg.<IntMetric>findMetric("TotalProcessedMessages").value() > 0);
            if (i != cliIdx) {
                assertTrue(bean.getPendingMessagesRegistered() > 0);
                assertTrue(discoReg.<IntMetric>findMetric("PendingMessagesRegistered").value() > 0);
            } else {
                assertEquals(0, bean.getPendingMessagesRegistered());
                assertEquals(0, discoReg.<IntMetric>findMetric("PendingMessagesRegistered").value());
            }
            assertEquals(0, bean.getPendingMessagesDiscarded());
            bean.dumpRingStructure();
            assertTrue(strLog.toString().contains("TcpDiscoveryNodesRing"));
            assertFalse(bean.getProcessedMessages().isEmpty());
            assertFalse(bean.getReceivedMessages().isEmpty());
            assertTrue(bean.getMaxMessageProcessingTime() >= 0);
            assertEquals(i == cliIdx, bean.isClientMode());
        }
        stopGrid(0);
        crd = U.oldest(grid(1).context().discovery().aliveServerNodes(), null);
        for (int i = 1; i < cnt; i++) {
            IgniteEx grid = grid(i);
            MetricRegistry discoReg = grid.context().metric().registry(DISCO_METRICS);
            TcpDiscoverySpiMBean bean = getMxBean(grid.context().igniteInstanceName(), "SPIs", TcpDiscoverySpi.class, TcpDiscoverySpiMBean.class);
            assertNotNull(bean);
            assertEquals(grid.cluster().topologyVersion(), bean.getCurrentTopologyVersion());
            assertEquals(grid.cluster().topologyVersion(), discoReg.<LongMetric>findMetric("CurrentTopologyVersion").value());
            if (i != cliIdx) {
                assertEquals(crd.id(), bean.getCoordinator());
                assertEquals(crd.id(), discoReg.<ObjectMetric<UUID>>findMetric("Coordinator").value());
            }
            if (grid.localNode().id().equals(crd.id())) {
                assertTrue(bean.getCoordinatorSinceTimestamp() > 0);
                assertTrue(discoReg.<LongMetric>findMetric("CoordinatorSince").value() > 0);
            }
            assertTrue(waitForCondition(() -> bean.getNodesLeft() == 1 && discoReg.<IntMetric>findMetric("LeftNodes").value() == 1, getTestTimeout()));
        }
    } finally {
        stopAllGrids();
    }
}
Also used : ClusterNode(org.apache.ignite.cluster.ClusterNode) ObjectMetric(org.apache.ignite.spi.metric.ObjectMetric) IgniteEx(org.apache.ignite.internal.IgniteEx) MetricRegistry(org.apache.ignite.internal.processors.metric.MetricRegistry) LongMetric(org.apache.ignite.spi.metric.LongMetric) IntMetric(org.apache.ignite.spi.metric.IntMetric) GridCommonAbstractTest(org.apache.ignite.testframework.junits.common.GridCommonAbstractTest) Test(org.junit.Test)

Aggregations

LongMetric (org.apache.ignite.spi.metric.LongMetric)34 MetricRegistry (org.apache.ignite.internal.processors.metric.MetricRegistry)27 Test (org.junit.Test)24 IgniteEx (org.apache.ignite.internal.IgniteEx)15 GridCommonAbstractTest (org.apache.ignite.testframework.junits.common.GridCommonAbstractTest)15 Ignite (org.apache.ignite.Ignite)7 List (java.util.List)6 CountDownLatch (java.util.concurrent.CountDownLatch)6 ArrayList (java.util.ArrayList)5 IntMetric (org.apache.ignite.spi.metric.IntMetric)5 UUID (java.util.UUID)4 Metric (org.apache.ignite.spi.metric.Metric)4 File (java.io.File)3 HashMap (java.util.HashMap)3 Map (java.util.Map)3 Function (java.util.function.Function)3 BinaryObjectBuilder (org.apache.ignite.binary.BinaryObjectBuilder)3 SqlFieldsQuery (org.apache.ignite.cache.query.SqlFieldsQuery)3 ClusterNode (org.apache.ignite.cluster.ClusterNode)3 IgniteConfiguration (org.apache.ignite.configuration.IgniteConfiguration)3