示例#1
0
        internal virtual MutableMetric NewForField(FieldInfo field, Metric annotation, MetricsRegistry
                                                   registry)
        {
            if (Log.IsDebugEnabled())
            {
                Log.Debug("field " + field + " with annotation " + annotation);
            }
            MetricsInfo   info   = GetInfo(annotation, field);
            MutableMetric metric = NewForField(field, annotation);

            if (metric != null)
            {
                registry.Add(info.Name(), metric);
                return(metric);
            }
            Type cls = field.FieldType;

            if (cls == typeof(MutableCounterInt))
            {
                return(registry.NewCounter(info, 0));
            }
            if (cls == typeof(MutableCounterLong))
            {
                return(registry.NewCounter(info, 0L));
            }
            if (cls == typeof(MutableGaugeInt))
            {
                return(registry.NewGauge(info, 0));
            }
            if (cls == typeof(MutableGaugeLong))
            {
                return(registry.NewGauge(info, 0L));
            }
            if (cls == typeof(MutableRate))
            {
                return(registry.NewRate(info.Name(), info.Description(), annotation.Always()));
            }
            if (cls == typeof(MutableRates))
            {
                return(new MutableRates(registry));
            }
            if (cls == typeof(MutableStat))
            {
                return(registry.NewStat(info.Name(), info.Description(), annotation.SampleName(),
                                        annotation.ValueName(), annotation.Always()));
            }
            throw new MetricsException("Unsupported metric field " + field.Name + " of type "
                                       + field.FieldType.FullName);
        }
示例#2
0
        public virtual void TestSnapshot()
        {
            MetricsRecordBuilder mb       = MetricsAsserts.MockMetricsRecordBuilder();
            MetricsRegistry      registry = new MetricsRegistry("test");

            registry.NewCounter("c1", "int counter", 1);
            registry.NewCounter("c2", "long counter", 2L);
            registry.NewGauge("g1", "int gauge", 3);
            registry.NewGauge("g2", "long gauge", 4L);
            registry.NewStat("s1", "stat", "Ops", "Time", true).Add(0);
            registry.NewRate("s2", "stat", false).Add(0);
            registry.Snapshot(mb, true);
            MutableStat s2 = (MutableStat)registry.Get("s2");

            s2.Snapshot(mb, true);
            // should get the same back.
            s2.Add(1);
            s2.Snapshot(mb, true);
            // should get new interval values back
            Org.Mockito.Mockito.Verify(mb).AddCounter(Interns.Info("c1", "int counter"), 1);
            Org.Mockito.Mockito.Verify(mb).AddCounter(Interns.Info("c2", "long counter"), 2L);
            Org.Mockito.Mockito.Verify(mb).AddGauge(Interns.Info("g1", "int gauge"), 3);
            Org.Mockito.Mockito.Verify(mb).AddGauge(Interns.Info("g2", "long gauge"), 4L);
            Org.Mockito.Mockito.Verify(mb).AddCounter(Interns.Info("S1NumOps", "Number of ops for stat"
                                                                   ), 1L);
            Org.Mockito.Mockito.Verify(mb).AddGauge(Matchers.Eq(Interns.Info("S1AvgTime", "Average time for stat"
                                                                             )), AdditionalMatchers.Eq(0.0, Epsilon));
            Org.Mockito.Mockito.Verify(mb).AddGauge(Matchers.Eq(Interns.Info("S1StdevTime", "Standard deviation of time for stat"
                                                                             )), AdditionalMatchers.Eq(0.0, Epsilon));
            Org.Mockito.Mockito.Verify(mb).AddGauge(Matchers.Eq(Interns.Info("S1IMinTime", "Interval min time for stat"
                                                                             )), AdditionalMatchers.Eq(0.0, Epsilon));
            Org.Mockito.Mockito.Verify(mb).AddGauge(Matchers.Eq(Interns.Info("S1IMaxTime", "Interval max time for stat"
                                                                             )), AdditionalMatchers.Eq(0.0, Epsilon));
            Org.Mockito.Mockito.Verify(mb).AddGauge(Matchers.Eq(Interns.Info("S1MinTime", "Min time for stat"
                                                                             )), AdditionalMatchers.Eq(0.0, Epsilon));
            Org.Mockito.Mockito.Verify(mb).AddGauge(Matchers.Eq(Interns.Info("S1MaxTime", "Max time for stat"
                                                                             )), AdditionalMatchers.Eq(0.0, Epsilon));
            Org.Mockito.Mockito.Verify(mb, Org.Mockito.Mockito.Times(2)).AddCounter(Interns.Info
                                                                                        ("S2NumOps", "Number of ops for stat"), 1L);
            Org.Mockito.Mockito.Verify(mb, Org.Mockito.Mockito.Times(2)).AddGauge(Matchers.Eq
                                                                                      (Interns.Info("S2AvgTime", "Average time for stat")), AdditionalMatchers.Eq(0.0,
                                                                                                                                                                  Epsilon));
            Org.Mockito.Mockito.Verify(mb).AddCounter(Interns.Info("S2NumOps", "Number of ops for stat"
                                                                   ), 2L);
            Org.Mockito.Mockito.Verify(mb).AddGauge(Matchers.Eq(Interns.Info("S2AvgTime", "Average time for stat"
                                                                             )), AdditionalMatchers.Eq(1.0, Epsilon));
        }
示例#3
0
 /// <summary>
 /// Initialize the registry with all the methods in a protocol
 /// so they all show up in the first snapshot.
 /// </summary>
 /// <remarks>
 /// Initialize the registry with all the methods in a protocol
 /// so they all show up in the first snapshot.
 /// Convenient for JMX implementations.
 /// </remarks>
 /// <param name="protocol">the protocol class</param>
 public virtual void Init(Type protocol)
 {
     if (protocolCache.Contains(protocol))
     {
         return;
     }
     protocolCache.AddItem(protocol);
     foreach (MethodInfo method in Runtime.GetDeclaredMethods(protocol))
     {
         string name = method.Name;
         Log.Debug(name);
         try
         {
             registry.NewRate(name, name, false, true);
         }
         catch (Exception e)
         {
             Log.Error("Error creating rate metrics for " + method.Name, e);
         }
     }
 }