private synchronized void configure(String prefix) { config = MetricsConfig.create(prefix); configureSinks(); configureSources(); configureSystem(); }
static MetricsSinkAdapter newSink(String name, String desc, MetricsSink sink, MetricsConfig conf) { return new MetricsSinkAdapter(name, desc, sink, conf.getString(CONTEXT_KEY), conf.getFilter(SOURCE_FILTER_KEY), conf.getFilter(RECORD_FILTER_KEY), conf.getFilter(METRIC_FILTER_KEY), conf.getInt(PERIOD_KEY, PERIOD_DEFAULT) * 1000, conf.getInt(QUEUE_CAPACITY_KEY, QUEUE_CAPACITY_DEFAULT), conf.getInt(RETRY_DELAY_KEY, RETRY_DELAY_DEFAULT), conf.getFloat(RETRY_BACKOFF_KEY, RETRY_BACKOFF_DEFAULT), conf.getInt(RETRY_COUNT_KEY, RETRY_COUNT_DEFAULT)); }
private void configureSources() { sourceFilter = config.getFilter(PREFIX_DEFAULT + SOURCE_FILTER_KEY); sourceConfigs = config.getInstanceConfigs(SOURCE_KEY); registerSystemSource(); }
/** * Consume one element, will block if queue is empty * Only one consumer at a time is allowed * @param consumer the consumer callback object */ void consume(Consumer<T> consumer) throws InterruptedException { T e = waitForData(); try { consumer.consume(e); // can take forever _dequeue(); } finally { clearConsumerLock(); } }
public MetricsRecordImpl getRecord() { if (acceptable && (recordFilter == null || recordFilter.accepts(tags))) { return new MetricsRecordImpl(recInfo, timestamp, tags(), metrics()); } return null; }
synchronized void registerSink(String name, String desc, MetricsSink sink) { checkNotNull(config, "config"); MetricsConfig conf = sinkConfigs.get(name); MetricsSinkAdapter sa = conf != null ? newSink(name, desc, sink, conf) : newSink(name, desc, sink, config.subset(SINK_KEY)); sinks.put(name, sa); sa.start(); LOG.info("Registered sink "+ name); }
boolean add(String name, Iterable<MetricsRecordImpl> records) { return add(new MetricsBuffer.Entry(name, records)); }
MetricsSourceAdapter(String prefix, String name, String description, MetricsSource source, Iterable<MetricsTag> injectedTags, long period, MetricsConfig conf) { this(prefix, name, description, source, injectedTags, conf.getFilter(RECORD_FILTER_KEY), conf.getFilter(METRIC_FILTER_KEY), period + 1, // hack to avoid most of the "innocuous" races. conf.getBoolean(START_MBEANS_KEY, true)); }
@Override public void postStart() { register(name, description, sink); } });
@Override public String toString() { return toString(this); }
@Override public MetricsRecordBuilderImpl setContext(String value) { return tag(MsInfo.Context, value); }
synchronized void clear() { checkConsumer(); for (int i = data.length; i-- > 0; ) { data[i] = null; } size = 0; }
@Override public Iterator<String> iterator() { return (Iterator<String>) getKeys(); } };
MetricsBuffer get() { return new MetricsBuffer(this); } }
@Override public MetricsConfig subset(String prefix) { return new MetricsConfig(this, prefix); }
@Override public MBeanInfo getMBeanInfo() { updateJmxCache(); return infoCache; }
@Override public void run() { publishMetricsFromQueue(); } };
private synchronized void clearCache() { JmxCacheBuster.clearJmxCache(); }
public void run() { JmxCacheBuster.clearJmxCache(); } }, 5, 5, TimeUnit.MINUTES);