public virtual void TestLoadFirst()
        {
            string filename = GetTestFilename("hadoop-metrics2-p1");

            new ConfigBuilder().Add("p1.foo", "p1foo").Save(filename);
            MetricsConfig mc  = MetricsConfig.Create("p1");
            MetricsConfig mc2 = MetricsConfig.Create("p1", "na1", "na2", filename);

            Org.Apache.Commons.Configuration.Configuration expected = new ConfigBuilder().Add
                                                                          ("foo", "p1foo").config;
            ConfigUtil.AssertEq(expected, mc);
            ConfigUtil.AssertEq(expected, mc2);
        }
        public virtual void RecordBuilderShouldNoOpIfFiltered()
        {
            SubsetConfiguration  fc = new ConfigBuilder().Add("p.exclude", "foo").Subset("p");
            MetricsCollectorImpl mb = new MetricsCollectorImpl();

            mb.SetRecordFilter(TestPatternFilter.NewGlobFilter(fc));
            MetricsRecordBuilderImpl rb = mb.AddRecord("foo");

            ((MetricsRecordBuilderImpl)rb.Tag(Interns.Info("foo", string.Empty), "value")).AddGauge
                (Interns.Info("g0", string.Empty), 1);
            Assert.Equal("no tags", 0, rb.Tags().Count);
            Assert.Equal("no metrics", 0, rb.Metrics().Count);
            NUnit.Framework.Assert.IsNull("null record", rb.GetRecord());
            Assert.Equal("no records", 0, mb.GetRecords().Count);
        }
        public virtual void TestPerMetricFiltering()
        {
            SubsetConfiguration  fc = new ConfigBuilder().Add("p.exclude", "foo").Subset("p");
            MetricsCollectorImpl mb = new MetricsCollectorImpl();

            mb.SetMetricFilter(TestPatternFilter.NewGlobFilter(fc));
            MetricsRecordBuilderImpl rb = mb.AddRecord("foo");

            ((MetricsRecordBuilderImpl)((MetricsRecordBuilderImpl)rb.Tag(Interns.Info("foo",
                                                                                      string.Empty), string.Empty)).AddCounter(Interns.Info("c0", string.Empty), 0)).AddGauge
                (Interns.Info("foo", string.Empty), 1);
            Assert.Equal("1 tag", 1, rb.Tags().Count);
            Assert.Equal("1 metric", 1, rb.Metrics().Count);
            Assert.Equal("expect foo tag", "foo", rb.Tags()[0].Name());
            Assert.Equal("expect c0", "c0", rb.Metrics()[0].Name());
        }
        public virtual void TestCommon()
        {
            string filename = GetTestFilename("test-metrics2");

            new ConfigBuilder().Add("*.foo", "default foo").Add("p1.*.bar", "p1 default bar")
            .Add("p1.t1.*.bar", "p1.t1 default bar").Add("p1.t1.i1.name", "p1.t1.i1.name").Add
                ("p1.t1.42.bar", "p1.t1.42.bar").Add("p1.t2.i1.foo", "p1.t2.i1.foo").Add("p2.*.foo"
                                                                                         , "p2 default foo").Save(filename);
            MetricsConfig mc = MetricsConfig.Create("p1", filename);

            Log.Debug("mc:" + mc);
            Org.Apache.Commons.Configuration.Configuration expected = new ConfigBuilder().Add
                                                                          ("*.bar", "p1 default bar").Add("t1.*.bar", "p1.t1 default bar").Add("t1.i1.name"
                                                                                                                                               , "p1.t1.i1.name").Add("t1.42.bar", "p1.t1.42.bar").Add("t2.i1.foo", "p1.t2.i1.foo"
                                                                                                                                                                                                       ).config;
            ConfigUtil.AssertEq(expected, mc);
            TestInstances(mc);
        }
        public virtual void TestGangliaMetrics2()
        {
            ConfigBuilder cb = new ConfigBuilder().Add("default.period", 10).Add("test.sink.gsink30.context"
                                                                                 , "test").Add("test.sink.gsink31.context", "test").Save(TestMetricsConfig.GetTestFilename
                                                                                                                                             ("hadoop-metrics2-test"));
            // filter out only "test"
            // filter out only "test"
            MetricsSystemImpl ms = new MetricsSystemImpl("Test");

            ms.Start();
            TestGangliaMetrics.TestSource s1 = ms.Register("s1", "s1 desc", new TestGangliaMetrics.TestSource
                                                               ("s1rec"));
            s1.c1.Incr();
            s1.xxx.Incr();
            s1.g1.Set(2);
            s1.yyy.Incr(2);
            s1.s1.Add(0);
            int expectedCountFromGanglia30 = expectedMetrics.Length;
            int expectedCountFromGanglia31 = 2 * expectedMetrics.Length;
            // Setup test for GangliaSink30
            AbstractGangliaSink gsink30 = new GangliaSink30();

            gsink30.Init(cb.Subset("test"));
            TestGangliaMetrics.MockDatagramSocket mockds30 = new TestGangliaMetrics.MockDatagramSocket
                                                                 (this);
            GangliaMetricsTestHelper.SetDatagramSocket(gsink30, mockds30);
            // Setup test for GangliaSink31
            AbstractGangliaSink gsink31 = new GangliaSink31();

            gsink31.Init(cb.Subset("test"));
            TestGangliaMetrics.MockDatagramSocket mockds31 = new TestGangliaMetrics.MockDatagramSocket
                                                                 (this);
            GangliaMetricsTestHelper.SetDatagramSocket(gsink31, mockds31);
            // register the sinks
            ms.Register("gsink30", "gsink30 desc", gsink30);
            ms.Register("gsink31", "gsink31 desc", gsink31);
            ms.PublishMetricsNow();
            // publish the metrics
            ms.Stop();
            // check GanfliaSink30 data
            CheckMetrics(mockds30.GetCapturedSend(), expectedCountFromGanglia30);
            // check GanfliaSink31 data
            CheckMetrics(mockds31.GetCapturedSend(), expectedCountFromGanglia31);
        }
        /// <exception cref="System.Exception"/>
        private void TestInstances(MetricsConfig c)
        {
            IDictionary <string, MetricsConfig> map  = c.GetInstanceConfigs("t1");
            IDictionary <string, MetricsConfig> map2 = c.GetInstanceConfigs("t2");

            Assert.Equal("number of t1 instances", 2, map.Count);
            Assert.Equal("number of t2 instances", 1, map2.Count);
            Assert.True("contains t1 instance i1", map.Contains("i1"));
            Assert.True("contains t1 instance 42", map.Contains("42"));
            Assert.True("contains t2 instance i1", map2.Contains("i1"));
            MetricsConfig t1i1  = map["i1"];
            MetricsConfig t1i42 = map["42"];
            MetricsConfig t2i1  = map2["i1"];

            Log.Debug("--- t1 instance i1:" + t1i1);
            Log.Debug("--- t1 instance 42:" + t1i42);
            Log.Debug("--- t2 instance i1:" + t2i1);
            Org.Apache.Commons.Configuration.Configuration t1expected1 = new ConfigBuilder().
                                                                         Add("name", "p1.t1.i1.name").config;
            Org.Apache.Commons.Configuration.Configuration t1expected42 = new ConfigBuilder()
                                                                          .Add("bar", "p1.t1.42.bar").config;
            Org.Apache.Commons.Configuration.Configuration t2expected1 = new ConfigBuilder().
                                                                         Add("foo", "p1.t2.i1.foo").config;
            ConfigUtil.AssertEq(t1expected1, t1i1);
            ConfigUtil.AssertEq(t1expected42, t1i42);
            ConfigUtil.AssertEq(t2expected1, t2i1);
            Log.Debug("asserting foo == default foo");
            // Check default lookups
            Assert.Equal("value of foo in t1 instance i1", "default foo",
                         t1i1.GetString("foo"));
            Assert.Equal("value of bar in t1 instance i1", "p1.t1 default bar"
                         , t1i1.GetString("bar"));
            Assert.Equal("value of foo in t1 instance 42", "default foo",
                         t1i42.GetString("foo"));
            Assert.Equal("value of foo in t2 instance i1", "p1.t2.i1.foo",
                         t2i1.GetString("foo"));
            Assert.Equal("value of bar in t2 instance i1", "p1 default bar"
                         , t2i1.GetString("bar"));
        }
        public virtual void TestTagsForPrefix()
        {
            ConfigBuilder cb = new ConfigBuilder().Add("test.sink.ganglia.tagsForPrefix.all",
                                                       "*").Add("test.sink.ganglia.tagsForPrefix.some", "NumActiveSinks, " + "NumActiveSources"
                                                                ).Add("test.sink.ganglia.tagsForPrefix.none", string.Empty);
            GangliaSink30 sink = new GangliaSink30();

            sink.Init(cb.Subset("test.sink.ganglia"));
            IList <MetricsTag> tags = new AList <MetricsTag>();

            tags.AddItem(new MetricsTag(MsInfo.Context, "all"));
            tags.AddItem(new MetricsTag(MsInfo.NumActiveSources, "foo"));
            tags.AddItem(new MetricsTag(MsInfo.NumActiveSinks, "bar"));
            tags.AddItem(new MetricsTag(MsInfo.NumAllSinks, "haa"));
            tags.AddItem(new MetricsTag(MsInfo.Hostname, "host"));
            ICollection <AbstractMetric> metrics = new HashSet <AbstractMetric>();
            MetricsRecord record = new MetricsRecordImpl(MsInfo.Context, (long)1, tags, metrics
                                                         );
            StringBuilder sb = new StringBuilder();

            sink.AppendPrefix(record, sb);
            Assert.Equal(".NumActiveSources=foo.NumActiveSinks=bar.NumAllSinks=haa"
                         , sb.ToString());
            tags.Set(0, new MetricsTag(MsInfo.Context, "some"));
            sb = new StringBuilder();
            sink.AppendPrefix(record, sb);
            Assert.Equal(".NumActiveSources=foo.NumActiveSinks=bar", sb.ToString
                             ());
            tags.Set(0, new MetricsTag(MsInfo.Context, "none"));
            sb = new StringBuilder();
            sink.AppendPrefix(record, sb);
            Assert.Equal(string.Empty, sb.ToString());
            tags.Set(0, new MetricsTag(MsInfo.Context, "nada"));
            sb = new StringBuilder();
            sink.AppendPrefix(record, sb);
            Assert.Equal(string.Empty, sb.ToString());
        }