use of org.apache.ignite.spi.metric.Metric in project ignite by apache.
the class GridCacheAbstractMetricsSelfTest method testRemoveTime.
/**
*/
@Test
public void testRemoveTime() throws Exception {
IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
HistogramMetricImpl removeTime = metric("RemoveTime");
HistogramMetricImpl removeAllTime = metric("RemoveAllTime");
assertTrue(stream(removeTime.value()).allMatch(v -> v == 0));
assertTrue(stream(removeAllTime.value()).allMatch(v -> v == 0));
cache.put(1, 1);
cache.put(2, 2);
assertEquals(0, stream(removeTime.value()).sum());
assertEquals(0, stream(removeAllTime.value()).sum());
cache.remove(1);
cache.removeAsync(2).get();
assertTrue(waitForCondition(() -> stream(removeTime.value()).sum() == 2, getTestTimeout()));
assertEquals(0, stream(removeAllTime.value()).sum());
cache.removeAll(singleton(3));
cache.removeAllAsync(singleton(4)).get();
assertTrue(waitForCondition(() -> stream(removeAllTime.value()).sum() == 2, getTestTimeout()));
assertEquals(2, stream(removeTime.value()).sum());
}
use of org.apache.ignite.spi.metric.Metric in project ignite by apache.
the class GridServiceMetricsTest method testServiceMetrics.
/**
* Invokes service in various ways: from clients, servers, etc. Checks these calls reflect in the metrics.
*
* @param serverCnt Number of server nodes.
* @param clientCnt Number of client nodes.
* @param perClusterCnt Number of service instances per cluster.
* @param perNodeCnt Number of service instances per node.
*/
private void testServiceMetrics(int serverCnt, int clientCnt, int perClusterCnt, int perNodeCnt) throws Throwable {
List<IgniteEx> servers = startGrids(serverCnt, false);
List<IgniteEx> clients = startGrids(clientCnt, true);
servers.get(0).services().deploy(serviceCfg(MyServiceFactory.create(), perClusterCnt, perNodeCnt));
awaitPartitionMapExchange();
List<MyService> serverStickyProxies = servers.stream().map(ignite -> (MyService) ignite.services().serviceProxy(SRVC_NAME, MyService.class, true)).collect(Collectors.toList());
List<MyService> clientStickyProxies = clients.stream().map(ignite -> (MyService) ignite.services().serviceProxy(SRVC_NAME, MyService.class, true)).collect(Collectors.toList());
long invokeCollector = 0;
// Call service through the server proxies.
for (int i = 0; i < INVOKE_CNT; ++i) {
// Call from server.
IgniteEx ignite = servers.get(i % servers.size());
callService4Times(ignite, serverStickyProxies.get(i % serverStickyProxies.size()));
// Call from client.
ignite = clients.get(i % clients.size());
callService4Times(ignite, clientStickyProxies.get(i % clientStickyProxies.size()));
invokeCollector += 8;
}
long invokesInMetrics = 0;
// Calculate and check invocations within the metrics.
for (IgniteEx ignite : servers) {
ReadOnlyMetricRegistry metrics = findMetricRegistry(ignite.context().metric(), SRVC_NAME);
// Metrics may not be deployed on this server node.
if (metrics == null)
continue;
for (Metric metric : metrics) {
if (metric instanceof HistogramMetric)
invokesInMetrics += sumHistogramEntries((HistogramMetric) metric);
}
}
// Compare calls number and metrics number.
assertEquals("Calculated wrong service invocation number.", invokesInMetrics, invokeCollector);
}
use of org.apache.ignite.spi.metric.Metric 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();
}
use of org.apache.ignite.spi.metric.Metric 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();
}
}
use of org.apache.ignite.spi.metric.Metric in project ignite by apache.
the class MetricRegistryLocalSystemView method getRows.
/**
* {@inheritDoc}
*/
@Override
public Iterator<Row> getRows(Session ses, SearchRow first, SearchRow last) {
return new Iterator<Row>() {
/**
*/
private Iterator<ReadOnlyMetricRegistry> grps = mreg.iterator();
/**
*/
private Iterator<Metric> curr = Collections.emptyIterator();
/**
*/
private boolean advance() {
while (grps.hasNext()) {
ReadOnlyMetricRegistry mreg = grps.next();
curr = mreg.iterator();
if (curr.hasNext())
return true;
}
return false;
}
/**
* {@inheritDoc}
*/
@Override
public boolean hasNext() {
if (curr.hasNext())
return true;
return advance();
}
/**
* {@inheritDoc}
*/
@Override
public Row next() {
Metric m = curr.next();
return createRow(ses, m.name(), m.getAsString(), m.description());
}
};
}
Aggregations