コード例 #1
0
 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);
 }
コード例 #2
0
 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)));
 }
コード例 #3
0
        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);
                    }
                }
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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();
            }
        }