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); }
public MetricColumn(IMetricDescriptor metricDescriptor) => descriptor = metricDescriptor;
public static Metric <T> Create <T>(IMetricDescriptor descriptor, T value) => new Metric <T> { Descriptor = descriptor, Value = value };
public Metric(IMetricDescriptor descriptor, double value) { Descriptor = descriptor; Value = value; }