internal MetricsSinkAdapter(string name, string description, MetricsSink sink, string context, MetricsFilter sourceFilter, MetricsFilter recordFilter, MetricsFilter metricFilter, int period, int queueCapacity, int retryDelay, float retryBackoff, int retryCount) { this.name = Preconditions.CheckNotNull(name, "name"); this.description = description; this.sink = Preconditions.CheckNotNull(sink, "sink object"); this.context = context; this.sourceFilter = sourceFilter; this.recordFilter = recordFilter; this.metricFilter = metricFilter; this.period = Contracts.CheckArg(period, period > 0, "period"); firstRetryDelay = Contracts.CheckArg(retryDelay, retryDelay > 0, "retry delay"); this.retryBackoff = Contracts.CheckArg(retryBackoff, retryBackoff > 1, "retry backoff" ); oobPutTimeout = (long)(firstRetryDelay * Math.Pow(retryBackoff, retryCount) * 1000 ); this.retryCount = retryCount; this.queue = new SinkQueue <MetricsBuffer>(Contracts.CheckArg(queueCapacity, queueCapacity > 0, "queue capacity")); latency = registry.NewRate("Sink_" + name, "Sink end to end latency", false); dropped = registry.NewCounter("Sink_" + name + "Dropped", "Dropped updates per sink" , 0); qsize = registry.NewGauge("Sink_" + name + "Qsize", "Queue size", 0); sinkThread = new _Thread_86(this); sinkThread.SetName(name); sinkThread.SetDaemon(true); }
internal static MetricsSinkAdapter NewSink(string name, string desc, MetricsSink sink, MetricsConfig conf) { return(new MetricsSinkAdapter(name, desc, sink, conf.GetString(ContextKey), conf. GetFilter(SourceFilterKey), conf.GetFilter(RecordFilterKey), conf.GetFilter(MetricFilterKey ), conf.GetInt(PeriodKey, PeriodDefault), conf.GetInt(QueueCapacityKey, QueueCapacityDefault ), conf.GetInt(RetryDelayKey, RetryDelayDefault), conf.GetFloat(RetryBackoffKey, RetryBackoffDefault), conf.GetInt(RetryCountKey, RetryCountDefault))); }
public virtual void TestInitFirstVerifyStopInvokedImmediately() { DefaultMetricsSystem.Shutdown(); new ConfigBuilder().Add("*.period", 8).Add("test.sink.test.class", typeof(TestMetricsSystemImpl.TestSink ).FullName).Add("test.*.source.filter.exclude", "s0").Add("test.source.s1.metric.filter.exclude" , "X*").Add("test.sink.sink1.metric.filter.exclude", "Y*").Add("test.sink.sink2.metric.filter.exclude" , "Y*").Save(TestMetricsConfig.GetTestFilename("hadoop-metrics2-test")); //.add("test.sink.plugin.urls", getPluginUrlsAsString()) MetricsSystemImpl ms = new MetricsSystemImpl("Test"); ms.Start(); ms.Register("s0", "s0 desc", new TestMetricsSystemImpl.TestSource("s0rec")); TestMetricsSystemImpl.TestSource s1 = ms.Register("s1", "s1 desc", new TestMetricsSystemImpl.TestSource ("s1rec")); s1.c1.Incr(); s1.xxx.Incr(); s1.g1.Set(2); s1.yyy.Incr(2); s1.s1.Add(0); MetricsSink sink1 = Org.Mockito.Mockito.Mock <MetricsSink>(); MetricsSink sink2 = Org.Mockito.Mockito.Mock <MetricsSink>(); ms.RegisterSink("sink1", "sink1 desc", sink1); ms.RegisterSink("sink2", "sink2 desc", sink2); ms.PublishMetricsNow(); // publish the metrics ms.Stop(); ms.Shutdown(); //When we call stop, at most two sources will be consumed by each sink thread. Org.Mockito.Mockito.Verify(sink1, Org.Mockito.Mockito.AtMost(2)).PutMetrics(r1.Capture ()); IList <MetricsRecord> mr1 = r1.GetAllValues(); Org.Mockito.Mockito.Verify(sink2, Org.Mockito.Mockito.AtMost(2)).PutMetrics(r2.Capture ()); IList <MetricsRecord> mr2 = r2.GetAllValues(); if (mr1.Count != 0 && mr2.Count != 0) { CheckMetricsRecords(mr1); MoreAsserts.AssertEquals("output", mr1, mr2); } else { if (mr1.Count != 0) { CheckMetricsRecords(mr1); } else { if (mr2.Count != 0) { CheckMetricsRecords(mr2); } } } }
internal virtual void RegisterSink(string name, string desc, MetricsSink sink) { lock (this) { Preconditions.CheckNotNull(config, "config"); MetricsConfig conf = sinkConfigs[name]; MetricsSinkAdapter sa = conf != null?NewSink(name, desc, sink, conf) : NewSink( name, desc, sink, ((MetricsConfig)config.Subset(SinkKey))); sinks[name] = sa; sa.Start(); Log.Info("Registered sink " + name); } }
public virtual void TestQSize() { new ConfigBuilder().Add("*.period", 8).Add("test.sink.test.class", typeof(TestMetricsSystemImpl.TestSink ).FullName).Save(TestMetricsConfig.GetTestFilename("hadoop-metrics2-test")); MetricsSystemImpl ms = new MetricsSystemImpl("Test"); CountDownLatch proceedSignal = new CountDownLatch(1); CountDownLatch reachedPutMetricSignal = new CountDownLatch(1); ms.Start(); try { MetricsSink slowSink = Org.Mockito.Mockito.Mock <MetricsSink>(); MetricsSink dataSink = Org.Mockito.Mockito.Mock <MetricsSink>(); ms.RegisterSink("slowSink", "The sink that will wait on putMetric", slowSink); ms.RegisterSink("dataSink", "The sink I'll use to get info about slowSink", dataSink ); Org.Mockito.Mockito.DoAnswer(new _Answer_457(reachedPutMetricSignal, proceedSignal )).When(slowSink).PutMetrics(Any <MetricsRecord>()); // trigger metric collection first time ms.OnTimerEvent(); Assert.True(reachedPutMetricSignal.Await(1, TimeUnit.Seconds)); // Now that the slow sink is still processing the first metric, // its queue length should be 1 for the second collection. ms.OnTimerEvent(); Org.Mockito.Mockito.Verify(dataSink, Org.Mockito.Mockito.Timeout(500).Times(2)).PutMetrics (r1.Capture()); IList <MetricsRecord> mr = r1.GetAllValues(); Number qSize = Iterables.Find(mr[1].Metrics(), new _Predicate_475()).Value(); Assert.Equal(1, qSize); } finally { proceedSignal.CountDown(); ms.Stop(); } }