Example #1
0
 /// <summary>Construct the metrics system</summary>
 /// <param name="prefix">for the system</param>
 public MetricsSystemImpl(string prefix)
 {
     // The callback list is used by register(Callback callback), while
     // the callback map is used by register(String name, String desc, T sink)
     // Things that are changed by init()/start()/stop()
     // seconds
     // number of timer invocations * period
     // for mini cluster mode
     this.prefix    = prefix;
     allSources     = Maps.NewHashMap();
     sources        = Maps.NewLinkedHashMap();
     allSinks       = Maps.NewHashMap();
     sinks          = Maps.NewLinkedHashMap();
     sourceConfigs  = Maps.NewHashMap();
     sinkConfigs    = Maps.NewHashMap();
     callbacks      = Lists.NewArrayList();
     namedCallbacks = Maps.NewHashMap();
     injectedTags   = Lists.NewArrayList();
     collector      = new MetricsCollectorImpl();
     if (prefix != null)
     {
         // prefix could be null for default ctor, which requires init later
         InitSystemMBean();
     }
 }
Example #2
0
        public virtual void TestGetMetricsAndJmx()
        {
            // create test source with a single metric counter of value 0
            TestMetricsSourceAdapter.TestSource source = new TestMetricsSourceAdapter.TestSource
                                                             ("test");
            MetricsSourceBuilder sb           = MetricsAnnotations.NewSourceBuilder(source);
            MetricsSource        s            = sb.Build();
            IList <MetricsTag>   injectedTags = new AList <MetricsTag>();
            MetricsSourceAdapter sa           = new MetricsSourceAdapter("test", "test", "test desc", s
                                                                         , injectedTags, null, null, 1, false);
            // all metrics are initially assumed to have changed
            MetricsCollectorImpl            builder        = new MetricsCollectorImpl();
            IEnumerable <MetricsRecordImpl> metricsRecords = sa.GetMetrics(builder, true);
            // Validate getMetrics and JMX initial values
            MetricsRecordImpl metricsRecord = metricsRecords.GetEnumerator().Next();

            Assert.Equal(0L, metricsRecord.Metrics().GetEnumerator().Next(
                             ).Value());
            Thread.Sleep(100);
            // skip JMX cache TTL
            Assert.Equal(0L, (Number)sa.GetAttribute("C1"));
            // change metric value
            source.IncrementCnt();
            // validate getMetrics and JMX
            builder        = new MetricsCollectorImpl();
            metricsRecords = sa.GetMetrics(builder, true);
            metricsRecord  = metricsRecords.GetEnumerator().Next();
            Assert.True(metricsRecord.Metrics().GetEnumerator().HasNext());
            Thread.Sleep(100);
            // skip JMX cache TTL
            Assert.Equal(1L, (Number)sa.GetAttribute("C1"));
        }
Example #3
0
 // in case regular interval update is not running
 internal virtual IEnumerable <MetricsRecordImpl> GetMetrics(MetricsCollectorImpl builder
                                                             , bool all)
 {
     builder.SetRecordFilter(recordFilter).SetMetricFilter(metricFilter);
     lock (this)
     {
         if (lastRecs == null && jmxCacheTS == 0)
         {
             all = true;
         }
     }
     // Get all the metrics to populate the sink caches
     try
     {
         source.GetMetrics(builder, all);
     }
     catch (Exception e)
     {
         Log.Error("Error getting metrics from source " + name, e);
     }
     foreach (MetricsRecordBuilderImpl rb in builder)
     {
         foreach (MetricsTag t in injectedTags)
         {
             rb.Add(t);
         }
     }
     lock (this)
     {
         lastRecs = builder.GetRecords();
         return(lastRecs);
     }
 }
        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());
        }
Example #6
0
        private void UpdateJmxCache()
        {
            bool getAllMetrics = false;

            lock (this)
            {
                if (Time.Now() - jmxCacheTS >= jmxCacheTTL)
                {
                    // temporarilly advance the expiry while updating the cache
                    jmxCacheTS = Time.Now() + jmxCacheTTL;
                    if (lastRecs == null)
                    {
                        getAllMetrics = true;
                    }
                }
                else
                {
                    return;
                }
            }
            if (getAllMetrics)
            {
                MetricsCollectorImpl builder = new MetricsCollectorImpl();
                GetMetrics(builder, true);
            }
            lock (this)
            {
                UpdateAttrCache();
                if (getAllMetrics)
                {
                    UpdateInfoCache();
                }
                jmxCacheTS = Time.Now();
                lastRecs   = null;
            }
        }