Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ public interface MetricsContext
void registerCollectorNotification(CollectorNotification notification);

List<Collector> getCollectorsForKey(ArgKey key);
List<Formatter> getFormattersForKey(ArgKey key);
List<MetricSink> getSinksForKey(ArgKey key);

void registerTrigger(String name, Trigger trigger);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@ToString
public class MetricsContextImpl implements MetricsContext
Expand Down Expand Up @@ -120,7 +121,19 @@ public List<Collector> getCollectorsForKey(ArgKey key)
return Collections.emptyList();
}

private TriggerMetricCollection getTriggerForKey(ArgKey key)
@Override
public List<Formatter> getFormattersForKey(ArgKey key)
{
return m_formatters.getComponentsForKey(key).stream().map(AssignedFormatter::getFormatter).collect(Collectors.toList());
}

@Override
public List<MetricSink> getSinksForKey(ArgKey key)
{
return m_sinks.getComponentsForKey(key).stream().map(SinkQueue::getSink).collect(Collectors.toList());
}

private TriggerMetricCollection getTriggerForKey(ArgKey key)
{
TriggerMetricCollection triggerMetricCollection = m_triggers.getComponentForKey(key);
if (triggerMetricCollection == null)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package org.kairosdb.metrics4j.internal;

import org.junit.jupiter.api.Test;
import org.kairosdb.metrics4j.formatters.DefaultFormatter;
import org.kairosdb.metrics4j.formatters.Formatter;
import org.kairosdb.metrics4j.sinks.MetricSink;
import org.kairosdb.metrics4j.sinks.STDOutSink;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

class MetricsContextImplTest
{

private final MetricsContextImpl context = new MetricsContextImpl();

@Test
public void testGetFormatterByKeyIsEmptyWhenNoFormattersSet()
{
List<Formatter> formatter = context.getFormattersForKey(buildKey());

assertThat(formatter).isEmpty();
}

@Test
public void testGetFormatterByKeyWhenSet()
{
Formatter formatter = new DefaultFormatter();
context.registerFormatter("formatter", formatter);
context.addFormatterToPath("formatter", buildPath());

List<Formatter> formatters = context.getFormattersForKey(buildKey());

assertThat(formatters).containsExactly(formatter);
}

@Test
public void testGetSinkByKeyIsEmptyWhenNoFormattersSet()
{
List<MetricSink> sinks = context.getSinksForKey(buildKey());

assertThat(sinks).isEmpty();
}

@Test
public void testGetSinkByKeyWhenSet()
{
MetricSink sink = new STDOutSink();
context.registerSink("sink", sink);
context.addSinkToPath("sink", buildPath());

List<MetricSink> sinks = context.getSinksForKey(buildKey());

assertThat(sinks).containsExactly(sink);
}


private List<String> buildPath()
{
return Arrays.asList(this.getClass().getName().split("\\."));
}

private ArgKey buildKey()
{
// java trick to get the current method in this case "buildKey"
Method self = new Object() {
}.getClass().getEnclosingMethod();
return new MethodArgKey(self, new Object[]{});
}

}