private void Reset(int stringsBufferSize, int metricsBufferSize)
        {
            Reset(ref _stringsBuffer, ref _stringsCompressStream, ref _stringsOutput, stringsBufferSize);
            Reset(ref _metricsBuffer, ref _metricsCompressStream, ref _metricsOutput, metricsBufferSize);

            _strings        = new SortedDictionary <string, int>();
            _count          = 0;
            _lastDescriptor = null;
            _closed         = false;
        }
        private void AppendDescriptor(IMetricDescriptor descriptor)
        {
            var mask = GetMask(descriptor);

            _tempOutput.WriteByte((byte)mask);

            if (mask.HasNone(DescriptorMask.Prefix))
            {
                _tempOutput.WriteInt(GetStringId(descriptor.Prefix));
            }

            if (mask.HasNone(DescriptorMask.Name))
            {
                _tempOutput.WriteInt(GetStringId(descriptor.Name));
            }

            if (mask.HasNone(DescriptorMask.DiscriminatorName))
            {
                _tempOutput.WriteInt(GetStringId(descriptor.DiscriminatorKey));
            }

            if (mask.HasNone(DescriptorMask.DiscriminatorValue))
            {
                _tempOutput.WriteInt(GetStringId(descriptor.DiscriminatorValue));
            }

            if (mask.HasNone(DescriptorMask.Unit))
            {
                _tempOutput.WriteByte((byte)descriptor.Unit);
            }

            //if (mask.HasNone(DescriptorMask.ExcludedTargets))
            //    tmpDos.WriteByte(MetricTarget.BitSet(descriptor.ExcludedTargets));

            if (mask.HasNone(DescriptorMask.TagCount))
            {
                _tempOutput.WriteByte((byte)descriptor.Tags.Count);
            }

            // further compression would be possible by writing only the different tags
            foreach (var(tagName, tagValue) in descriptor.Tags)
            {
                _tempOutput.WriteInt(GetStringId(tagName));
                _tempOutput.WriteInt(GetStringId(tagValue));
            }

            _count++;
            _lastDescriptor = descriptor; // TODO: Java clones the descriptor, are we safe?
        }
        private DescriptorMask GetMask(IMetricDescriptor descriptor)
        {
            var mask = DescriptorMask.None;

            // "excluded targets" are not supported, hence always masked
            mask |= DescriptorMask.ExcludedTargets;

            if (_lastDescriptor == null)
            {
                return(mask);
            }

            if (descriptor.Prefix == _lastDescriptor.Prefix)
            {
                mask |= DescriptorMask.Prefix;
            }

            if (descriptor.Name == _lastDescriptor.Name)
            {
                mask |= DescriptorMask.Name;
            }

            if (descriptor.DiscriminatorKey == _lastDescriptor.DiscriminatorKey)
            {
                mask |= DescriptorMask.DiscriminatorName;
            }

            if (descriptor.DiscriminatorValue == _lastDescriptor.DiscriminatorValue)
            {
                mask |= DescriptorMask.DiscriminatorValue;
            }

            if (descriptor.Unit == _lastDescriptor.Unit)
            {
                mask |= DescriptorMask.Unit;
            }

            // "excluded targets" are not supported, hence always masked
            //if (Objects.equals(descriptor.excludedTargets(), lastDescriptor.excludedTargets()))
            //    mask |= DescriptorMask.ExcludedTargets;

            if (descriptor.TagCount == _lastDescriptor.TagCount)
            {
                mask |= DescriptorMask.TagCount;
            }

            return(mask);
        }
Ejemplo n.º 4
0
 public MetricColumn(IMetricDescriptor metricDescriptor) => descriptor = metricDescriptor;
Ejemplo n.º 5
0
 public static Metric <T> Create <T>(IMetricDescriptor descriptor, T value)
 => new Metric <T>
 {
     Descriptor = descriptor, Value = value
 };
Ejemplo n.º 6
0
 public Metric(IMetricDescriptor descriptor, double value)
 {
     Descriptor = descriptor;
     Value      = value;
 }